您的位置:首页 > 编程语言 > C语言/C++

C语言编程小练习7(二维数组)

2018-03-27 14:25 267 查看
C语言编程小练习7(二维数组)

7.1输入六个数到2行3列的二维数组a中, 将二维数组a中的数组元素转置,即行列互换,存储到3行2列的二维数组b中,输出二维数组b中的数组元素。

1 #include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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+⋯+ainbnjcij=ai1b1j+ai2b2i+⋯+ainbnj

示例:

A={a11a21a12a22a13a23},B=⎧⎩⎨⎪⎪b11b21b31b12b22b32⎫⎭⎬⎪⎪A={a11a12a13a21a22a23},B={b11b12b21b22b31b32}

则:

AB={a11b11+a12b21+a13b31a21b11+a22b21+a23b31a11b12+a12b22+a13b32a21b12+a22b22+a23b32}AB={a11b11+a12b21+a13b31a11b12+a12b22+a13b32a21b11+a22b21+a23b31a21b12+a22b22+a23b32}

本题我用A的第i行分别和B的第j列的各个元素相乘求和,求得C的第i行j列的元素,这种算法中,B的访问是按列进行访问的,代码如下:

1 #include<stdio.h>
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 }


测试图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息