1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> #define N 3 #define M 5 void readScore(int score[M][M]); void aveforStud(int score[M][M],double ave[M][M]); void aveforCourse(int score[M][M],double asd[4]); int main() { int score[M][M],i,j; double ave[M][M],asd[4]; readScore(score); aveforStud(score,ave); printf(" 语文 数学 英语 总分 平均分 "); for(i=0;i<M;i++) { for(j=0;j<4;j++) { printf(" %8d",score[i][j]); } printf("% 8.2f ",ave[i][4]); printf(" "); } aveforCourse(score,asd); printf("平均分"); for(i=0;i<4;i++) { printf("%7.2f ",asd[i]); } } void readScore(int score[M][M]) { int j,i,sum=0; printf("输入成绩"); for(i=0;i<M;i++) { sum=0; printf("输入第%d个学生的成绩 ",i+1); for(j=0;j<N;j++) { scanf("%d",&score[i][j]); sum+=score[i][j]; } score[i][3]=sum; } } void aveforStud(int score[M][M],double ave[M][M]) { int i; for(i=0;i<M;i++) { ave[i][4]=score[i][3]/3.0; } } void aveforCourse(int score[M][M],double asd[4]) { int i,j,sum; for(i=0;i<4;i++) { sum=0; for(j=0;j<5;j++) { sum+=score[j][i]; } asd[i]=sum/5.0; } }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #define N 100 int main() { int i,j,H,x=0,zhen[N][N],sum; printf("输入方阵行数"); scanf("%d",&H); for(i=0;i<H;i++) { for(j=0;j<H;j++) { x++; zhen[i][j]=x; printf("%3d",x); } printf(" "); } for(i=0;i<H;i++) { sum=0; for(j=0;j<H;j++) { sum+=zhen[i][j]; } printf("第%d行元素和为%d ",i+1,sum); } for(i=0;i<H;i++) { sum=0; for(j=0;j<H;j++) { sum+=zhen[j][i]; } printf("第%d列元素和为%d ",i+1,sum); } sum=0; for(i=0;i<H;i++) { sum+=zhen[i][i]; } printf("左上到右下元素和为%d ",sum); sum=0; j=H-1; for(i=0;i<H;i++) { sum+=zhen[i][j]; j--; } printf("右上到左下元素和为%d ",sum); return 0; }
实验总结:1.注意for循环的嵌套的先后顺序,用一个数走一遍程序
2.注意运用代表行列的变量,每行相加,外循环表示行,内循环表示列,每列相加,外循环表示列,内循环表示行
3.多次求和,注意每次重新求和时给sum赋初值
4.在输出表格形式的数据时灵活使用二维数组。
5.注意数组越界问题,score[3]是从score[0]到score[2]