C++
楓資111-1 Review
— 講師:陳曉璇
目錄Index
下次社課是12/22喔!
講義連結Slides Link

推銷 四校聯課
輸入輸出
第 0 ~ 1 堂
#include <iostream> //用於輸入輸出的標頭檔(Header)
using namespace std; //省去命名空間(namespace)
int main(){ //主函式(Function),主要執行的程式放這裡
// Code
return 0;//讓電腦知道程式要結束
}//單行
/*使用多行
提醒自己這行在寫什麼
或者分段debug*/起手式
註解
開始打程式
| 型別 | 中文 | 範例 |
|---|---|---|
| int | 整數 | 12、-9 |
| long long | 長整數 | 1000000000000000 |
| float | 浮點數 | 3.1415 |
| double | 倍精度浮點數 | 3.1415926535 |
| char | 字元 | 'a'、'@'、 '4' |
| string | 字串 | "Hello world" |
| bool | 布林 | true、false |
宣告變數
宣告變數
型態 變數名稱 = 值 ;char a0 = 'a';變數名稱:
| 字母 | |
| _ | |
| 數字 | |
| 保留字 |
可以
可以
不可以在開頭
不可以
輸入輸出
int a1 ;
cin >> a1 ;cin >> 變數 ;int x,y,z ;
cin >> x >> y >> z ;cout << 變數 ;char a2 = 'c';
cout << a2 ;換行:endl 或 '\n'
string a2 = "zsisc29" ;
cout << "Hello," << a2 << endl;Hello,zsisc29
多項輸入時:
各個輸入值之間用 空格 或 換行 分開
條件判斷
第 1~2 堂
運算子
| 算術運算子 | 意義 |
|---|---|
| + | 加 |
| ++ | 遞增1 |
| - | 減 |
| -- | 遞減1 |
| * | 乘 |
| / | 除 |
| % | 取餘數 |
| 比較運算子 | 意義 |
|---|---|
| > | 大於 |
| >= | 大於等於 |
| < | 小於 |
| <= | 小於等於 |
| == | 等於 |
| != | 不等於 |
| 邏輯運算子 | 意義 |
|---|---|
| && | AND (且) |
| || | OR (或) |
| ! | NOT (否) |
條件判斷
if(條件1){
如果條件1成立時執行;
}
else if(條件2){
如果條件1不成立、條件2成立時執行;
}
else if(條件3){
如果條件1不成立、條件2不成立、條件3成立時執行;
}
else{
如果上述條件皆不成立時執行
}條件判斷
switch (變數名稱或運算式) {
case 符合數字或字元:
執行;
break;
case 符合數字或字元:
執行;
break;
default:
執行;
}迴圈、陣列
第 2~3 堂
FOR迴圈
for( 宣告初始變數 ; 須符合條件 ; 更新 ){
執行;
} //注意是分號喔WHILE迴圈
while(須符合的條件){
執行;
}continue
break
for(int i=0;i<10;i++){
if(i==5){
continue;
}
cout<<i<<" ";
}0 1 2 3 4 6 7 8 9
for(int i=0;i<10;i++){
if(i==5){
break;
}
cout<<i<<" ";
}0 1 2 3 4
巢狀迴圈
//這是巢狀迴圈範例
int k=0,h=0;
for(int i=1 ; i<=9 ; i++ ){
for(int j=1 ; j<=9 ; j++ ){
h-=1;
}
k -= 1;
}一維陣列
用迴圈處理 輸入 / 輸出
字元陣列char[] 是C語言中的字串,可以直接輸入輸出
#include <iostream>
using namespace std;
int main(){
int a[3];
for(int i=0;i<3;i++){
cin >> a[i];
}
for(int i=0;i<3;i++){
cout << a[i]<<endl;
}
}二維陣列
用巢狀迴圈處理 輸入 / 輸出
#include <iostream>
using namespace std;
int main(){
int a[2][3];
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cin >> a[i][j];
}
}
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
cout << a[i][j] << " ";
}
cout << endl;
}
}函式
第 4 堂
宣告函式
型別 名稱(參數1, 參數2...){
函式主體;
return 回傳值;
}//注意是逗號喔放在主程式前
每個參數的型別都要打出來
型別 void為空 無回傳值(可省略 return)
C++內建函式庫
- <iostream>
遞迴
在函式裡呼叫自己
把大問題拆解成小問題
//範例:階乘的遞迴函式
int Factorial(int n){
if(n==1){
cout << n << ' ' << "return 1" << endl;
return 1; //1!為1
}
else{
cout << n << ' ' << "return n*Factorial(n-1)" << endl;
return n*Factorial(n-1); //n!為n*(n-1)!
}
}指標、參考
第 5 堂
指標
| 取址符 | & |
| 指標變數 | * |
| 取值符 | * |
是電腦儲存東西的地址
#include <iostream>
using namespace std;
int main(){
int a,b;
cout << &a;//取得a的地址
cout << &b;//取得b的地址
return 0;
}#include <iostream>
using namespace std;
int main(){
int a;
int* p=&a;
cout << p; //a的地址
return 0;
}#include <iostream>
using namespace std;
int main(){
int a=4;
int* ap = &a;
cout << *ap;
//ap這個地址的值,也就是4
return 0;
}參考
取小名
改變參考的值,原本的值也會被改到
#include <iostream>
using namespace std;
int main(){
int a=2;
int &r=a;
//r的地址是a,r是a的小名
r=4
cout<<a<<endl; //4
cout<<r<<endl; //4
return 0;
}String
第 6 堂
String
Char Array
#include <iostream>
int main(){
char s1[6] = {'h', 'e', 'l', 'l', 'o'};
char s2[] = "hello";
return 0;
}#include <string>
int main(){
std::string s = "hello";
return 0;
}Iterator
C++版的指標
#include <string>
int main(){
std::string s = "hello";
return 0;
}| s.begin() | s.begin()+1 | s.begin()+2 | s.begin()+3 | s.begin()+4 | s.end() |
|---|---|---|---|---|---|
| h | e | l | l | o |
String常用語法
#include <string>
int main(){
std::string s = "hello";
return 0;
}| [ ] | 取出/修改其中的字元 | s[0] | h |
| size() | 回傳字串長度 | s.size() | 5 |
| empty() | 判斷是否為空 | s.empty() | 0 |
| insert() | 插入字串 | s.insert(0,"ko") | kohello |
| erase() | 清除字串 | s.erase(s.begin()+2, s.end()) | he |
| find() | 回傳字串位置 | s.find("ll") | 2 |
Sort
第 7 堂
選擇排序法
int num[10]={4,3,5,1,2};
for(int i=0;i<5;i++){
int idx=i,value=num[i];
for(int j=i+1;j<5;j++){
if(num[j]<value){
idx=j;
value=num[j];
}
}
swap(num[i],num[idx]);
}
for(int i=0;i<5;i++){
cout << num[i] << " ";
}O(n^2)
每次選最小的
氣泡排序法
int num[10]={4,3,5,1,2};
for(int i=0;i<4;i++){
for(int j=0;j<5-i-1;j++){
if(num[j]>num[j+1]){
swap(num[j+1],num[j]);
}
}
}
for(int i=0;i<5;i++){
cout << num[i] << " ";
}O(n^2)
每次左右兩兩比較
插入排序法
int num[10]={4,3,5,1,2};
for(int i=1;i<5;i++){
int idx=i-1,value=num[i];
while(num[idx]>value){
num[idx+1]=num[idx];
idx--;
}
num[idx+1]=value;
}
for(int i=0;i<5;i++){
cout << num[i] << " ";
}O(n^2)
將未排序的插入已排序的數列
Review
打打程式!
Kahoot!
來玩來玩~~
Review
By shaunna163
Review
- 151