一、实验内容
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include <stdio.h> #define M 5 #define N 3 void readscore(int score[M][N]); int sumforstud(int score[M][N],int sum[]); double aveforstud(int score[M][N],double ave[]); double aveforcourse(int score[M][N],double ave[]); int main() { int score[M][N]; double ave[M]; int sum[M]; int i,j; readscore(score); sumforstud(score,sum); aveforstud(score,ave); printf("语文 数学 英语 总分 平均分 "); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf(" %d ",score[i][j]); } printf("%d ",sum[i]); printf("%.2f ",ave[i]); printf(" "); } aveforcourse(score,ave); for(j=0;j<N;j++) { printf("%.2f ",ave[j]); } printf(" "); return 0; } //输入 void readscore(int score[M][N]) { int i,j; for(i=0;i<M;i++) { for(j=0;j<N;j++) { switch(j) { case 0: printf("输入第%d个学生的语文成绩: ",i+1); scanf("%d",&score[i][j]); continue; case 1: printf("输入第%d个学生的数学成绩: ",i+1); scanf("%d",&score[i][j]); continue; case 2: printf("输入第%d个学生的英语成绩: ",i+1); scanf("%d",&score[i][j]); continue; } } } } //每个学生的总分 int sumforstud(int score[M][N],int sum[]) { int i,j; for(i=0;i<M;i++) { sum[i]=0; for(j=0;j<N;j++) { sum[i]=sum[i]+score[i][j]; } } } //每个学生的平均分 double aveforstud(int score[M][N],double ave[]) { int i,j,sum; for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { sum=sum+score[i][j]; } ave[i]=(double)sum/N; } } //各科平均分 double aveforcourse(int score[M][N],double ave[]) { int i,j,sum; for(j=0;j<N;j++) { sum=0; for(i=0;i<M;i++) { sum=sum+score[i][j]; } ave[j]=(double)sum/M; } }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define N 6 #define M 6 int main() { int i,j,a[M][N],sum=0,diagonalsum1=0,diagonalsum2=0; for(i=0;i<M;i++) { for(j=0;j<N;j++) { a[i][j]=j+1; printf(" %d",a[i][j]); } printf(" "); } for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { sum=sum+a[i][j]; } printf("每%d行的和为%d ",i+1,sum); } for(j=0;j<N;j++) { sum=0; for(i=0;i<M;i++) { sum=sum+a[i][j]; } printf("每%d列的和为%d ",j+1,sum); } diagonalsum1=0; for(i=0;i<M;i++) for(j=0;j<N;j++) if(i+j==M) { diagonalsum1=diagonalsum1+a[i][j]; } printf("对角线一的和为%d",diagonalsum1); diagonalsum2=0; for(i=0;i<M;i++) for(j=0;j<N;j++) if(i==j) { diagonalsum2=diagonalsum2+a[i][j]; } printf("对角线二的和为%d",diagonalsum2); return 0; }
二:实验总结
1:再给sum赋初值时没有付对,没有弄清怎样来进行for循环;
2:二维数组要注意是两层循环;
3:在用函数写程序没有弄不清主函数下面写那些输入的一些变量
还需要再加强一下怎样用函数来写程序