1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> void scanfscore( int a[5][3] ); void ave(int a[5][3]); int sum(int a[5][3],int i); int main() { int a[5][3],i,j,Sum; double average; scanfscore(a); printf("输入分数 "); printf(" 数学 语文 英语 总分 平均分 "); for(i=0;i<5;i++) { printf("学生%d ",i+1); for(j=0;j<3;j++) { printf("%d ",a[i][j]); } Sum=sum(a,i); average=(double)Sum/3; printf("%d %.2f ",Sum,average); } printf("平均分 "); ave(a); return 0; } void scanfscore( int a[5][3]) { int i,j; for(i=0;i<5;i++) for(j=0;j<3;j++) { scanf("%d",&a[i][j]); } } void ave(int a[][3]) { int i,j,sum; double ave; for(j=0;j<3;j++) { for(i=0,sum=0;i<5;i++) { sum+=a[i][j]; } ave=(double)sum/5; printf("%.2f ",ave); } } int sum(int a[][3],int i) { int j,Sum; for(j=0,Sum=0;j<3;j++) { Sum+=a[i][j]; } return Sum; }
2.求任意方阵每行、每列、两对角线上元素之和。
# include<stdio.h> # define N 5 int main() { int i,j,n=1,sum,a[N][N]={0}; for(i=0;i<N;i++) for(j=0;j<N;j++) { a[i][j]=n; n++; if(n%5==0) { printf(" %3d",a[i][j]); } } printf(" "); for(j=0;j<N;j++) { sum=0; for(i=0;i<N;i++) { sum=sum+a[j][i]; } printf("第%d行的和为%d ",j+1,sum); } for(i=0;i<N;i++) { sum=0; for(j=0;j<N;j++) { sum=sum+a[j][i]; } printf("第%d列的和为%d ",i+1,sum); } sum=0; for(i=0;i<N;i++) { sum+=a[i][i]; } printf("主对角线之和为%d ",sum); sum=0; for(i=0;i<N;i++) { sum+=a[4-i][i]; } printf("副对角线之和为%d ",sum); return 0; }
二.实验总结 1.数据类型 数组名[常量表达式][常量表达式] 2.二维数组:按行存放,线性存储 3.在声明函数的二维数组形参时,可以省略第一维的长度,但不能省略数组第二维的长度 4.注意赋初值 5对角线分主对角线,副对角线