1.61k likes | 1.89k Views
程式語言 C++. By :梁志堅. 什麼是程式. 程式語言的種類 認識記憶體 程式語言的兩項任務: 程式員藉以敘述處理事務的步驟。 提供程式員解決事務的思維觀點。 寫程式的基本概念 認識語言程式編輯環境 ( 使用 Dev C++) 第一個 C++ 語言程式 範例: 2_01. 寫程式的基本概念. 操弄記憶體 變數 “=“ 的意義 (a=a+1) 程式的執行邏輯 改變程式的執行方向 使用 if 、迴圈、呼叫副程式 ‧‧‧. 資料的型態.
E N D
程式語言C++ By:梁志堅
什麼是程式 • 程式語言的種類 • 認識記憶體 • 程式語言的兩項任務: 程式員藉以敘述處理事務的步驟。 提供程式員解決事務的思維觀點。 • 寫程式的基本概念 • 認識語言程式編輯環境(使用Dev C++) • 第一個C++語言程式 範例:2_01
寫程式的基本概念 • 操弄記憶體 • 變數 • “=“ 的意義(a=a+1) • 程式的執行邏輯 • 改變程式的執行方向 使用 if、迴圈、呼叫副程式‧‧‧
資料的型態 • 整數型態(int 、long、unsigned) • 浮點數型態(float、 double) • Char字元型態(另有字串型態)
變數與常數 • 變數的意義 • 變數的名稱 • 變數的宣告:int a, long a, float a, char a… • 常數:const pi=3.14159 3_01
運算 • 運算式(expression):5+a*b-c • 運算子(operator) :+ - * / % • 運算元(operand) :(5、a、b、c‧‧‧)
運算子的種類 • 設定運算子:= • 算數運算子:+ - * / % 3_02、 3_03 • 比較運算子:> < == != >= <= 3_04 • 邏輯運算子:&&(and) ||(or) !(not) 3_05 • 位元邏輯運算子:>> (往右移動) << (往左移動) | (or) & (and) ~ (not) ^(xor) • 特殊運算子:++ -- sizeof() 3_06 • 其他:
其他運算符號 • &:變數指位元器運算符號 • *:指標運算符號 • [] :陣列 • , :分隔變數或運算式 • ->:存取指標結構體運算符號 • . :存取結構體運算符號
C++的輸入與輸出 • Cout:4_12 • Cin:4_13 • 格式化的輸出與輸入(要使用時再查書) setw():預留輸出格數,向右靠齊。 4_14 precision() setprecision() 4_15 setf() setiosflags() 4_16
練習題 • 設計一個程式輸入攝氏溫度,輸出華氏溫度。
程式的流程 • 循序式結構 • 選擇式結構 • 迴圈式結構
循序結構 • 依照敘述的先後次序由上而下一次執行。 5_01
選擇式結構 • If • 多重if • if‧‧‧else 敘述(else…if ) • 巢狀 if …else 指令 • 敘述1?敘述2:敘述3 • Switch…case
If‧‧‧(else) if(運算式) ※a==b 與a=b之分別 { 敘述群 } ‧‧‧ 5_02
多重if If(運算式1) { If(運算式2) { If(運算式3) { 敘述群 } } } 3個 if 條件都成立時,才執行敘述群
if‧‧‧else 敘述(else if 5_05)(假的時後離開) (真的時後離開) If(運算式) { 敘述群 A } else { 敘述群 B { 5_03
巢狀 if …else 指令 If(運算式1){ If(運算式2){ If(運算式3) { 敘述群 A } else { 敘述群 B } else { 敘述群 C } } else { 敘述群 D } } 5_04
敘述1?敘述2:敘述3 當 敘述1 為真 ,則執行 敘述2, 否則,則執行 敘述3。 5_06
練習: • 輸入兩個整數a、b,如果a>=b則做a-b的運算,如果a<b則做a*b的運算。 • 輸入兩個正整數a、b,同時判別它們和0的關係,並輸出結果。 • 輸入2個整數a、b,輸出最大的數。(使用敘述1?敘述2:敘述3)
Switch…case Switch(變數) { case 常數1; 敘述群 A break; case 常數2; 敘述群 B break; ‧ ‧ } 5_07
練習: • 輸入一個成績(0-100),判斷這個成績是在哪個等級(90-100→A等級、 80-89→B等級、 70-79→C等級、 60-69→D等級、 60以下則印出F等級
迴圈式結構 • For 迴圈 • 多重For 迴圈 • Do…while 迴圈 while 迴圈 多重 while 迴圈 do….while Break 與 continue
For 迴圈(改寫5_09為1+2+‧‧‧) • For(運算式1;運算式2;運算式3)for(i=0;i<10;i++) { 敘述群 } 5_09 ; 5_10
練習 • 輸入→首項、公差、項數,輸出數列和。 • 輸入整數n,輸出1+1/2+1/3+1/4‧‧‧+1/n • 輸入整數n,將n開根號(含虛根)。 • 輸入整數n,輸出費伯納希數列,a0=0,a1=1
多重For 迴圈 For () { for() { 敘述群 } } 5_11
練習 • 改寫九九乘法表為墊板上的格式。 • 寫一程式找出三位數的Armstrong數。 • 輸入整數n,印出2n-1層圖,圖形如下: • * • * * • * * * • * * • *
while 迴圈 與 do….while迴圈 While(運算式) { 敘述群 } 5_12 5_13 // do { 敘述群 } While(運算式); 5_14
練習 • 輸入x值,輸出1+ x + (x^2/2!) + (x^3/3!) + ‧‧‧ + (x^n/n!) 之和,當(x^n/n!)<0.000001 時輸出結果。 • 輸入兩個正整數,輸出這兩數的最大公因數。 • 輸入一個數,輸出這個數的每一位數的和。 • 輸入一個正整數,輸出此數的因數分解。 • 輸入一段正整數的範圍,輸出此範圍內所有整數的因數分解。
Break 與 continue • Break 指令:把程式的執行點從迴圈中往外跳一層。 5_15 • Continue指令:將程式執行點拉回到迴圈的判斷式,並且略過continue到迴圈結束之間的所有敘述。 5_16 5_17
練習 • 輸入 n 個數,輸出這個數列中的最大暨最小值。 • 輸入一個正整數n,輸出 小於 n 的所有質數。
陣列 • 由一群相同資料型態的資料變數所組成的有序集合(如圖)。 6_01 • 一維陣列宣告陣列: 資料型態 陣列名稱[陣列長度] 6_02 6_03
練習 • 輸入一個十進位的整數,改成二進位輸出。 • 由亂數產生 n 個數放到陣列內,並將此數列由小到大排序 • 模擬樂透電腦選號,可以選擇大樂透或小樂透 產生6個不同數字,並將產生的數字排序印出
二維陣列 • 二維陣列宣告陣列:資料型態 陣列名稱 [列的大小] [行的大小] 6_04 6_05
練習題: • 輸入一個n*m(n,m<=7)的二維矩陣,將此矩陣向右轉置,並輸出此矩陣內每一元素的和 • 用亂數產生18個小於100的數,分別放入A、B兩個3*3的矩陣, 1.輸出AB矩陣相加給C(印出ABC矩陣) 2.將C矩陣向右轉置 3.輸出AB矩陣相乘
練習 • 輸入n(n<=21)值,產生一個 n*n 的摩方陣,(n 為奇數)。 • 另(n 為偶數[n是四的倍數,n 是四的倍數+2])
字串 • 字串其實是一個一維的字元陣列,但字串是以\0結尾(系統自己會加上),所以字串就是字元陣列,但是字元陣列不一定是字串。 • 宣告二維的字串陣列時,可不需指定第一維的陣列長度,但第二維一定要宣告。 6_06 6_07
練習 • 大數運算,輸入兩個大數(20位數以上),輸出這兩數相加與相乘的結果 • 輸入一串文字,輸出每一個英文字母出現的次數(只輸入小寫)。
字串處理 • Gets(輸入字串變數):由輸入裝置讀取一串字(直到遇到\n,cin遇到空白就停止),存入到指定的陣列中,並自動在最後面加上\0。 6_08 • puts (輸出字串變數):把指定的資料以字串的格式印到輸出裝置上(直到碰到\0為止),並自動在結尾加上\n。 6_09
字串處理 • Strlen(string):傳回string的長度(不含\0)。6_10 • Strcat(str1,str2)、strncat(str1,str2,n) 6_11 6_12 • Strcpy(str1,str2)、strncpy(str1,str2,n) 6_13 6_14 • Strcmp(str1,str2)、strncmp(str1,str2,n) :做相等比較,相同傳回 0、不同且字元數較少傳回-1、不同且字元數較多傳回1 6_15 6_16
字串處理 • strtok():將字串依照某些分隔符號拆成一小段一小段的元素。 • 語法:strtok(string1,string2); • strtok會先把string2中所出現的所有字元當作分隔符號,並將string1依照這些分隔符號一一隔開,把原本完整得字串切成好幾個小元素,最後strtok()再回傳這些字串元素。 6_17
練習 • 設計一程式,輸入一字串,輸出字串內的每一筆資料的資料型態,(例如輸入字串為:”apple 12 52.12 1.23e+03‧‧‧”) • 設計一程式,執行時讓使用者輸入一段文章,輸出文章中總共有多少個英文單字(不包含. , / ” ’ & $ 等符號),並印出每個單字總共顯示的次數。
函數 • 什麼是函數?使用函數的優點 • 函數的定義與宣告 • 函數的使用 • 傳址函數 • 遞迴函數
什麼是函數?使用函數的優點 • 函數可視為“一群敘述的集合”,使用函數把某些經常使用的敘述群,直接用一個函數名稱封裝起來,當需要使用時再呼叫函數,可以減少重複寫相似程式碼的麻煩。 7_01
函數的定義與宣告 • 函數的宣告: 函數回傳值型態 函數名稱(資料型態 參數1 資料型態 參數2…) ; • 函數的定義: 函數回傳值型態 函數名稱(資料型態 參數1 資料型態 參數2…) { 函數主體; }
函數的定義與宣告 • 要清楚的定義函數回傳的型態(int 可省略7_06) • 每一個參數都要清楚的說明他的資料型態,以及輸入參數在函數中所代表的變數名稱。
函數的使用(呼叫) • 透過函數的呼叫(function call),程式控制權跳到函數的起始點,執行完這個函數再交還原來呼叫的程式執行點。 7_02 7_03 7_04 7_05