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小时内删除。