第十次
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> #define M 5 #define N 3 void score(int num[M][N]); void aveforstudent(int num[M][N],double average1[]); void aveforsubject(int num[M][N],double average2[]); int main() { int num[M][N],i,j,sum1; double average1[M],average2[N]; score(num); aveforstudent(num,average1); aveforsubject(num,average2); printf("\t语文\t数学\t英语\t总分\t平均分\n"); for(i=0;i<M;i++) { printf("学生%d\t",i+1); sum1=0; for(j=0;j<N;j++) { printf("%d\t",num[i][j]); sum1=sum1+num[i][j]; } printf("%d\t",sum1); printf("%.2f",average1[i]); printf("\n"); } printf("平均分\t"); for(j=0;j<N;j++) { printf("%.2f\t",average2[j]); } return 0; } void score(int num[M][N]) { int i,j; for(i=0;i<M;i++) { printf("请分别输入第%d个学生的语文,数学,英语成绩:\n",i+1); for(j=0;j<N;j++) { scanf("%d",&num[i][j]); } } } void aveforstudent(int num[M][N],double average1[]) { int i,j,sum; for(i=0;i<M;i++) { sum=0; for(j=0;j<N;j++) { sum=sum+num[i][j]; } average1[i]=(double)sum/N; } } void aveforsubject(int num[M][N],double average2[]) { int i,j,sum; for(j=0;j<N;j++) { sum=0; for(i=0;i<M;i++) { sum=sum+num[i][j]; } average2[j]=(double)sum/M; } }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define M 3 #define N 3 int main() { int num[M][N],i,j,a,b,sum1,sum2,sum3,sum4; printf("请输入任意九个数,组成方阵\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) { scanf("%d",&num[i][j]); } } printf("方阵为:\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) { if(j%3==0) { printf("\n"); } printf("%3d",num[i][j]); } } printf("\n"); for(a=0;a<M;a++) { sum1=0; sum2=0; for(b=0;b<N;b++) { sum1=sum1+num[a][b]; sum2=sum2+num[b][a]; } printf("第%d行的元素之和为%d\n",a+1,sum1); printf("第%d列的元素之和为%d\n",a+1,sum2); } sum3=num[0][0]+num[1][1]+num[2][2]; sum4=num[0][2]+num[1][1]+num[2][0]; printf("从左上到右下的对角线元素之和为%d\n从左下到右上的对角线元素之和为%d",sum3,sum4); return 0; }
实验总结
1.表格的输出使用\t,表示水平制表位,它的作用是将光标移到最接近8的倍数的位置,使得后面的输入从此开始,就是两个数间隔8个空格位置
2.计算学生的平均分时先遍历每个学生,计算课程的平均分先遍历每门课程
3.求方阵中每行每列元素之和时,存入二维数组要注意区分行和列