一、实验内容
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.第一道题思路输入五位同学的三科成绩,分别应用循环,循环嵌套对三科成绩汇总,每位同学三科求平均,每科五位同学求平均,分别输出,优化代码;第二道题方阵问题,首先二维数组表示的方阵长宽相等,输入方阵行数,那么整个方阵就已得出,输入数字分别每行求和,每列求和,对角线求和,输出,注意循环语句,大括号的使用。