• 【C++初级】2、浮点数计算


    1、概述

    上一节课我们了解了什么是C++语言,了解了写一个C++程序的基本步骤,知道了如何定义变量,本节课是在上一节课的基础上继续深化基础知识的学习,将详细介绍数据类型,如何格式化输出并且包括计算机的一些基础知识。在文章的最后会有几道习题,用于巩固本节课学习的内容。

    2、数据类型

    上一节课我们讲到对于一个变量,我们要确定他的类型,这就像分类,举个例子:水果和蔬菜是两种类别,把苹果,香蕉归入水果类,把土豆,洋葱归入蔬菜类,变量的类型就相当于这里的类别,变量名就相当于具体是哪一种水果(具体是哪一种蔬菜)。所以数据类型对于变量来说十分重要。

    下面介绍一下常用的数据类型

    • 整数
      • int
      • long long
    • 浮点数
      • float
      • double
    数据类型标识符所占字节数取值范围
    整型int4-2147483648~2147483647
    长整型long long8$-2 ^{63} $~ 2 63 − 1 2^{63}-1 2631
    单精度浮点数float47位有效数字
    双精度浮点数double815位有效数字

    浮点数可以理解为小数,上面的float和double的有效数字指的是小数点后有多少位

    C++中的浮点数默认是下取整,例如
    10/3 = 3
    如果想要表示具体的小数是多少,则需要使用double或float类型
    10.0/3 = 3.3333333
    10.0默认是double类型,一般来说也是double用的比较多
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当前阶段需要先掌握这几个简单的类型,更多的类型在后续的学习中逐步介绍。

    注意

    • 一般数字大小在 ± 1 0 9 \pm10^9 ±109内都使用int,如果超过了 1 0 9 10^9 109,俗称爆int,需要使用long long
    • long long只能表示 ± 1 0 18 \pm10^{18} ±1018内的数字
    • 不是开的越大越好,long long虽然表示范围大,但是占用内存也大,题目都有内存限制,所以要按照实际需求来选择合适的类型
    • 浮点数一般使用double
    • C++整数除法(两个都是整数的情况)默认是下取整

    3、输出格式控制

    输出保留小数点位数

    上节课已经介绍过了,这里再强调一下

    以固定浮点的形式输出,如保留小数点后3位可写为:

    cout<<fixed<<setprecision(3)<<a;

    格式化输出

    基本格式:printf(“格式化控制字符串”,输出列表);

    • 格式化控制字符串:
      1. 以%开头,后面跟格式字符
      2. 非格式字符串(即要输出的内容)
    • 输出列表:即输出的表达式列表

    常见的格式字符

    在这里插入图片描述

    举个栗子

    1、输出整数
    int t = 100;
    printf("%d\n",t);//\n是换行的意思
    结果:100
        
    2、输出浮点数
    double f = 3.1415926;
    double a = 7.1;
    printf("%f %.3f\n",f,a);//输出f,输出a并保留三位小数
    结果:3.1415926 7.100
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    常用库函数

    函数名格式功能说明实例
    绝对值函数abs(x)求一个数x的绝对值abs(-5)=5
    向下取整floor(x)求不大于实数x的最大值floor(3.14)=3
    向上取整ceil(x)求不小于实数x的最小值ceil(3.14)=4
    指数函数pow(x,y)计算xy,结果为双精度实数pow(2,3)=8
    平方根函数sqrt(x)求实数x的平方根sqrt(36)=6

    疑惑解答

    有些同学看到这就会有疑问,你这明明是C语言的输出,怎么C++还在用?

    是这样的,C++是C语言的升级,所以在C++程序中使用C语言风格的输入输出是被允许的。也就是说C++向下兼容C语言,实际的做题中是混用的,看哪个方便就用哪个。

    实际上竞赛学的是C语言+STL,STL是常用的一些库函数。

    4、内存容量

    计算机的一些基础知识

    • 比特位,bit,存一个0或者1
    • 1字节(byte) = 8 比特(bit)
    • 千字节(KB) = 1024字节(B)
    • 兆字节(MB) = 1024千字节(KB)
    • 吉字节(GB) = 1024兆字节(MB)

    5、例题

    题目链接:https://www.luogu.com.cn/problem/P5709

    【深基2.习6】Apples Prologue / 苹果和虫子

    题目描述

    八尾勇喜欢吃苹果。她现在有 m m m 1 ≤ m ≤ 100 1 \le m \le 100 1m100)个苹果,吃完一个苹果需要花费 t t t 0 ≤ t ≤ 100 0 \le t \le 100 0t100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 s s s 1 ≤ s ≤ 10000 1 \le s \le 10000 1s10000)分钟,请问她还有几个完整的苹果?

    输入格式

    输入三个非负整数表示 m , t , s m, t, s m,t,s

    输出格式

    输出一个整数表示答案。

    如果你出现了 RE,不如检查一下被零除?

    样例 #1

    样例输入 #1

    50 10 200
    
    • 1

    样例输出 #1

    30
    
    • 1

    解题思路

    s/t表示吃了几个苹果,默认下取整,要注意如果t不能整除s则代表还有一个苹果是残缺的,所以可求得还有几个完整的苹果,当然还需要特判t = 0的情况。这里特判需要用到if,

    if(判断条件)
    {
    	//判断条件为真的情况
    }
    else
    {
        //判断条件为假的情况
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    参考代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int m,t,s;
        cin>>m>>t>>s;
        if(t == 0) cout<<0; //如果if只有一行命令要执行,可以省略大括号,但是超过1行必须使用大括号
        else if(s % t == 0){
            if(s/t >= m) cout<<0;    //这边可以简化成cout<<max(m-s/t,0);max函数是求两个数中最大值
            else cout<<m - s/t;
        }else{
            if(s/t >= m) cout<<0;   //可以简化成cout<<max(m-s/t-1,1);
            else cout<<m - s/t - 1;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    6、课后习题

  • 相关阅读:
    实现两个div水平对齐
    PAT乙级-B1011 A+B 和 C(15)
    会议审批 查询&会议签字
    Python自定义异常 Python Custom Exception
    Windows系统如何设置Cpolar内网穿透为后台服务并实现开机自启动?
    七大排序(简洁思路版)
    [自制操作系统] 第12回 实现中断代码
    便捷查询中通快递,详细物流信息轻松获取
    如何实现CSDN评论区粉丝幸运抽选功能:一场代码与运气的碰撞
    【K8S】用minikube start 建立K8S集群--20220901
  • 原文地址:https://blog.csdn.net/qq_50195602/article/details/125456983