1、概述
上一节课我们了解了什么是C++语言,了解了写一个C++程序的基本步骤,知道了如何定义变量,本节课是在上一节课的基础上继续深化基础知识的学习,将详细介绍数据类型,如何格式化输出并且包括计算机的一些基础知识。在文章的最后会有几道习题,用于巩固本节课学习的内容。
2、数据类型
上一节课我们讲到对于一个变量,我们要确定他的类型,这就像分类,举个例子:水果和蔬菜是两种类别,把苹果,香蕉归入水果类,把土豆,洋葱归入蔬菜类,变量的类型就相当于这里的类别,变量名就相当于具体是哪一种水果(具体是哪一种蔬菜)。所以数据类型对于变量来说十分重要。
下面介绍一下常用的数据类型
- 整数
- int
- long long
- 浮点数
- float
- double
数据类型 | 标识符 | 所占字节数 | 取值范围 |
---|---|---|---|
整型 | int | 4 | -2147483648~2147483647 |
长整型 | long long | 8 | $-2 ^{63} $~ 2 63 − 1 2^{63}-1 263−1 |
单精度浮点数 | float | 4 | 7位有效数字 |
双精度浮点数 | double | 8 | 15位有效数字 |
浮点数可以理解为小数,上面的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、输出整数
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 1≤m≤100)个苹果,吃完一个苹果需要花费 t t t( 0 ≤ t ≤ 100 0 \le t \le 100 0≤t≤100)分钟,吃完一个后立刻开始吃下一个。现在时间过去了 s s s( 1 ≤ s ≤ 10000 1 \le s \le 10000 1≤s≤10000)分钟,请问她还有几个完整的苹果?
输入格式
输入三个非负整数表示 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;
}