原代码分析
#include <stdio.h>
int main(void)
{
int number = 0;
printf("\n输入一个整数在 1 到 10之间 : ");
scanf("%d",&number);
if (number > 5)
printf("你输入的 %d 大于 5\n", number);
if (number < 6)
printf("你输入的 %d 小于 6\n", number);
return 0;
}Code language: PHP (php)
运行逻辑:
| 输入 | 第一个 if (number > 5) | 第二个 if (number < 6) | 输出结果 |
|---|---|---|---|
| 1~5 | 假,跳过 | 真,执行 | “小于 6” |
| 6~10 | 真,执行 | 假,跳过 | “大于 5” |
| 6 | 真(6>5) | 假(6<6不成立) | “大于 5” |
| 5 | 假(5>5不成立) | 真(5<6) | “小于 6” |
存在的问题:
- 输入
5或6时输出正确,但输入5和6之间的数(不存在整数)逻辑上覆盖了所有情况。 - 遗漏了等于 5 和等于 6 的明确提示,且两个独立
if无法处理”等于”的第三种情况。 - 题目要求”确定该数字有多大”,更合理的逻辑是分成三档:小于6、等于5或6、大于5(或更精细地区分)。
改进版本一:补充”等于”情况(用独立 if)
#include <stdio.h>
int main(void)
{
int number = 0;
printf("\n输入一个整数在 1 到 10之间 : ");
scanf("%d", &number);
if (number > 5)
printf("你输入的 %d 大于 5\n", number);
else if (number < 6)
printf("你输入的 %d 小于 6\n", number);
else
printf("你输入的 %d 等于 5 或 6\n", number);
return 0;
}Code language: PHP (php)
注意:
else if和else尚未学到,此处仅作展示。用已学知识(仅if)应写成三个独立判断:
改进版本二:仅用 if(符合当前学习进度)
#include <stdio.h>
int main(void)
{
int number = 0;
printf("\n输入一个整数在 1 到 10之间 : ");
scanf("%d", &number);
if (number > 5)
printf("你输入的 %d 大于 5\n", number);
if (number < 6)
printf("你输入的 %d 小于 6\n", number);
if (number == 5 || number == 6)
printf("你输入的 %d 刚好是边界值\n", number);
return 0;
}Code language: PHP (php)
改进版本三:更精细的分档
#include <stdio.h>
int main(void)
{
int number = 0;
printf("\n输入一个整数在 1 到 10之间 : ");
scanf("%d", &number);
if (number >= 8)
printf("你输入的 %d 很大(8~10)\n", number);
else if (number >= 5)
printf("你输入的 %d 中等(5~7)\n", number);
else
printf("你输入的 %d 较小(1~4)\n", number);
return 0;
}Code language: PHP (php)
Previous: 基本的 if 语句
Next: if-else 双分支结构