C语言程序设计 案例学习:计算平均成绩

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.6案例学习:计算平均成绩

【例5-18】输入3个学生4门课程的成绩,分别求每个学生的平均成绩和每门课程的平均成绩。

(1)问题分析:

有3个学生,每个学生有4门课,学生的成绩包括3行4列。求每个学生的平均成绩即在数组中做行求和,求每门课程的平均成绩即在数组中做列求和。因此可以用4行5列的数组存放,其中最后一列用于存放每个学生的各门课的平均成绩,最后一行用于存放各门课的平均成绩,例如:

C1C2C3C4S_AVER

S167.068.076.088.074.8

S287.089.091.092.089.8

S393.094.089.099.093.8

C_AVER82.383.785.393.0

(2)参考程序如下:

/*程序名:5_18.c*/

/*程序功能:计算学生的平均成绩*/

#include

#define M3

#define N4

int main()

{

int i,j;

float score[M+1][N+1]={0};/*定义数组,各元素初值为0*/

printf("array a:\n");

for(i=0;i

for(j=0;j

{

printf("input the mark of%dth courseof%dth student:",j+1,i+1);

scanf("%f",&score[i][j]);

}

for(i=0;i

{

for(j=0;j

{

score[i][N]+=score[i][j];/*求第i个学生的总成绩*/

score[M][j]+=score[i][j];/*求第j门课的总成绩*/

}

score[i][N]/=N;/*求第i个学生的平均成绩*/

}

for(j=0;j

score[M][j]/=M;

printf("NO.C1C2C3C4AVER\n");

for(i=0;i

{

printf("stu%d\t",i+1);

for(j=0;j

printf(“%6.1f\t”,score[i][j]);

printf(“\n”);

}

printf("-----------------------------------------------------------");

printf(“\naver_c”);

for(j=0;j

printf(“%6.1f\t”,score[M][j]);

printf(“\n”);

return0;

}

运行结果:

按要求输入三个学生的四门课的成绩

NO C1C2C3C4S_AVER

Stu167.068.076.088.074.8

Stu287.089.091.092.089.8

Stu393.094.089.099.093.8

----------------------------------------------------

C_AVER82.383.785.393.0

二维数组score用来存放学生各门课的成绩,定义时行数及列数要比学生人数和课程门数多1,即最后一列用于存放每个学生的各门课的平均成绩,最后一行用于存放各门课的平均成绩。

【例5-19】2008年北京奥运会开幕式运动员入场(按国家名排序)。

(1)问题分析:

通过明确地列出所提供的输入数据、要求的输出和输入到输出相关的算法分析要求说明。

a.确定输入项。输入项是若干个字符串。

b.确定期望的输出。

c.列出输入输出相关的算法。

(2)选择一个全面的解决方案算法

每个国家的名字是一个字符串,可以使用二维字符数组来实现。前面讲过,可以把二维数组看作是一种特殊的一维数组,它的元素又是一个一维数组。这样可以定义一个二维字符数组,每一行是一个字符串,代表一个国家的名字。然后可以使用冒泡法排序算法对国家名进行排序。

(3)参考程序如下:

/*程序名:5_19.c*/

/*程序功能:字符串排序*/

#define N10

#include

#include

int main()

{

char name[N][20],temp[20];/*定义一个二维数组和一个一维数组*/

int i,j,n;

printf(“请输入n:\n”);

scanf(“%d”,&n);

printf(“请输入国家名:\n”);

for(i=0;i

gets(name[i]);

for(i=0;i

for(j=0;j

if(strcmp(name[j],name[j+1])>0)

{

strcpy(temp,name[j]);

strcpy(name[j],name[j+1]);

strcpy(name[j+1],temp);

}

printf(“排序后的国家名为:”);/*输出*/

for(i=0;i

printf(“%s\n”,name[i]);

return0;

}

程序运行结果如下:

请输入n:

5

请输入国家名:

China

相关文档
最新文档