---
tags: 2021CRC
title: C++基礎語法複習筆記
---
# C++基礎語法複習筆記
2021 / 11 / 12
我們這一節課不會教任何新的語法,這一節課是給大家好好複習之前所學與練習題目的。
如果你之前的課有一些地方沒聽懂、或是需要重新複習一次的話,你可以跟著這份複習筆記複習,而如果你自己有東西要忙的話那這節課你可以忙你的事。
----
講師聯絡方式:
謝承恩
* Line:謝承恩
* Discord:chengenhsieh#7644
曾煥軒(火龍果)
* Line:曾煥軒
* Discord:ocean#3749
鄧育翔
* Discord:Tony0410^2#6202
---
這邊有目錄、你可以點自己需要的地方去看
[TOC]
---
## C++基礎、變數與運算
重要概念 : 變數、C++程式基本框架、資料型態、輸入輸出
- C++程式基本框架
```cpp=
#include<iostream>
using namespace std;
int main()
{
//裡面塞你要寫的東西
return 0;
}
```
- 可以利用 std::cin 和 std::cout 搭配變數來達成輸入輸出
```cpp=
int a; //宣告一個整數變數 a
cin >> a; //輸入一個整數,讓 a 存你輸入的值
cout << a << endl; //把a輸出,當然你也可以輸出別的。endl是換行的意思
```
資料型態整理:
| 大的資料型態分類 | 資料型態的名字 | 介紹 |
| ---------------- | -------------- | ---- |
| 整數 | int | 就是整數,資料範圍在 $-2^{31}$ ~ $2^{31}-1$ (約+-$2 * 10^9$) |
| | long long | 比int還要大的整數,資料範圍可以到 $-2^{63}$ ~ $2^{63}-1$ (約+-$9 * 10^{18}$) |
| 浮點數 | float | 精準度沒那麼大的浮點數 |
| | double | 精準度比較高的浮點數,建議使用 |
| 字元 | char | 只能儲存一個字元的資料型態,如'a' , '1' , '\n' , ' ' 等等 |
| 字串 | std::string | 可以存多字元的資料型態(一串句子)(當然也可以只存一個字元或不存字元,稱為空字串) |
| 布林值 | bool | 代表一個條件是成立(True)或是不成立(False)的值,在條件判斷中會大量使用 |
---
## C++條件判斷
- if / else / else if
```cpp=
#include<iostream>
using namespace std;
int main()
{
int a = 10;
if(a > 2) cout << 'A';
else cout << 'B';
if(a > 3) cout << 'C';
if(a > 5) cout << 'D';
if(a > 3) cout << 'E';
else if(a > 5) cout << "F";
else cout << 'G';
if(a % 3 == 2) cout << 'H';
else cout << 'I';
// ACDEI
}
```
----
- **&&** ~and~ **||** ~and~ **!**
- 巢狀條件判斷
```cpp=
#include<iostream>
using namespace std;
int main()
{
int a = 10;
int b = 5 ;
int c = 0 ;
if(a > b) cout << 'A';
if(b > c && b > a) cout << 'B';
if(b > c || b > a) cout << 'C';
if(!(b > c && b > a)) cout << 'D';
// ACD
if(b > c)
{
if(b > a) cout << 'B';
}
// 效力等同第 11 行
if(1 > 2)
{
if(4 > 3) cout << 'A';
else cout << 'B';
}
else
{
if(4 > 3) cout << 'C';
else cout << 'D';
}
// only C
//常見錯誤:
//1. if(a > b > c) cout << "FALSE";
//ans. if(a>b && b>c) cout << "TRUE";
//2. if(a = 1) cout << "FALSE";
//ans. if(a == 1) cout << "TRUE";
//3.(若a < 5 ,輸出"a is 數字a" ,不然不輸出)
/*
3. if(a > 5) cout << "a is ";
cout << a;
ans. if(a < 5){
cout << "a is ";
cout << a;
}
*/
}
```
---
## 迴圈
- for vs while
```cpp=
#include<iostream>
using namespace std;
int main()
{
for(int i=0 ; i < 10 ; i++) cout << i << " ";
// 0 1 2 3 4 5 6 7 8 9
// cout << i; (此時會編譯錯誤)
int i=0;
while(i < 10)
{
cout << i << " ";
i++;
}
//跟上面功能相同
}
```
----
- 巢狀迴圈(99乘法表)
```cpp=
#include<iostream>
using namespace std;
int main()
{
for(int i=1 ; i<=9 ; i++)
{
for(int j=1 ; j<=9 ; j++)
{
cout << i << "*" << j << "=" << i * j << "\t";
}
cout << "\n";
}
}
```
----
- 連續輸入 for
```cpp=
#include<iostream>
using namespace std;
int main()
{
int n , ans = 0;
cin >> n;
for(int i=0 ; i<n ; i++)
{
int k;
cin >> k;
ans += k;
}
cout << ans;
// 輸入: 5 1 2 3 4 5
// 輸出: 15
}
```
- while(cin)
```cpp=
#include<iostream>
using namespace std;
int main()
{
int k , ans = 0;
while(cin >> k) ans += k;
// 輸入 1 2 3 4 5 (end)
// 輸出 15
}
// 當不能cin
// (cin>>n) 會 fail -> 結束迴圈
```
---
## 陣列
```cpp=
#include<iostream>
using namespace std;
int main()
{
int a[10] ;
int b[10] = {}; // {0,0,0,0,0,0,0,0,0,0}
for(int i=0 ; i<10 ; i++)
{
a[i] = i+1; // {1,2,3,4,5,6,7,8,9,10}
}
}
```
---
## 練習題
[HackerRank](https://www.hackerrank.com/) : 推薦給英文好的同學,他的程式寫起來比較直觀,而且也有很好的引導。
:::spoiler Greenjudge
1. [a009 : 團購力量大](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a009)
3. [a014 : 貨比三家](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a014)
4. [a024 所有位數和](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a024)
5. [a025 數字倒轉](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a025)
6. [b039 公平的戰役(EOF版)](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=a039)
7. [b002 找最大值](http://www.tcgs.tc.edu.tw:1218/ShowProblem?problemid=b002)
:::
:::spoiler ZeroJudge
1. [a005 Eva的回家作業](https://zerojudge.tw/ShowProblem?problemid=a005)
2. [a015 矩陣的翻轉](https://zerojudge.tw/ShowProblem?problemid=a015)
3. [d487: Order's computation process](https://zerojudge.tw/ShowProblem?problemid=d487)
4. [e357: 遞迴函數練習](https://zerojudge.tw/ShowProblem?problemid=e357)
:::
<br><br>
[火龍果筆記](https://hackmd.io/@nn1oeoPyToqO5ohGOU5ppQ/B1_yWncvY#/)
---
### 小叮嚀:
上課時間實在沒有足夠的時間給你們自己練習,
我們只能帶過觀念,講一些題目,讓你們有解題的能力,
光上社課不寫程式的話,很難有進步,
如果有問題的話,實在歡迎你們找講師提問。
不知道怎麼起步的話,強烈建議先寫完 Greenjudge 基礎題庫(a 題庫)
而 ZeroJudge 的基礎題庫因為沒有照著難度分類,也沒有依照使用的語法分類,
導致每一題的難度不能依照他們的題號來判斷。
所以建議已經弄懂我們教的內容,並且也解了幾題 GreenJudge 的題目鍊手過後再去挑戰喔
----