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("输入分数\n");
printf("\t数学\t语文\t英语\t总分\t平均分\n");
for(i=0;i<5;i++)
{
printf("学生%d\t",i+1);
for(j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
}
Sum=sum(a,i);
average=(double)Sum/3;
printf("%d\t%.2f\n",Sum,average);
}
printf("平均分\t");
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\t",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("\n");
for(j=0;j<N;j++)
{
sum=0;
for(i=0;i<N;i++)
{
sum=sum+a[j][i];
}
printf("第%d行的和为%d\n",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\n",i+1,sum);
}
sum=0;
for(i=0;i<N;i++)
{
sum+=a[i][i];
}
printf("主对角线之和为%d\n",sum);
sum=0;
for(i=0;i<N;i++)
{
sum+=a[4-i][i];
}
printf("副对角线之和为%d\n",sum);
return 0;
}
二.实验总结
1.数据类型 数组名[常量表达式][常量表达式]
2.二维数组:按行存放,线性存储
3.在声明函数的二维数组形参时,可以省略第一维的长度,但不能省略数组第二维的长度
4.注意赋初值
5对角线分主对角线,副对角线