因为if-else if语句里的表达式写错了,0<=x&&x<5 这个表达式,无论x为多少,左边表达式0<=x的值肯定是0和1中间的一个,然后再与5比较大小,值肯定是为1的,所以无论x输入多少,都是执行的第一个if;
多个关系表达式,根据具体需要,可以使用逻辑运算符(|| ,&&)来连接,在本题中可以使用&&。
修改如下:
参考链接:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main(void){
float x,y;
cin>>x;
// https://zhuanlan.zhihu.com/p/642854209
// https://zhuanlan.zhihu.com/p/143198347
// 为了实现特定的逻辑,可以使用逻辑运算符(&&或||)将多个关系表达式连接起来
// 这里是使用&&,表示 x>=0并且 x<5, 以下类似
if(0<=x&&x<5){
y=-x+2.5;
}else if(5<=x&&x<10){
y=2-1.5*(x-3)*(x-3);
}else if(10<=x&&x<20){
y=x/2-1.5;
}
cout<<fixed<<setprecision(3)<<y;
return 0;
}
【以下回答由 GPT 生成】
问题解答:
代码中的 if 语句只会运行一个条件的原因,是因为在每个 if 和 else if 语句中,只有一个条件满足时,会执行相应的代码块,并终止后续条件的判断。在你的代码中,如果 x 满足第一个条件,则只会执行第一个条件对应的代码块,而不会继续判断后续条件。
如果你希望同时满足多个条件时,都执行对应的代码块,可以使用不带 else 的连续 if 语句,即将每个条件分开写成独立的 if 语句。修改后的代码如下:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main() {
float x, y;
cin >> x;
if (0 <= x && x < 5) {
y = -x + 2.5;
}
if (5 <= x && x < 10) {
y = 2 - 1.5 * pow((x - 3), 2);
}
if (10 <= x && x < 20) {
y = x / 2 - 1.5;
}
cout << fixed << setprecision(3) << y;
return 0;
}
这样修改后,每个条件满足时都会执行对应的代码块。注意,你需要确保 x 的取值在题目要求的范围内,并进行相应的测试。
希望这个解答对你有帮助,如果还有其他问题,请随时提问。
【相关推荐】