//题目37:将一个数组逆序输出。用第一个与最后一个交换。 #include<stdio.h> #include<stdlib.h> #include<math.h> //分析:逆序输出,就会想到使用递归可以轻易实现,但是这次我就用for循环逆序打印吧 #define N 10 //这是为了以后动态数组的使用 void main(){ int a[N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; printf("原数组\n"); for (int *p = a; p < a + N; p++) { printf("%5d",*p); } printf("\n逆序打印\n"); //判断数组长度是偶数,还是奇数,好决定怎么调换 int temp = 0; //if ((N + 1) % 2) //{ // //奇数 //} //else{ // //偶数 //} //我可以在for中加一个判断,就不用循环2次 for (int i = 0; i < (N + 1) / 2; i++) { if (a[i] != a[N - i - 1])//判断是数组长度奇数,还是偶数的区别 { temp = a[i]; a[i] = a[N - i - 1];//N是10,a[0]=a[9] a[N - i - 1] = temp; } } for (int *p = a; p < a + N; p++) { printf("%5d", *p); } system("pause"); }
//题目38:取一个整数a从右端开始的4~7位。 #include<stdio.h> #include<stdlib.h> //分析:题目的意思是 例如 0011 1010 获取0--011 1--010 获取中间的这四位的值 //获取中间这四位,我们可以先通过与操作,将其他几位置0,再通过移位操作,获取值 void main(){ unsigned char a = 58; // 即0011 1010 unsigned char b = 120;// 构造0111 1000 用来将其他位置0,需要的位不变 unsigned char c = a&b;//得到0011 1000 unsigned char d = c >> 3;//右移 3位 0000 0111 得到结果是7 printf("\n得到的结果是%d\n",d); system("pause"); }
//题目39:打印出杨辉三角形(要求打印出10行如下图) //1 //1 1 //1 2 1 //1 3 3 1 //1 4 6 4 1 //1 5 10 10 5 1 #include<stdio.h> #include<stdlib.h> //分析:使用二维数组解决,杨辉三角,例如: a[2][1]=a[1][0]+a[1][1]; void main(){ int a[6][6] = { 1 }; //赋值 for (int i = 1; i < 6; i++) { for (int j = 0; j < 6; j++) { if (j==0) { a[i][j] = 1; } else{ a[i][j] = a[i-1][j-1] + a[i-1][j]; } } } //打印 for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { if (a[i][j]!=0) { printf("%5d", a[i][j]); } } //换行 printf("\n"); } system("pause"); }