PTA 编程题(C语言)-- 高速公路超速处罚

 题目作者:陈建海  浙江大学

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:

输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:

在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:

65 60

输出样例1:

OK

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

输入样例3:

200 120

输出样例3:

Exceed 67%. License Revoked

思路:读入当前时速a和限速b,先算出超速的比率r=1.0*(a-b)/b,然后用if-else语句,分(1)r<0.1;(2)0.1

注意:(1)在计算超速比例时,如果a,b都是按int声明并输入的话,计算超速比率r时,一定要给在(a-b)/b前面乘一个1.0,即1.0*(a-b)/b,否则(a-b)/b得到的结果就是a-b整除b的商。

(2)有些同学直接算出%前面的整数R=(a-b)/b*100,然后用R去和10、50比较;这样是不对,原因是,算术运算符/和*是同一优先级,结合顺序是从左往右结合。即先计算(a-b)/b得到一个整数,在计算这个整数乘以100的值。例如输入110 100,你希望计算出的R为10,但实际上R=(a-b)/b*100 = 10/100*100 = 0*100 = 0。这种情况下并不是不能用R去和10、50进行比较,而是应该声明R为浮点数,然后R的计算公式应该是100.0*(a-b)/b。

(3)虽然题目上说输入为整数,但是也可以把它们直接转换成浮点数输入。计算的时候就不用考虑此时的/是不是整除了。

(4)输出时使用%.0f%%,即这里的精确到整数,是指四舍五入精确到整数,而不是直接取整;还有就是要打印出%,需要再printf语句的双引号内连敲两个%,即%%。

代码1:

#include 
int main () {
    int a,b;
    double r;
    scanf("%d%d", &a, &b);
    r = 1.0*(a-b)/b;  
    if (r < 0.1) printf("OK"); 
    else if (0.1 <= r && r < 0.5) printf("Exceed %.0f%%. Ticket 200", r*100);
    else printf("Exceed %.0f%%. License Revoked", r*100);
    return 0;
}

代码2:

#include 
int main () {
    int a,b;
    float R;
    scanf("%d%d", &a, &b);
    R = 100.0*(a-b)/b;  
    if (R < 10) printf("OK");  
    else if (10 <= R && R < 50) printf("Exceed %.0f%%. Ticket 200", R);
    else printf("Exceed %.0f%%. License Revoked", R);
    return 0;
}

代码3:

#include 
int main () {
    float a,b,R;
    scanf("%f%f", &a, &b);
    R = (a-b)/b*100;  
    if (R < 10) printf("OK");  
    else if (10 <= R && R < 50) printf("Exceed %.0f%%. Ticket 200", R);
    else printf("Exceed %.0f%%. License Revoked", R);
    return 0;
}

 更多PTA题目的的参考代码,可以在下面的小程序里找到哦

你可能感兴趣的:(PTA编程题解析,c语言)