C++基本語法
IDE
CodeBlocks
CodeBlocks是非常好用的IDE,非常容易上手
各種功能都很方便
只有C++的功能也省去了不少麻煩
和
VSCode
擴充性很好的IDE
有許多插件可以使用
支援絕大多數程式語言
開始
C++的主要程式必須寫在main函數裡
int main(){
// 主程式
}
註解
有時候在程式中需要注明一些程式的功能,就可以用註解
單行註解用兩個斜線開頭:
int a = 1 // 把a設置為1
多行註解用"/*""*/"包起來:
/*
常數設置
a->1, b->2
*/
int a = 1
int b = 2
變數
變數是在記憶體內準備的"儲存格",用來儲存資料,並標記資料的類型
語法為
型別 變數名;
與許多程式語言不同,C++變數名是否能用中文(Unicode字元)並沒有硬性規定,而是取決於編譯器
通常建議用英文大小寫、數字和底線"_"命名
常用基本型別有:
- bool布林值
- char字元
- int整數
- float浮點數
- double雙倍精度浮點數
布林值
布林值是表示"是"和"否"的資料
"是"寫作
true
"否"寫作
false
字元
字元表示"單一個字"
用'
把字元包起來
整數
整數就是整數
整數有不同容許範圍的版本
最常用的是
+ int
+ long long
浮點數
浮點數可以記錄包含小數的數,但會有誤差
通常若沒有特殊需求都會直接用double而非float
輸入和輸出
C語言的核心並不包含輸出入的處理
所以要引用輸出入函數庫
#include<iostream>
輸入
std::cin >> 變數;
輸出
std::cout << 變數;
可以連著寫
它會依照變數的型別自動判斷如何輸出入
支援 字元、字串(string)、整數、浮點數
也可以自己定義處理其他類型的方法
using namespace
因為一些原因,C++的基本函數庫裡的東西都放在叫"std"的命名空間裡
所以每次呼叫都要告訴編譯器要到std裡面找,很麻煩
可以先寫一行
using namespace std;
(注意分號)
告訴編譯器把"std"裡的東西拿出來,就可以不用每次都要加上"std::"
小範例:計算a+b
#include<iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
int c = a+b;
cout << c << "\n";
}
IO優化
C++的輸出入默認會比純C的慢
但只要適當優化就能比純C還快
(只有打競賽時這樣做,實際應用不建議做IO優化)
一、優化指令
#include<iostream>
using namespace std;
int main(){
ios::sync_with_stdio(0);cin.tie(0);
}
優化指令包含兩項
1. 告訴C++不需要去和純C的IO同步
2. 告訴cin讀資料的時候不要去flush(cout)
換行
不要用endl
,用"\n"
或'\n'
(兩個一樣快)
因為endl
會去flush(cout)
為什麼不要flush
cout是一種檔案流,用來將資料輸出到標準輸出stdout,但把資料從記憶體傳出去很慢,所以會在記憶體中開一個緩衝區buffer暫時儲存輸出,flush指令會把緩衝區的內容傳出去,速度較慢,雖然在實際應用中可能沒什麼差別,但在程式競賽中就可能是AC和TLE的差別
基礎運算子
常用的計算符包含:
- 數學運算子
+
-
*
/
%
- 比較運算子
>
<
>=
<=
==
!=
not_eq
- 位元運算子
<<
|
&
^
>>
~
bitand
bitor
xor
compl
- 邏輯運算子
!
||
&&
!
||
&&
not
and
or
- 賦值運算子
+=
-=
*=
/=
%=
<<=
>>=
|=
&=
^=
++
--
and_eq
or_eq
xor_eq
- 其他
[]
()
{}
?:
<::>
<%%>
語法結構
條件判斷
條件判斷可以指定在特定條件符合值才執行部分程式碼
//縮排不是必須的
if (條件){
程式碼
}else if (另一個條件){ //非必要,可以有很多
程式碼
}else{ //非必要
程式碼
}
迴圈
for迴圈:
for迴圈有兩種
傳統for
for (初始化;繼續條件;結尾動作){
程式碼
}
Ex.重複n次
for (int i = 0;i < n;i++){
程式碼
}
迭代for
for (型別 變數名 : 容器){
程式碼
}
while迴圈:
while迴圈可以在條件符合時不斷重複相同程式碼
while (條件){
程式碼
}
break continue
在迴圈中使用break可以立刻跳出當前迴圈
在迴圈中使用continue可以回到迴圈起點
注意:要加分號
自訂函數(副程式)
自訂函數可以把重複用到的功能打包起來,方便使用
語法:
回傳類型 函數名(參數列表){
程式碼
return 回傳值; //非必要 不一定要在最後一行
}
三元運算子
三元運算子可以簡化條件判斷
語法:
條件?值1:值2