题目:
写一个程序,提示用户输入两个整数,然后自动打印出两整数所指定范围内的所有整数。
初解
看到这个题目,大脑一秒水出了答案。cin两个数,借助自加自减运算符,用for 或while 循环输出:
#include<iostream>
using namespace std;
int main()
{
int a,b;
cout<<"请输入两个整数\n";
cin<<a<<b;
while (a<=b)
{
cout<<a<<endl;
a++
}
return 0;
}
洋洋洒洒写了1分钟,心里想,这种小问题都不用编译就知道过了。
鄙人本着负责任的态度,还是编译了一下,结果- -发现错误若干。。。
- 写Python写多了有的语句掉了分号
- cin的流入符号方向写反
- while的条件语句忘带括号
这些错误无伤大雅,毕竟整体思路是对的,这就行了叭。。。。
结果看了一下小试题的答案,发现自己too young
正解:
前面的解法,输入1 和 5测试,得到了期望的结果:
请输入两个整数
1
5
1
2
3
4
5
但输入并不是只有这一个逻辑,我们只是请求输入两个整数,但并没有指定两个整数孰大孰小,所以输入的情况会有,a<b ,a>b和a=b。
一个合格的程序应该是有足够强的鲁棒性,考虑到用户可能的所有操作,并相应地采取解决方案,在这里如果用户输入的不是1 5而是5 1:
请输入两个整数
5
1
E:\Code\code19\输出整数范围\Debug\输出整数范围.exe (进程 17336)已退出,代码为 0。
并不会返回我们期望的结果。
因此一个考虑较全面的解题代码应该如下:
#include<iostream>
using namespace std;
int main()
{
int a, b;
cout << "请输入两个整数\n";
cin >> a >> b;
if (a <= b)
{
while (a <= b)
{
cout << a << endl;
a++;
}
}
else
{
while (a >= b)
{
cout << a << endl;
a--;
}
}
}
以上代码,满足了题目的基本需求。
需要注意的是else的应用,else认为是前面所有判断条件以外的所有可能,因此需要思考的是,所有的可能是哪些、else会执行哪些,以免其他特殊情况误入else的执行语句中。
此外,在满足了基本需求后,应该考虑的是进一步优化。
- 代码的可读性,变量命名有实际含义,如a,b可修改为int01,int02或者inpu_int1,inpu_int2等让大家都能理解其含义的名称。此外还要在关键语句加上必要的注释
- 代码的时效性, 在满足条件的情况下考虑更简洁更高效的运算方式
- 代码的功能性延伸,可以考虑循环地录入用户的输入,用户输入非整数时提示错误