C语言程序设计 案例学习:计算平均成绩
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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