---
# System prepended metadata

title: 第一章、輸出輸入以及變數和常用語法
tags: [C++, APCS]

---

# 第一章、輸出輸入以及變數和常用語法
在一開始要先知道
:::success
**1.程式碼在任何一個凾式內都是由上到下，由左到右執行**

**2.分號(;)是代表一句話的結束。**

**3.在一句話內，除了字串以外，空格和換行(enter)都是可以被忽視的**
:::
## 宣告
宣告就是告訴電腦我需要一個甚麼樣的變數
其中"="可以視為後者指定給前者
:::spoiler **甚麼是變數**
    變數其實就是可以"變"動的一個"數"字。
:::
通用語法為
:::success
[型態] (名字)=(初始值);
:::
:::info
**"//"表示註解，代表為可以省略的東西，常作用於解釋程式碼**
:::

宣告一個整數a來說
```cpp=
int a=3;//3指定給a
```
**注意:每一個語句的結尾都需要加上一個分號，可以把分號想成是句點**

常用型態有下面七種(未來會更多)

|              型態              |                                           內容                                            |
|:------------------------------:|:-----------------------------------------------------------------------------------------:|
|              int               |                      一個整數，範圍為$2^{31} \text{~}2^{-31}$|
| long long int(宣告時可省略int) | 一個整數，但運算時稍慢於int，範圍為$2^{63} \text{~}2^{-63}$| |
|             float              |                                   一個小數(浮點數)範圍，在APCS因為有精度，觀念題較常出現，實作題偏少                                     |
|             double             |                       一個小數，但比float可以裝更長的小數，在APCS因為有精度，觀念題較常出現，實作題偏少                      |
|              bool              |                            一個布林值，只會有0(false)或1(true)                            |
|              char              |                                       字元，例如'a'                                       |
|               string                |                           字串，例如"Emotional Damage"                                                           |
:::danger
我們以' '表示字元，" "表示字串
:::
:::spoiler **字元?字串?**
字元為一個字，當一或多個字元串在一起，就是字串。
這個字元不一定是英文，也可能是數字或符號。
:::
:::spoiler **精度問題**
[為什麼精度問題難以避免](https://medium.com/starbugs/see-why-floating-point-error-can-not-be-avoided-from-ieee-754-809720b32175)
簡單來說為了節省記憶體，所以小數在運算時會是一個近似值。
:::
## 輸出輸入
C++的輸出輸入是不需要處理型態的，因為在宣告的時候就已經告訴電腦了

## 輸出
```cpp=
cout<<"字串"<<endl;
cout<<'字元'<<"\n";
//endl表示換行，並清除緩衝區
//"\n"表示換行，不清除緩衝區(速度較快)
```

### 輸入
```cpp=
int a;//宣告
cin>>a;//讀入
```
:::danger
注意!!
```cpp=
cin>>a,b;
cout<<a,b<<endl;
```
是錯誤的語法，正確應該是
```cpp=
cin>>a>>b;
cout<<a<<b<<endl;
```
:::
### 例題
:::info
例題:[
T01 Hello, a6](https://cc.cysh.cy.edu.tw/problem/T01)
步驟1:宣告一個字串
步驟2:輸入一個字串
步驟3:處理並輸出一個字串
```cpp=
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;
    cout << "Hello, " << s << endl;
}
```
:::

## 常用語法
其實就是一些我不知道放哪裡才好的語法
### 四捨五入&&轉換型態
對a做四捨五入n位
語法
:::success
cout<<fixed<<setprecision(n)<<a;
:::
當今天我想把一個型態轉成另一個型態(例如int->float)，會用這個語法
:::success
(想轉換的型態)[原本的變數或數字]
:::
範例程式
```cpp=
#include <bits/stdc++.h>
using namespace std;
signed main()
{
    int a=4;
    cout<<fixed<<setprecision(4)<<(float)a;//output:4.0000
}

```
### #define
:::danger
這個語法必須放在int main()的上面
:::
為了後續可能會用到的重複語法，所以我們會把重複性高而且要打很多個字的語法來節省時間
語法為
:::success
#define [名字] [你想定義的東西]
:::
範例程式
```cpp=
#include <bits/stdc++.h>
#define ll long long
using namespace std;
signed main()
{
    ll a;
    cin>>a;
    cout<<a<<endl;
}
```
### return (補充)
可以看到程式碼後面可能有
```cpp=
return 0;
```
這行是告訴main程式結束，但整個執行完他也會停
