#include<iostream>
using namespace std;
int main()
{
int speed,limit,x;
cin>>speed>>limit;
if(speed>=limit*1.5)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.License Revoked"<<endl;
}
else if(speed>=limit*1.1)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.Ticket 200"<<endl;
}
else
{
cout<<"OK"<<endl;
}
return 0;
}
达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证;若属于正常行驶,则输出“OK”。
输入110 100按理说应该输出else if里的语句,为什么变成OK?请问代码哪里不对?
1、if语句中,进行判断时,将limit x 1.1(1.5)转换成int型再进行比较
2、else if中应该改为speed>=limit x 1.1 && speed<=limit x 1.5吧
3、计算x的时候将数据转换为double类型再进行计算,否则结果为0
改正如下:
#include<iostream>
using namespace std;
int main()
{
int speed, limit;
double x;
cin >> speed >> limit;
if (speed >= (int)(limit * 1.5))
{
x = (double)(speed - limit) / limit * 100;
cout << "Exceed " << x << "%.License Revoked" << endl;
}
else if (speed >= (int)(limit * 1.1) && speed <= (int)(limit * 1.5))
{
x = (double)(speed - limit) / limit * 100;
cout << "Exceed " << x << "%.Ticket 200" << endl;
}
else
{
cout << "OK" << endl;
}
return 0;
}
整形数和浮点数比较会有问题,你可以将计算后的限速打印出来看下
这样就可以
#include<iostream>
using namespace std;
int main()
{
double speed,limit,x;
cin>>speed>>limit;
if(speed*1.0>=limit*1.5)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.License Revoked"<<endl;
}
else if(speed*1.0<=limit*1.1)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.Ticket 200"<<endl;
}
else
{
cout<<"OK"<<endl;
}
return 0;
}
cout<<speed-limit*1.1<<endl;
得到 -1.42109e-14
建议改成if(speed/limit>=1.5)这种形式
#include<iostream>
using namespace std;
int main()
{
double speed,limit,x;
cin>>speed>>limit;
if(speed/limit>=1.5)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.License Revoked"<<endl;
}
else if(speed/limit>=1.1)
{
x=(speed-limit)/limit*100;
cout<<"Exceed "<<x<<"%.Ticket 200"<<endl;
}
else
{
cout<<"OK"<<endl;
}
return 0;
}
应该是else if(speed>=limit*1.1)这个有点问题,这里的1.1其实不是正正1.1,而是1.10000(中间好多个0)0089,其实是比1.1要大的,一般要设置一个阈值,比如0.000001,在这个误差之内的算相等