1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。
#include <stdio.h>
#define M 5
#define N 3
void readScore(int score[M][M]);//输入函数
void aveforStud(int score[M][M],double ave1[]);//计算每个学生的平均值
void aveforCourse(int score[M][M],double ave2[]);//计算每门课程的平均分
int main()
{
int i,j,score[M][M];
double ave1[M],ave2[M];
readScore(score);
aveforStud(score,ave1);
aveforCourse(score,ave2);
printf(" 语文 数学 英语 总分 平均分");
for(i=0;i<5;i++)
{
printf("\n");
for(j=0;j<4;j++)
{
printf("%10d",score[i][j]);
}
printf("%12.2f",ave1[i]);
}
printf("\n");
printf("平均分");
for(j=0;j<N;j++)
{
printf("%4.2f ",ave2[j]);
}
return 0;
}
void readScore(int score[M][M])
{
int i,j,sum=0;
printf("输入成绩\n");
for(i=0;i<M;i++)
{
sum=0;
printf("输入第%d个学生的成绩:\n",i+1);
for(j=0;j<N;j++)
{
scanf("%d",&score[i][j]);
sum+=score[i][j];
}
score[i][3]=sum;
}
}
void aveforStud(int score[M][M],double ave1[])
{
int i,j,sum;
for(i=0;i<M;i++)
{
sum=0;
for(j=0;j<N;j++)
{
sum+=score[i][j];
}
ave1[i]=(double)sum/N;
}
}
void aveforCourse(int score[M][M],double ave2[])
{
int i,j,sum;
for(j=0;j<N;j++)
{
sum=0;
for(i=0;i<M;i++)
{
sum+=score[i][j];
}
ave2[j]=(double)sum/M;
}
}

2.求任意方阵每行、每列、两对角线上元素之和。
#include <stdio.h>
#define N 100
int main()
{
int a[N][N],i,j,m,n=0,sum=0;
printf("输入行数\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("\n");
for(j=0;j<m;j++)
{
n++;
a[i][j]=n;
printf("%4d",n);
}
}
printf("\n");
for(i=0;i<m;i++)
{
sum=0;
for(j=0;j<m;j++)
{
sum+=a[i][j];
}
printf("第%d行的和为%d\n",i+1,sum);
}
for(j=0;j<m;j++)
{
sum=0;
for(i=0;i<m;i++)
{
sum+=a[i][j];
}
printf("第%d列的和为%d\n",j+1,sum);
}
sum=0;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
if(i==j)
{
sum+=a[i][j];
}
}
}
printf("从左上到右下的对角线的和为%d\n",sum);
sum=0;
for(i=0;i<m;i++)
{
for(j=m;j>=0;j--)
{
if(i==j)
{
sum+=a[i][j];
}
}
}
printf("从右上到左下的对角线的和为%d\n",sum);
return 0;
}

实验总结:1.注意使用一维或二维数组时,避免越界现象,造成输出错误结果。
2.在输出表格形式的数据时使用二维数组。
3.编写程序前一定要先思考大体程序结构,在进行编写。
4.调用函数时,必须是已有函数,认真,细心。
原文:http://www.cnblogs.com/a378/p/6141550.html