无聊的switch题,神奇的小想法

今天上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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值