一、问题描述
学生成绩分等级显示程序。学生有数学、英语两门课。按百分制考核。要求输入各门课成绩,按平均成绩分等显示。考核结果的等级标准如下:
excellence(优秀):平均成绩≥90;
all right(良好):80≤平均成绩<90;
middling(中等):70≤平均成绩<80;
pass(及格):60≤平均成绩<70;
fail(不及格):平均成绩<60。
二、问题分析
解决这个问题的过程可以分成两个阶段:
第一阶段为输入成绩和计算平均成绩阶段。
第二阶段为等级划分显示阶段。由于成绩分为五个等级,使用if语句处理时层次过深,不够直观清晰,我们选用switch结构解决这一问题。首先将分布在[0,100]范围的平均成绩值,映射到[0,10]的较小范围中,然后使用case个数相对较少的switch语句进行分等显示。
三、实现程序
代码如下:
#include<stdio.h>
#include "math.h"
void main(){
float a,b;
int ave;
repeat:printf("输入课程成绩(a,b): "); //语句标号
scanf("%f%f",&a,&b);
if(a<0||b<0)
goto repeat; //输入数据有负数时,要求重新输入
ave=(a+b)/2; //计算平均成绩
switch(ave/10){
case 10:
case 9:
printf("Result: excellence\n");
break;
case 8:
printf("Result: all right\n");
break;
case 7:
printf("Result: middling\n");
break;
case 6:
printf("Result: pass\n");
break;
default:
printf("Result: fail\n");
}
}
注:goto语句是一种无条件转移语句,主要用于控制程序的执行方向,也可以利用它反复地执行同一段程序。它的用法比较简单。一般格式为:goto 语句标号;
实现效果: