C语⾔编程⼩练习7(⼆维数组)
C语⾔编程⼩练习7(⼆维数组)
7.1输⼊六个数到2⾏3列的⼆维数组a中, 将⼆维数组a中的数组元素转置,即⾏列互换,存储到3⾏2列的⼆维数组b中,输出⼆维数组b中的数组元素。
1#include<stdio.h>
2
3int main(void)
4 {
5int i, j, a[2][3], b[3][2];
6 printf("Input 6 integers:\n");
7for (i = 0; i < 2; i++)
8for (j = 0; j < 3; j++)
9 scanf("%d", &a[i][j]);
10for (i = 0; i < 3; i++)
11for(j = 0; j < 2; j++)
12 b[i][j] = a[j][i];
13for (i = 0; i <3; i++) {
14for (j = 0; j < 2; j++)
15 printf("%5d", b[i][j]);
16 printf("\n");
17 }
18return0;
19 }
7.2求3⾏5列的⼆维数组中的最⼤值。
1#include<stdio.h>
2
3int main(void)
4 {
5int i, j;
6double score[3][5], max;
7 printf("Input 15 numbers: \n");
8for (i = 0; i < 3; i++)
9for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11
12 max = score[0][0];
13for (i = 0; i < 3; i++)
14for (j = 0; j < 5; j++)
15if ( score[i][j] > max)
16 max = score[i][j];
17 printf("max = %.1f\n", max);
18return0;
19 }
7.3计算并输出如图所⽰的杨辉三⾓形。
1#include<stdio.h>
2
3int main(void)
4 {
5int i, j, t[6][6];
6for ( i = 0; i < 6; i++) {
7 t[i][0] = 1;
8for (j = 1; j < i; j++)
9 t[i][j] = t[i - 1][j - 1] + t[i - 1][j];
10 t[i][j] = 1;
11 }
12for (i = 0; i < 6; i++) {
13for (j = 0; j <= i; j++)
14 printf("%6d", t[i][j]);
15 printf("\n");
16
17 }
18return0;
19 }
7.4⽤5⾏3列的⼆维数组存储5名学⽣3门课程的考试成绩,计算每名学⽣的平均成绩。
1#include<stdio.h>
2
3int main(void)
4 {
5int i, j;
6double 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}};
11for ( i = 0; i < 5; i++) {
12 sum = 0;
13for (j = 0; j < 3; j++)
14 sum += s[i][j];
15 printf("avg%d = %.1f\n", i + 1, sum / 3);
16 }
17return0;
18 }
7.5求3⾏5列⼆维数组中的最⼩值,及最⼩值在数组中的⾏号和列号,并输出。
5int i, j, x, y;
6double score[3][5], min;
7 printf("Input 15 numbers: \n");
8for (i = 0; i < 3; i++)
9for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11
12 min = score[0][0];
13for (i = 0; i < 3; i++)
14for (j = 0; j < 5; j++)
15if ( 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);
20return0;
21 }
7.6求3⾏5列⼆维数组中每列数组元素的最⼩值,并输出。
1#include<stdio.h>
2
3int main(void)
4 {
5int i, j ;
6double score[3][5], min;
7 printf("Input 15 numbers: \n");
8for (i = 0; i < 3; i++) {
9for (j = 0; j < 5; j++)
10 scanf("%lf", &score[i][j]);
11 }
12for (j = 0; j < 5; j++) {
13 min = score[0][j];
14for (i = 0; i < 3; i++)
15if ( score[i][j] < min) {
16 min = score[i][j];
17 }
18 printf(" min = %.1f\n", min);
19 }
20return0;
21 }
7.7求3⾏3列⼆维数组主对⾓线(从左上⾓到右下⾓)上元素之和。
5int i, j;
6double sum, t[3][3];
7 sum = 0;
8 printf("Input 9 numbers:\n");
9for (i = 0; i <3; i++) {
10for (j = 0; j < 3; j++)
c语言二维数组表示方法11 scanf("%lf", &t[i][j]);
12 }
13for ( i = 0; i <3; i++) {
14 sum += t[i][i];
15 }
16 printf("sum = %lf\n", sum);
17return0;
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列元素对应乘积之和。
即
⽰例:
则:
本题我⽤A的第i⾏分别和B的第j列的各个元素相乘求和,求得C的第i⾏j列的元素,这种算法中,B的访问是按列进⾏访问的,代码如下:
5int i, j, k, temp;
6double a[3][4], b[4][5], c[3][5];
7 printf("Input 12 numbers(matrix A 3*4): \n");
8//A
9for (i = 0; i < 3; i++) {
10for (j = 0; j < 4; j++)
11 scanf("%lf", &a[i][j]);
12 }
13 printf("Input 20 numbers(matrix B 4*5): \n");
14//B
15for (i = 0; i < 4; i++) {
16for (j = 0; j < 5; j++)
17 scanf("%lf", &b[i][j]);
18 }
19//C,假设矩阵C为矩阵A和B的乘积,计算A*B。
20for (i = 0; i <3; i++) {
21for (j = 0; j <5; j++) {
22 temp = 0;
23for (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++) {
31for (j = 0; j < 5; j++)
32 printf("%.lf\t", c[i][j]);
33 printf("\n");
34 }
35return0;
36 }
测试图如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论