REVIEW
by 楓資27th程教
CONTENTS
- variables 變數
- operator 運算子
- condition 條件判斷
- loop 迴圈
- array 陣列
VARIABLE
一個不可忽視的存在--變數
variable in Math ?_?
- 在數學領域中: 咱們熟悉的未知數
a^2+2*a*b+b^2=(a+b)^2
x+y=4, x-y=2 x=3, y=2
y=f(x)=ax+b
a^2+b^2=c^2
...
variable in programming ?_?
- 佔有記憶體
- 可更改、計算
- 由許多形態組成
- 唯一的值
int a = -2147483648;
char _b = 'b';
long long int c = 9223372036854775807;
float d = 3.1415926; //7位
double e = 3.141592653589793; //15位
...
variable ?_?
- 可用半形的數字(0~9) || 字元(a~z, A~Z) || 底線(_)
- 不可在同一區域重複宣告同一個變數(名稱)
- 不能用函式庫已有的函式名稱(關鍵字) 如下:
(但是好棒棒的編譯器大哥其實會幫你用 粗體 或 不同顏色 標起來)
後面會講這個概念
型態 | 中文意思 | 英文字義 | 儲存空間(位元) | 數值範圍 |
---|---|---|---|---|
int | 整數 | Integer | 4 bytes/ 32 bits | -2^31~2^31-1 (10 位數) |
long long | 長整數 | long long integer | 8 bytes/ 64 bits | -2^63~2^63-1 (19 位數) |
float | 浮點數(小數) | floating point | 4 bytes/ 32 bits | 3.4E +/- 38 (7 位數) |
double | 倍精度浮點數 | double | 8 bytes/ 64 bits | 1.7E +/- 308 (15 位數) |
char | 字元(半形字) | Character | 1 byte/ 8 bits | 0~255(ASCII) |
bool | 布林(是非) | boolean | 1 byte/ 8 bits | false, true, 0~255 |
types of variable ?_?
0
Advanced issue found▲
小數點後XX位
declare + assign + i/ o
int num_1, num_2, num_3;
//宣告整數型, 分別叫num_1, num_2, num_3的變數
int num_4 = 3;
//宣告一個整數型, 叫num_4的變數, 並分配一個整數給它(賦值)
num_1 = 1; //賦值
cin>> num_2;
//輸入一個整數進num_2
num_3 = num_1 + num_2
cout<< num_1<<" "<< num_2<< " "<< num_3<< " "<<num_4;
//分別輸出值
Q: 要輸入己才能輸出"1 1 2 3"的費式數列??
A: 1
宣告 賦值 輸入/ 輸出
OPERATOR
小學生就會的1+1=王田二 --運算子
算數運算子
- + : 加,像是 6 + 5 = 11
- - : 減,像是 6 - 4 = 2
- * : 乘,像是 8 * 7 = 56
- / : 除 ,整數的除就是取商,像是 11 / 3 = 3
- 如果是小數,1.23 / 2.4 = 0.5125
mod %
- 取mod,就是取兩數相除後的餘數
- 像是,11 % 3 = 2 ( 11 除以 3 等於 3 餘 2 )
- 若被除數是負數,餘數會是負的,e.g.-8 % 5 = -3
int : ㄏㄚˋ,我才有的啦!
關係運算子
- > : 大於
- == : 等於
- <= : 小於等於
- == 要記得不能打成 =
= : 賦值,把等號右邊的值指定或存取到左邊 的變數
- < : 小於
- >= : 大於等於
- != : 不等於
邏輯運算子
- && : and ( shift 7 )
- || : or( shift \ , \在enter上面)
- ! : not(shift 1)
- && 跟||記得是兩個喔!
偷懶ㄉ我
- 遞增 i = i + 1 → i++
- 遞減 i = i - 1 → i--
- i = i + 8 → i += 8
- i = i - 8 → i -= 8
- i = i * 8 → i *= 8
- i = i / 8 → i /= 8
- i= i % 8 → i %= 8
CONDITIONAL
if (我就爛 == true) -- 條件判斷
條件判斷?
- 當某個條件成立時,執行該條件成立時的動作
單向選擇
//語法
if(要判斷的條件){
//條件成立時要執行的指令
}
//例子
if(score>=60){
cout<<"pass";
}
雙向選擇
//語法
if(要判斷的條件){
//條件成立時要執行的指令;
}
else{
//條件不成立時要執行的指令;
}
//例子
if(score>=60){
cout<<"pass";
}
else{
cout<<"fail";
}
多向選擇
- 你可以用很多個else if!
//語法
if(條件1){
//條件1成立時要執行的指令
}
else if(條件2){
//不滿足條件1但條件2成立時要執行的指令
}
else if(條件3){
//不滿足以上條件但條件3成立時要執行的指令
}
. . .
else{
//以上條件皆不成立時要執行的指令
}
//例子
if(score==100){
cout<<"wow!!!";
}
else if(score>=80){
cout<<"excellent!!";
}
else if(score>=60){
cout<<"good!";
}
else{
cout<<"keep going~";
}
多向選擇 - SWITCH
- 是一種多向選擇
- 判斷條件的多時可以省略冗長的else if !
- 只能用於比較特定變數是否為某一整數或字元
多向選擇 - SWITCH
//語法
switch(變數名稱){
case 條件1:
//條件1成立時執行的指令
break;
case 條件2:
//條件2成立時執行的指令
break;
. . .
default:
//以上皆不成立時執行的指令
}
//條件只能為某個整數或字元,或者是整數或字元的區間
//例子(數字)
switch(score){
case 100:
cout<<"滿分";
break;
case 60 ... 99:
cout<<"及格";
break;
default:
cout<<"不及格";
}
//例子(字元)
switch(grade){
case 'A':
cout<<"90~100";
break;
case 'B':
cout<<"80~89";
break;
case 'C':
cout<<"70~79";
break;
case 'D':
cout<<"60~69";
break;
case 'E':
cout<<"0~59";
break;
case 'F' ... 'Z':
cout<<"error";
break;
}
- 區間語法:整數/字元(空格)...(空格)整數/字元
TIPS
- 程式執行順序由上而下執行,當上方條件成立後便會執行該對應敘述,就不會繼續執行下方的條件判斷了!
- else或default若不需要使用可以省略
LOOP
一直一直一...直重複 --迴圈
BREAK && CONTINUE
loop in programming ?_?
- 一種常見(用)的控制流程
- 在特定程式區塊中,重複執行相同的指令
-
C++有三種迴圈
- while loop
- for loop
- do-while (後測試迴圈,比較不常用)
while loop ?_?
- 當條件||數值為true, 執行{ }裡的 statement
- 注意: condition非 0 即為 true
while(condition){ //條件
statement; //內容
//do something...
}
infinite loop ?_?
while(1){
//do something...
}
- 1永遠"非 0",條件恆為true
- 通常會跟continue, break搭配
無窮
- 當條件(中間)成立時,執行{}裡的動作
- 注意: C語言不可在小括號內宣告
- 注意: 變數/ 條件/ 更新 用分號隔開
for loop ?_?
for((宣告)初始化變數; 條件; 更新){
statement; //內容
//do something...
}
(int) i=0
i<5
i++
for(int i=0; i<5; i++){ //外層迴圈
for(int j=0; j>5; j++){ //內層迴圈
cin>> array[i][j];
}
}
- 迴圈裡有一個以上的迴圈
- 常用在多維陣列
nested loop ?_?
巢狀
for(int i=0; i<5; i++){
if(i==3) break;
cout<< i<<" ";
}
//0 1 2
- 提前結束迴圈(跳出一層迴圈)
- 通常放在條件判斷後
break ?_?
for(int i=0; i<5; i++){
if(i==3) continue;
cout<< i<<" ";
}
//0 1 2 4
- 直接進入下一個迴圈(跳過本次迴圈的內容)
- 通常放在條件判斷後
continue ?_?
attention !_!
- 如大括號裡只有一行指令,可以縮排去大括號
- 區域變數只能在宣告處以內的地方使用
#include<iostream>
using namesapce std;
int a=5;
int main(){
int x=1;
for(int i=0; i<3; i++){
cout<< i<< " "; //ok
cout<< x<< " "; //ok
cout<< a<< " "; //ok
}
cout<< i; //X
return 0;
}
ARRAY
老師你錯了 是從0開始不是1 --陣列
一維陣列
declare an array
- 資料型態 變數名稱[儲存空間];
- 陣列的儲存是從0開始
int a[10];
// 資料型態: 整數(陣列), 陣列名稱: a, 陣列大小: 10
// 沒有初始化的陣列
// 裡面也許長這樣 a = {-2147483648, 2147483657, ...}
double b[100] = {0.1, 0.05, 0.2};
// 資料型態: 浮點數(陣列), 陣列名稱: b, 陣列大小: 100
// 陣列值用大括號括
//除了初始化的3個數其他預設為0
char str[6];
// 資料型態: 字元(陣列), 陣列名稱: str, 陣列大小: 6
// 字元陣列會包含最後一個字元'\0', 因此開的大小要字數+1
// 但建議還是開大一點, 不開白不開, 你也不會少一塊肉
存取陣列
- 迴圈
int a[6];
for(int i=0;i<=5;i++)
a[i]=i;
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] |
---|---|---|---|---|---|
1
0
5
4
3
2
注意
- 不要存取不在陣列空間內的值
- 如果打成下面那樣的話OJ會出現RE
- 電腦會當機
int a[10];
cout<<a[100]<<endl;
cout<<a[1000]<<endl;
注意
- 陣列的長度在宣告後就固定不變了
- 那有些人會想說要打成這樣
- 不建議
int n=2;
int a[n];
多維陣列
declare an array
- 資料型態 變數名稱[儲存空間][儲存空間]....
- 幾維就開幾格
int a[5][2];
double b[7][1][2];
存取陣列
- 巢狀迴圈
int a[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
a[i][j]=i+j;
}
0 | 1 | 2 | |
---|---|---|---|
0 | |||
1 | |||
2 |
0
4
3
3
2
2
1
2
1
FINISH
NOT
a mini quiz
ReviewI_variable2array
By h94usu6
ReviewI_variable2array
2020試教_part1
- 195