第十次作业
一、实验内容
1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include<stdio.h> int sum(double a[5][5],int m); double average(double a[5][5],int m); double average1(double a[5][5],int m); int main() { int i,j,n; double a[5][5]={{68,69,61},{78,75,98},{60,79,97}}; for(i=0;i<=5;i++) { a[i][3]=sum(a,i); a[i][4]=average(a,i); } printf("\t语文\t数学\t英语\t总分\t平均分\n"); for(i=0;i<=5;i++) { for(j=0;j<5;j++) { printf("\t%.2lf",a[i][j]); } printf("\n"); } printf("平均分\n"); for(i=0;i<3;i++) { printf("\t%.2lf",average1(a,i)); } return 0; } int sum(double a[5][5],int m) { int i,sum=0; for(i=0;i<3;i++) { sum+=a[m][i]; } return sum; } double average(double a[5][5],int m) { return sum(a,m)/3.0; } double average1(double a[5][5],int m) { int n,sum=0; for(n=0;n<5;n++) { sum+=a[n][m]; } return sum/5.0; }
2.求任意方阵每行、每列、两对角线上元素之和。
#include<stdio.h> #include<stdlib.h> #define N 10 int main() { int i,j,m=0,n,sum; double a[N][N]; printf("输入方阵行数:\n"); scanf("%d",&n); for(i=0;i<n;i++)//每行求和 { for(j=0;j<n;j++) { m++; a[i][j]=m; printf("%3d",m); } printf("\n"); } for(i=0;i<n;i++) { sum=0; for(j=0;j<n;j++) { sum+=a[i][j]; } printf("第%d行元素的和为%d\n",i+1,sum); } for(i=0;i<n;i++)//每列求和 { sum=0; for(j=0;j<n;j++) { sum+=a[j][i]; } printf("第%d列的元素合为%d:\n",i+1,sum); } sum=0; for(i=0;i<n;i++) { sum+=a[i][j]; j--; } printf("对角线上的元素和为%d\n",sum); return 0; }
二、实验总结
1.二维数组声明函数形参,可以省略第一维数组的长度,不能省略第二维数组的长度。
2.表格的输出使用\t,表示水平制表位。
3.向函数传递数组,数组作为函数的参数,不能在[]中给出数组的大小,必须用另一个参数来传入数组大小。
4.第一道题思路输入五位同学的三科成绩,分别应用循环,循环嵌套对三科成绩汇总,每位同学三科求平均,每科五位同学求平均,分别输出,优化代码;第二道题方阵问题,首先二维数组表示的方阵长宽相等,输入方阵行数,那么整个方阵就已得出,输入数字分别每行求和,每列求和,对角线求和,输出,注意循环语句,大括号的使用。