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

  • 144