KARA_214 @ 2023-08-07 15:47:01
#include <bits/stdc++.h>
using namespace std;
double f(double x){
if(0<=x<5) return 0-x+2.5;
if(5<=x<10) return 2-1.5*(x-3)*(x-3);
if(10<=x<20) return x/2-1.5;
}
int main(){
double y;
cin>>y;
cout<<fixed<<setprecision(3)<<f(y)<<endl;
return 0;
}
by definieren @ 2023-08-07 15:54:52
建议把
if(0<=x<5) return 0-x+2.5;
if(5<=x<10) return 2-1.5*(x-3)*(x-3);
if(10<=x<20) return x/2-1.5;
改为
if(0<=x && x<5) return 0-x+2.5;
if(5<=x && x<10) return 2-1.5*(x-3)*(x-3);
if(10<=x && x<20) return x/2-1.5;
by 编码落寞 @ 2023-08-07 15:57:35
x/2-1.5 这里先x1.0。而且你这不算递归,只能算调用函数
by ZJYlove @ 2023-08-07 15:57:48
你这函数都用错了,哪有0<=x<5的,是0<=x&&x<5,5<=x&&x<10和10<=x&&x<20
#include <bits/stdc++.h>
using namespace std;
double f(double x){
if(0<=x&&x<5) return 0-x+2.5;
if(5<=x&&x<10) return 2-1.5*(x-3)*(x-3);
if(10<=x&&x<20) return x/2-1.5;
}
int main(){
double y;
cin>>y;
cout<<fixed<<setprecision(3)<<f(y)<<endl;
return 0;
}
by Terrible @ 2023-08-07 15:57:51
@KARA_214
在 C/C++ 里,我们有一套二元运算符运算法则,其中 <=
<
>=
>
是从左到右运算的,运算结果如果看成数的话是 真(1),假 (0),按照 0<=x<5
的计算方法是先计算 0<=x
返回一个 01 值,然后计算 0<5
或 1<5
所以结果一定是 if
就返回了。
0<=x<5
这种语法在一些语言中是有理想实现的,例如 Python
会把这个式子解读成 “
应当写成 0<=x&&x<5
(函数递归一次也是递归吗?)
by Terrible @ 2023-08-07 15:58:45
0-x
只需写成 -x
即可,C/C++ 中有一种运算符是正负运算符。
by KARA_214 @ 2023-08-08 09:55:23
谢谢各位,已AC,我会继续努力