1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include <stdio.h> #define M 5 //五名学生 #define N 3 //三门课程 void sumscore(int score[M][N],int sum[]); //每个学生成绩和 void average(int score[M][N],double ave[]); //每个人平均分 void average1(int score[M][N],double ave[]); //各科成绩求平均 int main() { int score[M][N]={{90,88,98},{88,77,99},{79,89,97},{66,55,78},{97,66,79}},i,j,sum[M]={0}; double ave[M]={0},ave1[N]={0}; sumscore(score,sum); average(score,ave); average1(score,ave1); printf(" 语文 数学 英语 总分 平均分 "); for(i=0;i<M;i++) { for(j=0;j<N;j++) { printf(" %2d",score[i][j]); } printf(" %2d",sum[i]); printf(" %.2f",ave[i]); printf(" "); } printf(" 平均分"); //各科成绩平均分 for(j=0;j<N;j++) { printf(" %.2f",ave1[j]); } printf(" "); return 0; } void sumscore(int score[M][N],int sum[]) //每个学生成绩和 { int i,j,sum1; for(i=0;i<M;i++) { sum1=0; for(j=0;j<N;j++) { sum1+=score[i][j]; } sum[i]=sum1; } } void average(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+=score[i][j]; } ave[i]=(double)sum/N; } } void average1(int score[M][N],double ave[M]) //各科成绩求平均 { int j,i,sum2; for(i=0;i<N;i++) { sum2=0; for(j=0;j<M;j++) { sum2+=score[i][j]; } ave[i]=(double)sum2/M; } }
总结:注意变量名和地址名不能相同 注意输出格式的控制 行列别搞混
2.求任意方阵每行、每列、两对角线上元素之和。
#include <stdio.h> #define N 100 int main() { int arr[N][M],i,j,n,sum1=0,sum2=0,sum=0,sum3=0; printf("请输入行列 "); scanf("%d%d",&n,&n); for(i=0;i<n;i++) { printf("请输入第%d行数字 ",i+1); for(j=0;j<n;j++) { scanf("%d",&arr[i][j]); } } for(i=0;i<n;i++) { sum=0; for(j=0;j<n;j++) { sum+=arr[i][j]; } printf("第%d行的和为%d ",i+1,sum); } for(j=0;j<n;j++) { sum3=0; for(i=0;i<n;i++) { sum3+=arr[i][j]; } printf("第%d列的和为%d ",j+1,sum3); } for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { sum1+=arr[i][j]; } if(i+j==n-1) { sum2+=arr[i][j]; } } } printf("对角线之和分别为%d %d ",sum1,sum2); return 0; }
总结:找规律对角线的坐标i和j相等 或者 相加=n-1, 不要忘记给sum赋初值
知识点总结:
1. 二维数组 数组名【下标】【下标】,注意:下标值应在已定义的数组大小的范围内
2. 可以省略数组第一维的长度,不能省略第二维的长度
3. 在一维数组的输入与输出时,用一层循环来实现,在二维数组的输入与输出时,用两层循环来实现,即用外层循环来控制行数,用内层循环来控制列数
4. 二维数组虽然称作二维,但在计算机中存储时是一维的