C语言编程小练习7(二维数组)
2018-03-27 14:25
267 查看
C语言编程小练习7(二维数组)
7.1输入六个数到2行3列的二维数组a中, 将二维数组a中的数组元素转置,即行列互换,存储到3行2列的二维数组b中,输出二维数组b中的数组元素。
7.2求3行5列的二维数组中的最大值。
7.3计算并输出如图所示的杨辉三角形。
7.4用5行3列的二维数组存储5名学生3门课程的考试成绩,计算每名学生的平均成绩。
7.5求3行5列二维数组中的最小值,及最小值在数组中的行号和列号,并输出。
7.6求3行5列二维数组中每列数组元素的最小值,并输出。
7.7求3行3列二维数组主对角线(从左上角到右下角)上元素之和。
7.8二维数组a(3行4列)表示矩阵A,二维数组b(4行5列)表示矩阵B,计算矩阵A和矩阵B的乘积。
即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的访问是按列进行访问的,代码如下:
测试图如下:
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 }
测试图如下:
相关文章推荐
- C语言编程练习——对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
- C语言编程(练习8:数组与指针)
- C语言编程练习随笔
- C语言编程练习(二)
- C语言编程练习--念数字
- 6.1学习内容 ndk编程释放内存,C语言中char*添加字符得方法,java二维数组的读取与生成
- 编程练习二维数组 java
- C语言编程(练习9:数组与指针)
- C语言学习历程——编程练习2——03
- C语言学习历程——编程练习2——06
- c语言练习(4)--逗号分割字符串形成二维数组
- C语言编程(练习1:字符串和字符串函数)
- c语言编程练习(一)
- C语言编程入门——程序练习(上)
- C语言学习历程——编程练习2——04
- C语言学习历程——编程练习2——07
- C语言编程小练习
- 程序设计入门——C语言 翁恺 第5周编程练习
- C语言编程(练习1:数组和指针)