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

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计算并输出如图所示的杨辉三角形。

C语言编程小练习7(二维数组)_第1张图片

  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 }

测试图如下:
C语言编程小练习7(二维数组)_第2张图片

你可能感兴趣的:(C)