一道OJ引发的关于C语言浮点数类型数值比较问题的思考

本文通过一道在线编程题,探讨了C语言中float和double类型在进行数值比较时可能出现的问题。由于浮点数在计算机中的存储方式,可能导致看似不成立的条件在比较时成立,从而影响程序结果。文章详细解释了浮点数的存储原理,并提醒程序员在进行浮点数比较时需要注意的精度误差问题。
摘要由CSDN通过智能技术生成


前言

帮助别人的过程也是一种学习,最近在为小伙伴解决问题的时候,遇到了一个我觉得需要引起重视的问题,这个point也许在大家的学习过程中会被提及到,但是要引起重视还是需要一些详细的解释吧。希望大家共勉!


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题来源

1.网站链接

武汉科技大学OJ平台-contest-练习4-1010
链接: WUST Online Judge.

2.题目描述

在这里插入图片描述

- Description
按照规定,在高速公路上行使的机动车,超出本车道限速的10%则处200元罚款;若超出50%,就要吊销驾驶证。
请编写程序根据车速和限速自动判别对该机动车的处理。
- Output
每组测试数据的输出在一行中输出处理意见:
(1)若属于正常行驶,则输出“OK”;
(2)若应处罚款,则输出“Exceed x%. Ticket 200”;
(3)若应吊销驾驶证,则输出“Exceed x%. License Revoked”。
其中x是超速的百分比,精确到整数。
- Sample Input
65 60
110 100
200 120
- Sample Output
OK
Exceed 10%. Ticket 200
Exceed 67%. License Revoked

二、问题前导

1.题目分析

  • 算法(示例):
    分析题目发现,这道题目的算法其实是很简单的顺序执行加选择判断,不过就是加上了多组数据输入的循环输入模块,基于提问同学所给出的代码,忽略掉效率问题,我大致整理出了可以AC的方案。
    #include<stdio.h> int main() {
         
        int v,max_v;//当前速度 最大限速
        float delta,d;
        while(scanf("%d %d",&v,&max_v)!=EOF && v>0 && max_v>0)//多组数据输入模板
        {
         
            delta=v-max_v;//当前速度与最大速度差值
            d=delta*100/max_v;//计算百分比,并取分子便于比较运算
            if(d<10) printf("OK\n");//超速低于最大限速10%的不予追究
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值