--- title: c/c++變數與常數\ tage: c++程式設計實習 --- # 演算法(Alogrithm) ## 認識演算法 演算法(algorithm)就是一組用來解決特定問題的有限指令或步驟,我們可依循這些步驟來逐步解決問題或完成特定工作。演算法中的每一個步驟都必須非常明確,不可以模稜兩可。 ## 演算法的特性 演算法通常都有如下所示的5項特性。 1. 輸入(input):演算法中經常需要輸入資料。 2. 輸出(output):演算法至少要有一個以上的輸出資料。 3. 有限性(finiteness):演算法應該要在有限的處理步驟內得到結果。 4. 明確性(definiteness):每個步驟都必須明確,不能有模稜兩可的情況。 5. 有效性(effectiveness):每個步驟都必須是可實際做到或執行的。 ## 流程圖表示法 ![](https://i.imgur.com/s87UfYm.png) ![](https://i.imgur.com/wXgsAuq.png) ## 敘述表示法 1. 敘述表示法是使用虛擬碼,來表達演算法的處理步驟。 虛擬碼(pseudo code)是一種以簡潔扼要的文字,來設計程式邏輯的工具 2. 3. 範例 ![](https://i.imgur.com/bPlnJzI.png) :::success 程式執行簡易說明 ::: ![](https://i.imgur.com/lpPxbMY.png) :::success <font color='red'>**變數就是一塊記憶體空間**</font> ::: 1. 使用前必須先宣告: 從電腦取得一塊記憶體空間 2. 範例: 宣告一個可以儲存整數(integer)的記憶體空間 int x; // 記憶體空間的別名為x 3. 變數命名規則 - 第一個字元: $A\sim Z, a\sim z, \_$ 共 $53$個可用字元 - 第二個之後到結束字元: $A\sim Z, a\sim z, \_, 0\sim 9$ 4. 駝峰命名法: - 第一個單字的第一個字元為小寫 - 第二個單字的第二個字元為小寫,其餘為小寫 myAge, todayIsMyDay 5. 範例: 宣告一個能儲存學生英文成績的變數。 int engrade;` 6. ![](https://i.imgur.com/o5utmD5.png) ![](https://i.imgur.com/mfh7iaA.png) ![](https://i.imgur.com/iw6ZBkC.png) ![](https://i.imgur.com/LPINQur.png) ## 資料的種類:資料型別(Data Type) ### 整數: integer,沒有小數點的數字 1. chat: 字元型態的變數型態,可以表示1 byte大小的數字 - 範圍:$-128\sim 127$,共256$數字 - unsigend char:$0\sim255$,共$256數字 3. short:可表示$2$ byte大小的數字 4. int:可表示$4$ byte大小的數字 5. long:可表示$4$ byte大小的數字 6. long long:可表示$8$ byte大小的數字 :::info 以上的整數型態最前方加上unsingned修篩字,代表儲存的資料為正整數 ::: konichiwa tadaimasu ### 浮點數 :::success 有小數點的數字 ::: 1. float: 4 bytes, $-3.402e^{38} \sim 3.402e^{38}$。<font color='red'>**精確到小數點後第$6$位**</font> 2. double: 8 bytes,$-1.7976e^{308} \sim 1.7976e^{308}$。<font color='red'>**精確到小數點後第$15$位**</font> 3. long double: 8 bytes,$-1.7976e^{308} \sim 1.7976e^{308}$。<font color='red'>**精確到小數點後第$15$位**</font> 1. char:1byte的字元,可記錄一班的英文,數字或標點符號 2. wchar_t2bytes,可記錄中日韓文字 ### 字元 :::success 只要是可以從鍵盤輸入的都可以是字元,例如 Aa~Zz、0~9、?/,....等 ::: 1. char: 1 byte的字元,可記錄一般的英文、數字或標點符號 2. wchar_t: 2 bytes,可以記錄 中日韓文字 :::info ASCII code: https://en.wikipedia.org/wiki/Character_encoding ::: 1. 文字在電腦中也是以數值的方式來表示,為讓所有電腦系統都用一致的方式表示相同的字元, 2. 例如以65代表大寫A、97代表小寫a,這種以特定數值代表某個字元的方法就稱為編碼, 3. 目前資訊界一般所用的編碼為 美國標準資訊交換碼(American Standard Code for Information Interchange, ASCII) ![](https://i.imgur.com/h2p38SW.png) ### 布林 :::success 1: 代表ture(真),0:代表false(假) ::: 1. bool:1byte 2. 請注意在c語言中沒有true與false ## 設定變數的初始值 :::success 語法:<font color='red'>**資料型態 變數名稱=出值;**</font> ::: 1. 範例:宣告一個變數處存你的英文成績為60 'int engscore=60' 2. 範例:宣告一個變數處存你的英文成績為60分+你上課出席的分數(y) '''cpp=1 int y=50; int engscore=60+y; ''' 3. 由鍵盤輸入處存到變數中:<font color='red'>**要存入資料的變數必須先宣告,否則會產生錯誤**</font> '''cpp=1 int engscore; cin>>engscore; ''' # 常數 :::success 在程式中不能被改變諾嘗試去改變會產生錯誤**</font> ::: 1.使用const:<font color='red'>**constfloat PI=3.14159;**</font> 2.使用#define:<font color='bule'>**define PI3.14159**</font> ## 跳脫字元(\字元) :::success 格式:\+字元:例如單引號 雙引號等等 ::: 1. 顯示單引號'\'' 2. 顯示引號:'\"' 3. 自動輸入Enter(換行):""/n" # 用字元編碼指定字元 1. \+8進為數值:表示ASCII所代表的字元 '\144'代表a 2. \+或\X:x或X代表16進為數值,表示16進位值得ACLL,顯示ACLL所代表的字元 '\X61'代表a # 程式練習 cpp:;#include <iostream> using namespace std; int main() { /*測試資料型別所佔的記憶體空間大小:使用sizeof()*/ cout << "char 所占記憶體空間大小" <<sizeof(char)<<"byte\n"; cout <<"float所占記憶體大小:" <<sizeof(float)<<"bytes\n"; cout <<"long long 所占記憶體大小:" <<sizeof(unsigned long long)<<"bytes\n"; /*宣告變數測試 1. 整數型態的最大值+1=整數型態的最小值 2. 整數型態的最小值-1=整數型態的最大值 */ short x=32767; // x short 最大值 x=x+1; // x 變成 short 最小值 -32768 cout<<"short最大值+1="<<x<<",會變成short 最小值\n"; x=x*-1; // x 變成 short 最大值 32767 cout<<"short最大值-1="<<x<<",會變成short 最小值\n"; /*ASCII編碼*/ cout<<"輸出字元A; "<<'A' <<"(char)65" <<char(65)<<"\n"; //輸出ABCD...XYZ:(數字)轉為字元 x=65; for(int i=0; i<26; i++){ cout<<char(x+i); } cout<<"\n"; //輸出abc....xyz for(int i=0; i<26; i++){ cout<<char(x+i+32); } //將字元轉為ASCII(數字) cout<<"\n輸出A的ASCII code:"<<(int)'A'<<"\n"; cout<<"輸出A的ASCII code:"<<(int)'Z'<<"\n"; /*浮點數的精準度測試*/ float f =1.123456789; double d =1.123456789; cout.precision(16); cout<<"float value="<<f<<"\ndouble="<<d; /*布林測試*/ cout<<boolalpha; cout<<"\nture的值="<<int(true)<<t1的值為"<<"<<Bool(1); cout<<"\nflase的值="<<int(false)<<"t0的值為"<<<Bool(0) return 0; }