C语言编程小练习7(二维数组)
7.1输入六个数到2行3列的二维数组a中, 将二维数组a中的数组元素转置,即行列互换,存储到3行2列的二维数组b中,输出二维数组b中的数组元素。
1 #include
2
3 int main(void)
4 {
5 int i, j, a[2][3], b[3][2];
6 printf("Input 6 integers:\n");
7 for (i = 0; i < 2; i++)
8 for (j = 0; j < 3; j++)
9 scanf("%d", &a[i][j]);
10 for (i = 0; i < 3; i++)
11 for(j = 0; j < 2; j++)
12 b[i][j] = a[j][i];
13 for (i = 0; i <3; i++) {
14 for (j = 0; j < 2; j++)
15 printf("%5d", b[i][j]);
16 printf("\n");
17 }
18 return 0;
19 }
7.2求3行5列的二维数组中的最大值。
1 #include
2
3 int main(void)
4 {
5 int i, j;
6 double score[3][5], max;
7 printf("Input 15 numbers: \n");
8 for (i = 0; i < 3; i++)
9 for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11
12 max = score[0][0];
13 for (i = 0; i < 3; i++)
14 for (j = 0; j < 5; j++)
15 if ( score[i][j] > max)
16 max = score[i][j];
17 printf("max = %.1f\n", max);
18 return 0;
19 }
7.3计算并输出如图所示的杨辉三角形。
1 #include
2
3 int main(void)
4 {
5 int i, j, t[6][6];
6 for ( i = 0; i < 6; i++) {
7 t[i][0] = 1;
8 for (j = 1; j < i; j++)
9 t[i][j] = t[i - 1][j - 1] + t[i - 1][j];
10 t[i][j] = 1;
11 }
12 for (i = 0; i < 6; i++) {
13 for (j = 0; j <= i; j++)
14 printf("%6d", t[i][j]);
15 printf("\n");
16
17 }
18 return 0;
19 }
7.4用5行3列的二维数组存储5名学生3门课程的考试成绩,计算每名学生的平均成绩。
1 #include
2
3 int main(void)
4 {
5 int i, j;
6 double sum, s[5][3] = {{82.5, 90, 78.5},
7 {75, 88, 92.5},
8 {95, 65.5, 70},
9 {81, 72.5, 86.5},
10 {89, 98, 66}};
11 for ( i = 0; i < 5; i++) {
12 sum = 0;
13 for (j = 0; j < 3; j++)
14 sum += s[i][j];
15 printf("avg%d = %.1f\n", i + 1, sum / 3);
16 }
17 return 0;
18 }
7.5求3行5列二维数组中的最小值,及最小值在数组中的行号和列号,并输出。
1 #include
2
3 int main(void)
4 {
5 int i, j, x, y;
6 double score[3][5], min;
7 printf("Input 15 numbers: \n");
8 for (i = 0; i < 3; i++)
9 for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11
12 min = score[0][0];
13 for (i = 0; i < 3; i++)
14 for (j = 0; j < 5; j++)
15 if ( score[i][j] < min) {
16 min = score[i][j];
17 x = i, y = j;
18 }
19 printf("min = %.1f,line number=%d,column number=%d\n", min, x, y);
20 return 0;
21 }
7.6求3行5列二维数组中每列数组元素的最小值,并输出。
1 #include
2
3 int main(void)
4 {
5 int i, j ;
6 double score[3][5], min;
7 printf("Input 15 numbers: \n");
8 for (i = 0; i < 3; i++) {
9 for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11 }
12 for (j = 0; j < 5; j++) {
13 min = score[0][j];
14 for (i = 0; i < 3; i++)
15 if ( score[i][j] < min) {
16 min = score[i][j];
17 }
18 printf(" min = %.1f\n", min);
19 }
20 return 0;
21 }
7.7求3行3列二维数组主对角线(从左上角到右下角)上元素之和。
1 #include
2
3 int main(void)
4 {
5 int i, j;
6 double sum, t[3][3];
7 sum = 0;
8 printf("Input 9 numbers:\n");
9 for (i = 0; i <3; i++) {
10 for (j = 0; j < 3; j++)
11 scanf("%lf", &t[i][j]);
12 }
13 for ( i = 0; i <3; i++) {
14 sum += t[i][i];
15 }
16 printf("sum = %lf\n", sum);
17 return 0;
18 }
7.8二维数组a(3行4列)表示矩阵A,二维数组b(4行5列)表示矩阵B,计算矩阵A和矩阵B的乘积。
我们先来了解一下矩阵相乘概念。
矩阵相乘应满足的条件:
(1) 矩阵A的列数必须等于矩阵B的行数,矩阵A与矩阵B才能相乘;
(2) 矩阵C的行数等于矩阵A的行数,矩阵C的列数等于矩阵B的列数;
(3) 矩阵C中第i行第j列的元素等于矩阵A的第i行元素与矩阵B的第j列元素对应乘积之和。
即 cij=ai1b1j+ai2b2i+⋯+ainbnj c i j = a i 1 b 1 j + a i 2 b 2 i + ⋯ + a i n b n j
示例:
A={a11a21a12a22a13a23},B=⎧⎩⎨⎪⎪b11b21b31b12b22b32⎫⎭⎬⎪⎪ A = { a 11 a 12 a 13 a 21 a 22 a 23 } , B = { b 11 b 12 b 21 b 22 b 31 b 32 }
则:
AB={a11b11+a12b21+a13b31a21b11+a22b21+a23b31a11b12+a12b22+a13b32a21b12+a22b22+a23b32} A B = { a 11 b 11 + a 12 b 21 + a 13 b 31 a 11 b 12 + a 12 b 22 + a 13 b 32 a 21 b 11 + a 22 b 21 + a 23 b 31 a 21 b 12 + a 22 b 22 + a 23 b 32 }
本题我用A的第i行分别和B的第j列的各个元素相乘求和,求得C的第i行j列的元素,这种算法中,B的访问是按列进行访问的,代码如下:
1 #include
2
3 int main(void)
4 {
5 int i, j, k, temp;
6 double a[3][4], b[4][5], c[3][5];
7 printf("Input 12 numbers(matrix A 3*4): \n");
8 //A
9 for (i = 0; i < 3; i++) {
10 for (j = 0; j < 4; j++)
11 scanf("%lf", &a[i][j]);
12 }
13 printf("Input 20 numbers(matrix B 4*5): \n");
14 //B
15 for (i = 0; i < 4; i++) {
16 for (j = 0; j < 5; j++)
17 scanf("%lf", &b[i][j]);
18 }
19 //C,假设矩阵C为矩阵A和B的乘积,计算A*B。
20 for (i = 0; i <3; i++) {
21 for (j = 0; j <5; j++) {
22 temp = 0;
23 for (k = 0; k < 4; k++) {
24 temp += a[i][k] * b[k][j];
25 c[i][j] = temp;
26 }
27 }
28 }
29 //输出矩阵c
30 printf("matrix C as follow(3*5):\n");
for (i = 0; i < 3; i++) {
31 for (j = 0; j < 5; j++)
32 printf("%.lf\t", c[i][j]);
33 printf("\n");
34 }
35 return 0;
36 }