判断成绩是否及格的循环应用
C语言复习循环模块——小题大做(一)
题目描述:通过键盘输入学生成绩,60分以上为及格,以下不及格
对于这个简单的问题,我想大多数入门及以上的程序员都会选择if-else循环来实现吧。其实我个人初学的时候也是用if-else循环单纯实现该问题。如果用while循环或者for循环能否实现该问题呢。答案是肯定的!
程序流程图
if-else实现
void f2() {
int x; //成绩
printf("请输入学生成绩2:\n");
scanf_s("%d", &x);
if (x >= 60)
printf("成绩及格.\n");
else
printf("成绩不及格.\n");
}
首选if-else循环来实现,原因有:
1,逻辑简单明了,符合常规思维方式;
2,程序简洁,不易出错。
while实现
int f1() {
int x;
printf("请输入学生成绩1:\n");
scanf_s("%d", &x);
while (x>= 60) {
printf("成绩及格.\n");
return 0;
}
printf("成绩不及格.\n");
return 0;
}
跟if-else比较起来很相似,不过需要注意返回值的位置,容易产生死循环的错误。
for实现
int x; //成绩
printf("请输入学生成绩3:\n");
scanf_s("%d", &x);
for (int i = x; i < 60;) {
printf("成绩不及格.\n");
return 0;
}
printf("成绩及格.\n");
return 0;
}
相对于前两种方式,显然有点冗余的意思。并且同样有容易产生死循环的潜在问题。
细心的小伙伴可能会发现在输入语句用了scanf_s而不是scanf,原因是在VS里面scanf被认为是不安全的,即为_CRT_SECURE_NO_WARNINGS错误。解决该问题的方法有两种:一,在头文件前面第一行添加**#define _CRT_SECURE_NO_WARNINGS**语句;二,把scanf写成scanf_s。