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;
}
6、課後習題
- https://www.luogu.com.cn/problem/P5681
- https://www.luogu.com.cn/problem/P5708
- https://www.luogu.com.cn/problem/P5703
- https://www.luogu.com.cn/problem/P3954