【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 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
    

常用库函数

函数名格式功能说明实例
绝对值函数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
30

解题思路

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

if(判断条件)
{
	//判断条件为真的情况
}
else
{
    //判断条件为假的情况
}

参考代码

#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;
}

6、课后习题

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值