一、实验内容
1、实验要求:有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
代码:
# include <stdio.h> # define M 5 # define N 3 int main() { int score[M][N],i,j,sum,sum1[M],sum2; double ave1[M],ave2[N]; printf("请输入每位学生的语文,数学,英语成绩 "); for(i=0;i<M;i++) { for(j=0;j<N;j++) { scanf("%d ",&score[i][j]); } } for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { sum=sum+score[i][j]; } sum1[i]=sum; ave1[i]=(double)sum/N; } for(i=0;i<N;i++) { sum2=0; for(j=0;j<M;j++) { sum2=sum2+score[j][i]; } ave2[i]=(double)sum2/M; } printf(" 语文 数学 英语 总分 平均分 "); for(i=0;i<M;i++) { printf("学生%d ",i+1); for(j=0;j<N;j++) { printf(" %d ",score[i][j]); } printf("%d %.2f",sum1[i],ave1[i]); printf(" "); } for(i=0;i<N;i++) { printf(" %.2f",ave2[i]); } return 0; }
程序运行结果:
2、实验要求:求任意方阵每行、每列、两对角线上元素之和。
代码:
# include <stdio.h> # define M 100 int main() { int i,j,sum1,sum2,sum3,sum4,m,num[M][M]; printf("请输入方阵的行数(列数) "); scanf("%d",&m); printf("请输入方阵中的数字 "); for(i=0;i<m;i++) { for(j=0;j<m;j++) { scanf("%d",&num[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<m;j++) { printf("%d ",num[i][j]); } printf(" "); } for(i=0;i<m;i++) { sum1=0; for(j=0;j<m;j++) { sum1=sum1+num[i][j]; } printf("第%d行的数之和为%d ",i+1,sum1); } for(j=0;j<m;j++) { sum2=0; for(i=0;i<m;i++) { sum2=sum2+num[i][j]; } printf("第%d列的数之和为%d ",j+1,sum2); } sum3=0; for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(i==j) { sum3=sum3+num[i][j]; } } } printf("对角线上的数之和为%d ",sum3); sum4=0; for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(i+j==m-1) { sum4=sum4+num[i][j]; } } } printf("副对角线上的数之和为%d ",sum4); return 0; }
程序运行结果:
二、实验总结
- 在二维数组中的行数可以省略,列不可以省略。
- 在计算二维数组的行数、列数、对角线是要注意对sum赋初值的位置,不同位置会出现不同的结果。
- 数组一般与循环密不可分,在一维数组的输入与输出时,用一层循环来实现,在二维数组的输入与输出时,用两层循环来实现,即用外层循环来控制行数,用内层循环来控制列数。
- 二维数组的存储是以一维数组的形式进行存储与输出。