第十次作业
一、实验内容
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
1.1 代码:
#include <stdio.h> #define N 3 #define M 5 double average(int score[M][N]); int main ( ) { int score[M][N],sum,sum1[M],sum2,i,j; double average1[M],average2[N]; for(i=0;i<M;i++) { printf("请输入第%d名学生的成绩\n",i+1); 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+=score[i][j]; } sum1[i]=sum; average1[i]=(double)sum/N; } for(i=0;i<N;i++) { sum2=0; for(j=0;j<M;j++) { sum2+=score[j][i]; } average2[i]=(double)sum2/M; } printf("语文\t数学\t英语\t总分\t平均分\n"); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf("%d\t",score[i][j]); } printf(" %d\t%.2f\n",sum1[i],average1[i]); printf("\n"); } for(i=0;i<N;i++) { printf("平均分分别为%.2f\n",average2[i]); } return 0; }
1.2 程序运行结果:
2.求任意方阵每行、每列、两对角线上元素之和。
2.1 代码:
#include <stdio.h> #define M 5 int main() { int a,i,j,score[M][M]={0},sum1,sum2,sum3,sum4; printf("请输入行数(列数)\n"); scanf("%d",&a); printf("请输入数字\n"); for(i=0;i<a;i++) { for(j=0;j<a;j++) { scanf("%d",&score[i][j]); printf("%d",score[i][j]); } printf("\n"); } for(i=0;i<a;i++) { sum1=0; for(j=0;j<a;j++) { sum1+=score[i][j]; } printf("第%d行的和为%d\n",i+1,sum1); } for(j=0;j<a;j++) { sum2=0; for(i=0;i<a;i++) { sum2+=score[i][j]; } printf("第%d列的和为%d\n",j+1,sum2); } sum3=0; for(i=0;i<a;i++) { for(j=0;j<a;j++) { if(i==j) { sum3+=score[i][j]; } } } printf("对角线的和为%d\n",sum3); sum4=0; for(i=0;i<a;i++) { for(j=0;j<a;j++) { if(i+j==a-1) { sum4+=score[i][j]; } } } printf("副对角线的和为%d",sum4); return 0; }
2.2 程序运行结果:
二、实验总结
1.计算每个变量的时候都要重新赋值。
2.函数不用返回值。因为平均值数组是通过参数数组传过来的,可以把函数计算的平均值带回去
3.如果对数组每行求平均,那么平均值是多个,应该存放在一个数组里面,函数参数应该有一个存放平均值的数组