六十一、定义4*6的实型数组,并将各行前5列元素的平均值分别放在同一行的第6列上。
1 #include <stdio.h> 2 3 void main(void) 4 { 5 float a[4][6], sum; 6 int i, j; 7 8 for (i = 0; i < 4; i++) 9 for (j = 0; j < 5; j++) 10 a[i][j] = i * j + 1; 11 for (i = 0; i < 4; i++) 12 { 13 sum = 0; 14 for (j = 0; j < 5; j++) 15 sum = sum + a[i][j]; 16 a[i][5] = sum / 5; 17 } 18 for (i = 0; i < 4; i++) 19 { 20 for (j = 0; j< 6; j++) 21 printf("%5.1f", a[i][j]); 22 printf("\n"); 23 } 24 }
结果:
1.0 1.0 1.0 1.0 1.0 1.0
1.0 2.0 3.0 4.0 5.0 3.0
1.0 3.0 5.0 7.0 9.0 5.0
1.0 4.0 7.0 10.0 13.0 7.0
六十二、编程打印n*n阶的螺旋方阵(顺时针方向旋转)。
1 #include <stdio.h> 2 3 #define N 5 4 5 void main(void) 6 { 7 int a[N][N], i, j, k = 1, m; 8 9 if (N % 2 == 0) 10 m = N / 2; 11 else 12 m = N / 2 + 1; 13 for (i = 0; i < m; i++) 14 { 15 for (j = i; j < N - i; j++) 16 a[i][j] = k++; 17 for (j = i + 1; j < N - i; j++) 18 a[j][N-i-1] = k++; 19 for (j = N - i - 2; j >= i; j--) 20 a[N-i-1][j] = k++; 21 for (j = N - i - 2; j >= i + 1; j--) 22 a[j][i] = k++; 23 } 24 for (i = 0; i < N; i++) 25 { 26 for (j = 0; j < N; j++) 27 printf("%5d", a[i][j]); 28 printf("\n"); 29 } 30 }
结果:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
六十三、判断二维数组中是否存在鞍点(如果一个数组元素在改行上最大,在该列上最小,则称此元素为鞍点)。
1 #include <stdio.h> 2 3 #define N 3 4 #define M 4 5 6 void main(void) 7 { 8 int a[N][M], i, j, k, flag; 9 10 printf("请输入%d个数据: ", N*M); 11 for (i = 0; i < N; i++) 12 { 13 for (j = 0; j < M; j++) 14 { 15 scanf("%d", &a[i][j]); 16 printf("%4d", a[i][j]); 17 } 18 printf("\n"); 19 } 20 for (i = 0; i < N; i++) 21 { 22 k = 0; 23 for (j = 0; j < M; j++) 24 if (a[i][k] < a[i][j]) 25 k = j; 26 flag = 1; 27 for (j = 0; j < N; j++) 28 if (a[i][k] > a[j][k]) 29 { 30 flag = 0; 31 break; 32 } 33 if (flag ==1) 34 { 35 printf("第%d行第%d列的%d是鞍点.\n", i, k, a[i][k]); 36 break; 37 } 38 } 39 if (i == N) 40 printf("二维数组无鞍点.\n"); 41 }
结果:
请输入12个数据: 1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4
5 6 7 8
9 10 11 12
第0行第3列的4是鞍点.
六十四、输出n阶魔方阵。
1 #include <stdio.h> 2 3 #define N 5 4 5 void main(void) 6 { 7 int a[N][N] = {0}, i = 0, j, k; 8 9 j = N / 2; 10 a[i][j] = 1; 11 for (k = 2; k <= N * N; k++) 12 { 13 i--,j++; 14 if (i < 0 && j ==N) 15 { 16 i = i + 2; 17 j = j - 1; 18 } 19 else 20 { 21 if (i < 0) 22 i = N - 1; 23 if (j == N) 24 j = 0; 25 } 26 if (a[i][j] == 0) 27 a[i][j] = k; 28 else 29 { 30 i = i + 2; 31 j = j - 1; 32 a[i][j] = k; 33 } 34 } 35 printf("%d阶魔方阵为: \n", N); 36 for (i = 0; i < N; i++) 37 { 38 for (j = 0; j < N; j++) 39 printf("%4d", a[i][j]); 40 printf("\n"); 41 } 42 }
结果:
5阶魔方阵是:
12 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
六十五、编写求字符串长度的程序(用指针变量处理)。
1 #include <stdio.h> 2 3 void main(void) 4 { 5 char a[80], *p; 6 7 p = a; 8 gets(p); 9 puts(p); 10 while (*p != ‘\0‘) 11 p++; 12 printf("长度 = %d\n", p - a); 13 }
Mark:
程序中不能把p++改用a++,因为a是数组名,是一个固定值,不能进行a++运算。
"while (*p != ‘\0‘)"等价于"while (*p)"。
时间: 2024-10-22 07:01:42