//////————————————————————进阶版
////数据在内存中的存储
////1.数据类型的介绍
//#include<stdio.h>
//int main()
//{
// int a = 10;//4字节
// float f = 10.0;//4字节
// short int b = 10;
// printf("%p\n",f);
// return 0;
//}
////整型类型
//char//[int]均可省略
// unsigned char
// signed char
//short
// unsigned short[int]
// signed short[int]
//int
// unsigned int
// signed int
//long
// unsigned long[int]
// signed long[int]
//浮点数类型:
//float
//double
//构造类型
//数组类型
//结构体类型 struct
//枚举类型 enum
//联合类型 union
//指针类型
//int* pi;
//char* pc;
//float* pf;
//void* pv;
//空类型:
//void 表示空类型(无类型)
//通常应用于函数的返回类型、函数的参数、指针类型。
//空类型举例
//#include<stdio.h>
////第一个void表示不会返回值
//void test(void)//()中的void是表示此函数是不需要参数的,且此处的void可有可无
//{
// printf("hehe");
//}
//int main()
//{
// test();
// return 0;
//}
//2.整形在内存中的储存
//数值有不同的表示形式:2、8、10、16进制
//整数的2进制也有三种表现形式:
// 前提:1.正整数的原、反、补均相同2.负整数:通过下列计算得出
// 原码:根据数值的正负直接写出的2禁止序列
// 反码:原码的符号位不变,其他的位,按位取反(0->1,1->0)
// 补码:反码+1
//#include<stdio.h>
//int main()
//{
// int a = 20;
// //a的2进制序列
// //原码:00000000 00000000 00000000 00010100
// // 原码的16进制:0x00 00 00 14
// //反码:01111111 11111111 11111111 11101011
// //补码:01111111 11111111 11111111 11101100
// int b = -10;
// //b的2进制序列
// //原码:10000000 00000000 00000000 00001010
// //原码的16进制:0x00 00 00 0a(每4个比特位为一个字节0000->0)//a为10
// //反码:11111111 11111111 11111111 11110101(每4个比特位为一个字节1111->f,f=15)
// //反码的16进制:0xfffffff5
// //补码:01111111 11111111 11111111 11110110
// //补码的16进制:0xfffffff6
// return 0;
//}
//结论:整数在内存中存放时,存放的是二进制的补码
//理由在计算机系统中,数值一律用补码来表示和存储。使用补码,
// 可以将符号位和数值位(符号位和数值位——就是二进制序列的首位数字代表了二者其一的哪一位)
// 统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)(虽然不可以减法,但是可以改成加法)
// 此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
//简单地说:eg:求1+(-1)
//1的原码 00000000 00000000 00000000 00000001
//1的补码 00000000 00000000 00000000 00000001(正整数原、反、补相同)
//-1的原码 10000000 00000000 00000000 00000001
//-1的补码 11111111 11111111 11111111 11111111
//原码相加 10000000 00000000 00000000 00000010(值为-2)错误
//补码相加 100000000 00000000 00000000 00000000(33位)相加时最高位“1”丢了,
//剩下的32个比特位全为0,则结果为0,正确
//————————————————————————————作业题
////【一维数组】输入10个整数,求平均值
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
// int a,b,c,d,e,f,g,h,i,j;
// int Add = 0;
// scanf("%d%d%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
// Add=a+b+c+d+e+f+g+h+i+j;
// int n = Add / 10;
// printf("平均值为%d\n", n);
// return 0;
//}
////打印图案的练习,该任务是打印用“*”组成的X形图案。多组输入,一个整数(2—20),
//// 表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。针对每行输入,输出用“*”组成的X形图案。
////输入--------5
////* *
//// * *
//// *
//// * *
////* *
////输入--------6
////* *
//// * *
//// **
//// **
//// * *
////* *
//#define _CRT_SECURE_NO_WARNINGS 1
//#include <stdio.h>
//int main()
//{
// int n;
// while (scanf("%d", &n) != EOF) {
// int i, j;
// for (i = 0; i < n; i++) {
// for (j = 0; j < n; j++) {
// if (i == j || i + j == n - 1) {
// printf("*");
// }
// else {
// printf(" ");
// }
// }
// printf("\n");
// }
// }
//}
////打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。
////输入描述:
////多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“ * ”的数量。
////输出描述:
////针对每行输入,输出用“ * ”组成的“空心”正方形,每个“ * ”后面有一个空格。
////输入:4
////输出:
////* * * *
////* *
////* *
////* * * *
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
// int n, i, j;
// while (~scanf("%d", &n))
// {
// for (i = 0; i < n; i++)
// {
// for (j = 0; j < n; j++)
// {
// if (i > 0 && (i < n - 1) && j > 0 && (j < n - 1))
// printf(" ");
// else
// printf("* ");
// }
// printf("\n");
// }
// }
// return 0;
//}
////输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。
////输入描述:
////一行,输入10个整数(范围 - 231~231 - 1),用空格分隔。
////输出描述:
////一行,逆序输出输入的10个整数,用空格分隔。
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
// int a[10] = { 0 }, i;
// for (i = 0; i < 10; i++)
// {
// scanf("%d", &a[i]);
// }
// for (i = 9; i >= 0; i--)
// {
// printf("%d ", a[i]);
// }
// return 0;
//}
////有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
////输入描述:
////第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。(1≤n≤10, 1≤m≤10)
////从2到n + 1行,每行输入m个整数(范围 - 231~231 - 1),用空格分隔,共输入n * m个数,表示第一个矩阵中的元素。
////输出描述:
////输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main() {
// int m, n;
// scanf("%d %d", &m, &n);
// int a[m][n];
// for (int i = 0; i < m; i++)
// for (int j = 0; j < n; j++)
// scanf("%d", &a[i][j]);
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < m; j++) {
// printf("%d ", a[j][i]);
// }
// printf("\n");
// }
// return 0;
//}
////输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
////数据范围:1<=n,m<=1000,序列中满足0≤val≤30000
////输入描述:
////输入包含三行,
////第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,
//// m表示第三行第二个升序序列中数字的个数。
////第二行包含n个整数,用空格分隔。
////第三行包含m个整数,用空格分隔。
////输出描述:
////输出为一行,输出长度为n + m的升序序列,即长度为n的升序序列和
////长度为m的升序序列中的元素重新进行升序序列排列合并。
//#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
// int n, m;
// scanf("%d %d", &n, &m);
// int nm[2000];
// for (int i = 0; i < n + m; i++) scanf("%d", &nm[i]);
// for (int j = 1; j < n + m - 1; j++)
// {
// for (int i = 0; i < n + m - j; i++)
// {
// if (nm[i] > nm[i + 1])
// {
// int temp = nm[i + 1];
// nm[i + 1] = nm[i];
// nm[i] = temp;
// }
// }
// }
// for (int i = 0; i < n + m; i++) printf("%d ", nm[i]);
// return 0;
//}
////【一维数组】交换数组将数组A中的内容和数组B中的内容进行交换。(数组一样大)
//#include <stdio.h>
//void swapArrays(int a[], int b[], int size)
//{
// int temp;
// for (int i = 0; i < size; i++)
// {
// temp = a[i];
// a[i] = b[i];
// b[i] = temp;
// }
//}
//int main() {
// int size = 5; // 数组大小
// int a[] = { 1, 2, 3, 4, 5 }; // 数组a
// int b[] = { 6, 7, 8, 9, 10 }; // 数组b
// printf("Before swapping:\n");
// printf("Array a: ");
// for (int i = 0; i < size; i++)
// {
// printf("%d ", a[i]);
// }
// printf("\n");
// printf("Array b: ");
// for (int i = 0; i < size; i++)
// {
// printf("%d ", b[i]);
// }
// printf("\n");
//
// swapArrays(a, b, size);
//
// printf("\nAfter swapping:\n");
// printf("Array a: ");
// for (int i = 0; i < size; i++)
// {
// printf("%d ", a[i]);
// }
// printf("\n");
// printf("Array b: ");
// for (int i = 0; i < size; i++)
// {
// printf("%d ", b[i]);
// }
// printf("\n");
// return 0;
//}
标签:11111111,10,15,int,++,C语言,00000000,初学,printf From: https://blog.51cto.com/KKhahaha/8681882