第十次作业
一、实验内容
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> #define N 5 #define M 5 void readScore(int score[N][M]); void printScore(int score[N][M]); void sumScore(int score[N][M],int sum[M]); void aveScore1(int score[N][M],double ave[N]); void aveScore2(int score[N][M],double ave[M]); int main() { int score[N][M]={0},j; double ave[M]; readScore(score); printf(" 语文\t数学\t英语\t总分\t平均分\n"); printScore(score); printf("平均分 "); aveScore2(score,ave); for(j=0;j<3;j++) { printf("%.2f\t",ave[j]); } return 0; } void readScore(int score[N][M]) { int i,j; for(i=0;i<N;i++) { printf("请输入第%d个人成绩\n",i+1); for(j=0;j<3;j++) { scanf("%d",&score[i][j]); } } } void printScore(int score[N][M]) { int i,j,sum[N]={0}; double ave[N]={0}; sumScore(score,sum); aveScore1(score,ave); for(i=0;i<N;i++) { for(j=0;j<3;j++) { printf("\t%d",score[i][j]); } printf("\t%d",sum[i]); printf("\t%.2f",ave[i]); printf("\n"); } } void sumScore(int score[N][M], int sum[M]) { int i,j,h; for(i=0;i<N;i++) { h=0; for(j=0;j<3;j++) { h+=score[i][j]; } sum[i]=h; } } void aveScore1(int score[N][M],double ave[N]) { int i,j,h; for(i=0;i<N;i++) { h=0; for(j=0;j<3;j++) { h+=score[i][j]; } ave[i]=(double)h/3; } } void aveScore2(int score[N][M],double ave[M]) { int i,j,h; for(j=0;j<3;j++) { h=0; for(i=0;i<N;i++) { h+=score[i][j]; } ave[j]=(double)h/N; } }
2.求任意方阵每行、每列、两对角线上元素之和。
# include <stdio.h> # define M 50 int main() { int i,j,sum1,sum2,sum3,sum4,m,num[M][M]; printf("请输入方阵的宽度\n"); scanf("%d",&m); printf("请输入方阵中的数字\n"); for(i=0;i<m;i++) { for(j=0;j<m;j++) { scanf("%d",&num[i][j]); } } for(i=0;i<m;i++) { for(j=0;j<m;j++) { printf("%d ",num[i][j]); } printf("\n"); } for(i=0;i<m;i++) { sum1=0; for(j=0;j<m;j++) { sum1=sum1+num[i][j]; } printf("第%d行的数之和为%d\n",i+1,sum1); } for(j=0;j<m;j++) { sum2=0; for(i=0;i<m;i++) { sum2=sum2+num[i][j]; } printf("第%d列的数之和为%d\n",j+1,sum2); } sum3=0; for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(i==j) { sum3=sum3+num[i][j]; } } } printf("主对角线上的数之和为%d\n",sum3); sum4=0; for(i=0;i<m;i++) { for(j=0;j<m;j++) { if(i+j==m-1) { sum4=sum4+num[i][j]; } } } printf("副对角线上的数之和为%d\n",sum4); return 0; }
实验总结:
1.二维数组中元素个数=行数*列数。
2.在声明函数的二维数组形参时,可以省略第一维的长度,但不能省略数组第二维的长度。
3.二维数组的存储是以一维数组的形式进行存储与输出。
4.注意数组越界问题
5.定义变量时要分清是int型还是double型,如果需要赋初值的一定记得赋初值。