今天上C语言课要求使用switch语句做题
题目很无聊
输入若干个成绩
>80为优秀
60-80为通过
<60为失败
更坑爹的是
请用switch语句完成以上问题
乍一看,这是一道纯粹的if-else题,很不方便用switch,毕竟switch语句不支持这种条件的判断。
老师用了一种很无聊的不想解释的做法。
有同学先用if-else再用switch,我觉得这是为了switch而switch。
陈晨同学提出了一种到现在都觉得应该是这种无聊情况下的最优解法。
switch语句分三档,0分,60分,80分。
也就是三种状态的下限
如果一个人的成绩不是这三种成绩的话,就不断递减,
当来到这三档中其中一档,就立即输出并结束。
这种想法利用了正整数的优良性质,
我甚至在这种想法中看到了费马无穷递降法的影子。
缺点是问题限于整数,但已经比老师的方法适用性广了。
看似很简单的题目,看似无聊的过程,实际上也有有趣的奥秘在里面,也有很细微的方法孕于其中。
最后,附标程。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int x,n1=0,n2=0,n3=0,n=0;
bool bo;
scanf_s("%d",&x);
while (x!=-1) {
n++;
while (true){
bo=false;
switch (x){
case 0:printf("Failed\n");
bo=true;n1++;break;
case 60:printf("Passed\n");
bo=true;n2++;break;
case 80:printf("Good!\n");
bo=true;n3++;break;
}
if (bo) break;
x--;
}
scanf_s("%d",&x);
}
printf("Failed:%.2f\n",(float)n1/n);
printf("Passed:%.2f\n",(float)n2/n);
printf("Good:%.2f\n",(float)n3/n);
system("pause");
return 0;
}