---
# System prepended metadata

title: 高一基礎語法
tags: [ck, mycourse]

---

# 經過高一資訊課後，你該知道的基礎語法
- [語法](#語法)
- [組合技](#組合技)

## 語法
### cin, cout, int, float, double, bool
```cpp!
int a, b=2;
double money = 1.23;
cin>> money;
cout<< money * 2;
bool decision = true;
```

#### operators
```cpp!
int a=2, b=3;
cout<< a + b;  // 5
cout<< a - b;  // -1
cout<< a * b;  // 6
cout<< a / b;  // 0, 整數除法
cout<< a % b;  // 2, 取餘數
// a^b, a**b 次方? 沒有這個東西
```

### if
```cpp!
int money = 30;
if(money < 10) {
    cout<< "POOR";
}
else if(money < 50) {
    cout<< "NORMAL";
}
else {
    cout<< "RICH";
}
```
#### operators


| ==   | !=     | >    | <    | >=       | <=       |
| ---- | ------ | ---- | ---- | -------- | -------- |
| 等於 | 不等於 | 大於 | 小於 | 大於等於 | 小於等於 |

| A && B | A \|\| B | \!B  |
| ------ | ------ | ---- |
| A 且 B | A 或 B | 非 B |



### for, while
```cpp!
for(int i=0; i<10; i++) {  // 0 ~ 9
    cout<< i<< " ";
}
cout<< endl;

for(int i=10; i>=0; i--) { // 10 ~ 0
    cout<< i<< " ";
}
cout<< endl;

int i = 0;
while(i < 10) {            // 0 ~ 9
    cout<< i<< " ";
    i++;                   // i = i + 1;
}
```

### break, continue
```cpp!
for(int i=0; i<1000; i++) {
    if (i %2 == 0) {
        continue;          // 跳過以下內容，進入下次迴圈 (執行 i++)
    }
    if (i > 100) {
        break;             // 離開迴圈
    }
    cout<< i;
}
```

### array
```cpp!
int a[10]={};
for(int i=0; i<10; i++) {
    cin>> a[i];
}
for(int i=9; i>=0; i--) {
    cout<< a[i]<< " ";
}
```

## 組合技
- [cin + for/while](#cin--forwhile)
  輸入 T 組資料，每組先輸入 N，接著有 N 個數字要輸入
  無限輸入
- [if + for/while](#if--forwhile)
  計算`次數`、`總和`、`最大` `最小`
- [bool + for/while](#bool--forwhile)
  偵測某`事件` `有無`發生
- [cin + for/while + array](#cin--forwhile--array)
  檢測某些數字是否`完整`
  例如: 輸入的 N 個數字中，包含了哪幾個 1~10 的數字，沒包含的又有哪些

### cin + for/while
> 輸入 N，然後輸入 N 個數
```cpp!
int N;
cin>> N;
for(int i=0; i<N; i++) {
    int number;
    cin>> number; // 重複輸入 N 個數字
}
```
> **有 T 組測試資料**，每次都會輸入 N 個數字，...
```cpp!
int T;
cin>> T;
for(int times=0; times < T; times ++) {
    int N;
    cin>> N
    for(int i=0; i<N; i++) {
        int number;
        cin>> number
        ...
    }
}
```
> 無限輸入: 有多組測試資料，每次輸入兩個數字，計算總合
```cpp!
int a, b;
while(cin>> a) { // 一直讀一直讀一直讀一直讀一直讀
    cin>> b;
    cout<< a + b<< endl;
}
```


### if + for/while
> 計算`次數`、`總和`、`最大` `最小`
```cpp!
// !!! 初始化很重要 !!!
int counts = 0;
int sum = 0;
int MAX = -1000000;
int MIN = 1000000;
for(int i=0; i<10; i++) { // 輸入 10 個數字
    int n;
    cin>> n;
    if(n % 2 == 0) {
        counts++; // counts = counts + 1;
    }
    sum += n;     // sum = sum + n;
    if(n > MAX) {
        MAX = n;
    }
    MIN = min(MIN, n);  // min(a, b) 的功能是: 算出 a, b 中的最小值
}
```
### bool + for/while
> 用來偵測`某事件` `有無`發生
> 例如: 偵測輸入的 10 個數字中有沒有偶數，若有，則輸出一次 yeah，無則輸出 nope
```cpp!
// 第一種方案: 沿用 counts
int counts = 0;
for(int i=0; i<10; i++) {
    int n; cin>> n;
    if(n % 2 == 0) {
        counts += 1;
    }
}
if(counts == 0) { cout<< "nope"; }
else { cout<< "yeah"; }

// 第二種方案，使用 bool
bool exists = false;
for(int i=0; i<10; i++) {
    int n; cin>> n;
    if(n % 2 == 0) {
        exists = true;
    }
}
if(exists == false) { cout<< "nope"; }
else { cout<< "yeah"; }
```


### cin + for/while + array
> 檢測數列是否完整
> 例如: 班級有 34 人，分別是 1~34 號，輸入 33 個不重複的數字，代表準時的學生，找出遲到的那一名學生
```cpp!
int visit[35] = {}; // 使用範圍 1~34, 全部都歸零
for(int i=0; i<33; i++) {
    int n; cin>> n;
    visit[n] = 1; // 出現了
}

for(int i=1; i<=34; i++) {
    if(visit[i] == 0) { // 找到遲到的了!
        cout<< i<< endl;
        break; // 剩下的座號不用再看了，跳離迴圈
    }
}
```

<div style="height: 300px"></div>