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