c语言课程设计交通处罚单程序exe,浙大版《C语言程序设计(第3版)》题目集 - 学习笔记 - 编程题 - 习题3-2 高速公路超速处罚...

https://pintia.cn/problem-sets/12/problems/278

习题3-2 高速公路超速处罚(15 分)

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的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

我的初版代码,大概是这样的:

#include

void rule(int speed, int limit);

int main()

{

int speed, limit;

if(scanf("%d %d", &speed, &limit) == 2)

{

rule(speed, limit);

}

return 0;

}

void rule(int speed, int limit)

{

if( speed>=0 && speed*1.10)

{

printf("OK\n");

}

else if(speed*100>=limit*110 && speed*1.50)

{

printf("Exceed %d%%. Ticket 200\n", (int)(100.00*(speed-limit)/limit));

}

else if(speed>=limit*1.50)

{

printf("Exceed %d%%. License Revoked\n", (int)(100.00*(speed-limit)/limit));

}

}

报错:

测试点 提示 结果 耗时 内存

0 sample 1等价,正常 答案正确 2 ms 128KB

1 sample 2等价,罚款 答案错误 2 ms 256KB

2 sample 3等价,吊销驾照 答案正确 2 ms 128KB

即这个用例:

输入样例2:

110 100

输出样例2:

Exceed 10%. Ticket 200

拿到本地调试:

$gcc q.c

$./a.out

110 100

OK

显然是if( speed>=0 && speed这一行代码判断出了问题。

我大概明白错误的原因了,应该是limit*1.10这个浮点数在计算机中不能精确地表示,进而导致判断的结果是speed小于limit*1.10。

将这一行修改为speed>=0 && speed*10。

新一版的代码:

#include

void rule(int speed, int limit);

int main()

{

int speed, limit;

if(scanf("%d %d", &speed, &limit) == 2)

{

rule(speed, limit);

}

return 0;

}

void rule(int speed, int limit)

{

if( speed>=0 && speed*10*11)

{

printf("OK\n");

}

else if(speed*100>=limit*110 && speed*1.50)

{

printf("Exceed %d%%. Ticket 200\n", (int)(100.00*(speed-limit)/limit));

}

else if(speed>=limit*1.50)

{

printf("Exceed %d%%. License Revoked\n", (int)(100.00*(speed-limit)/limit));

}

}

本地测试结果:

$gcc q.c

$./a.out

110 100

Exceed 10%. Ticket 200

但是在在线编程平台上,仍然测试不通过,这个原因就不得而知了。算了,暂时跳过这个问题吧。

参考文献:

1. 《C语言程序设计(第3版)》 - 浙江大学;

2. 浙大版《C语言程序设计(第3版)》题目集。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值