先看题目
题目描述
编写程序,计算下列分段函数 y=f(x)y=f(x) 的值。
当 0 \le x<50≤x<5 时,y=-x+2.5y=−x+2.5。
当 5 \le x<105≤x<10 时,y=2-1.5(x-3)(x-3)y=2−1.5(x−3)(x−3)。
当 10 \le x<2010≤x<20 时,y=x/2-1.5y=x/2−1.5。
输入格式
一个浮点数 xx。
输出格式
输出 xx 对应的分段函数值:f(x)f(x)。结果保留到小数点后三位。
输入输出样例
输入 #1复制
1.0
输出 #1复制
1.500
说明/提示
对于 100% 的数据 0 \le x<200≤x<20
这一题用 if
判断,对于每个范围输出对应的即可,注意保留三位小数,我用的是 cout
的 setprecision()
,当然 printf
也可以。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x;
cin >> x;
if (x >= 0 && x < 5)
{
cout << fixed << setprecision(3) << -x + 2.5 << endl;
}
else if (x >= 5 && x < 10)
{
cout << fixed << setprecision(3) << 2 - 1.5 * (x- 3) * (x - 3) << endl;
}
else
{
cout << fixed << setprecision(3) << x / 2 - 1.5 << endl;
}
return 0;
}
还有一种方法就是按照题意模拟。
对于每个情况,分别处理并输出。
记得要开 \operatorname{double}double !
#include<bits/stdc++.h>
using namespace std;
double x, y;
signed main(){
cin>>x;
if(x<5) y=-x+2.5; //0<=x<5
else if(x<10) y=2-1.5*(x-3)*(x-3); //5<=x<10
else y=x/2-1.5; //10<=x<20
printf("%.3lf",y);
return 0;
}
也可以用分支算法:
#include<bits/stdc++.h>
using namespace std;
int main(){
double x;
cin>>x;
if(x>=0&&x<5){
cout<<fixed<<setprecision(3)<<(-x+2.5)<<endl;
}
else if(x>=5&&x<10){
cout<<fixed<<setprecision(3)<<(2-1.5*(x-3)*(x-3))<<endl;
}
else{
cout<<fixed<<setprecision(3)<<(x/2-1.5)<<endl;
}
return 0;
}