【发布时间】:2021-04-29 10:34:27
【问题描述】:
这个程序的重点是输入一个 2 位数的数字,如果小于等于 15,则返回数字的平方,如果大于等于 16 且小于等于 30,则返回它的位数之和,如果大于或等于 31,它应该返回其位数的乘积。
这是我目前写的代码:
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "dati a: ";
cin >> a;
if (a >= 100 || a)
{
cout << "a trebuie sa aiba 2 cifre" << endl
<< "mai dati incercati o data: ";
}
if (a <= 15)
{
cout << a * a;
}
else if (16 <= a <= 30)
{
cout << a / 10 + a % 10;
}
else if (a >= 31)
{
cout << (a / 10) * (a % 10);
}
}
我编译并运行它,测试是这样的。 我给它 10,它返回 100,我给它 23 它返回 5,我给它 29 它返回 11,我给它 31 它返回 4,我给它 38,它返回 11。我倾向于相信它会成功最后一个else if,但我不知道真正的原因。
【问题讨论】:
-
16 <= a <= 30并没有按照你的想法去做。 -
(16 <= a <= 30) -> (a >= 16 && a <= 30)。16 <= a <= 30始终为真,因为 1 和 0 都小于 30。 -
这能回答你的问题吗? Why can't we do three-way comparison in C++?
-
这是多余的。
a是一个整数,所以a <= 15已经涵盖了 16 以下的所有内容。所以你只需要if (a <= 15) ... else if (a <= 30) ... else ...
标签: c++ if-statement