9月26日-高階語言程式設計-課程內容(5)
9月26日第四次上課記錄
1,程式設計補充
程式設計錯誤:
- 語法錯誤
- 執行錯誤
- 邏輯錯誤
除錯程式:
- 單步追蹤:除錯工具逐句執行語句檢視結果。
- 進入或跳過一個函式:可進入一個函式進行單步追蹤或跳過函式。
- 設定斷點:可在特定位置設定斷點暫停程式。
- 顯示變數值:除錯工具可顯示一些選定的變數的值,使用單步追蹤時這些值會不斷變化方便查詢bug。
- 顯示呼叫棧:除錯工具跟蹤函式條用並列出執行中的函式。
- 修改變數:除錯工具可以在除錯過程中修改變數。
2,邏輯運算
運算子 | 作用 | 運算數 | 結合性 | 優先順序 |
---|---|---|---|---|
&& | 邏輯與 | 雙目 | 左結合 | 5 |
ll | 邏輯或 | 雙目 | 左結合 | 4 |
! | 邏輯非 | 單目 | 右結合 | 14 |
C語言不能進行兩個以上的判斷,要用邏輯運算子來進行。
C語言中的短路原則:條件判斷從左到右,遇到能確定結果的條件,就不再繼續判斷。
3,選擇結構
- 單分支if
語法格式:
if(表示式)
語句;
如果表示式成立(非0值),則執行語句。
- 雙分支if
語法格式:
if(表示式)
語句1;
else
語句2;
- 巢狀if
1)
if(條件1)
if(條件2)
語句1;
else
語句2;
else
語句3;
2)
if(條件1)
語句1;
else if(條件2)
else if(條件3)
…
使用多個if和else時,else會匹配上一個未配對的if。 - switch語句
語法格式:
switch(表示式)
{
case 常量1:語句或語句組1;
case 常量2:語句或語句組2;
…
case 常亮n:語句或語句組n;
default:語句或語句組n+1;
}
先判斷表示式,如果有符合的,就從第一個case開始往下執行全部,如果沒有就執行default。
- 條件運算子
語法結構:
表示式1?表示式2:表示式3;
4,隨機數
rand函式會產生一個隨機數,如果種子不變,產生的隨機數就一樣。
srand函式可以用於改變隨機數種子:void srand(unsigned int seed)
為了保證每次的種子不同,可以使用系統時間作為隨機數的種子。time(0)包括在標頭檔案time.h中,rand和srand包含在標頭檔案stdlib.h中。
5,迴圈結構
- while語句
語法結構:
while(表示式)
語句;
當表示式中為真時,執行後續語句,再次進入迴圈,如果表示式中為假,則結束迴圈。
迴圈體只能包含一條語句,當迴圈體需要更多的時候使用複合語句。
如果條件一直為真,會出現死迴圈。
while先判斷表示式,再執行語句,所以語句可能一次都不被執行。
- do-while語句
語法結構:
do
{
語句;
}
while(表示式);
需要多條語句時,要用複合語句。
do-while先執行再判斷,所以至少會執行一次
- for語句
語法結構:
for(進行初始化;控制迴圈條件;執行完後計算)
語句;
需要多條語句時,要用複合語句。
for語句時先判斷再執行,所以可能一次也不執行。
-
迴圈語句使用要點:
1)如果迴圈次數已經知道,使用for。
2)迴圈次數不確定使用while。
3)如果需要檢查迴圈前執行一次,用do-while。 -
改變迴圈流程的方法
1)break語句
break語句可以用於跳出switch,while,do-while和for。它用於結束直接包含它的最內層的迴圈語句。
2)continue語句
continue語句可以用於結束switch,while,do-while和for的本次執行,轉去再次判定迴圈條件 -
goto語句
goto也稱為無條件轉移語句,語法格式
goto 語句標號;
語句標號的作用類似識別符號,標號後加冒號,用於標識語句。
因為goto容易造成程式混亂,所以一般不推薦使用。
6,陣列
陣列是一組有序資料的集合,這組陣列擁有同一個名字,即陣列名。陣列中的一個數據稱為陣列元素,每個元素都有一個唯一的編號,稱為下標。每個陣列元素的資料型別都是相同的,不能錯誤擺放。
語法格式
資料型別說明符 陣列名[整型表示式]
1)資料型別說明符制定了陣列中存放資料的資料型別。
2)陣列名的命名規則和變數一樣。
3)陣列名後面方括號中說明了可以存放的元素個數。
4)資料存放超出空間並不會報警,但是會對儲存造成影響。這種行為稱為越界,C不能識別。
引用陣列時,語法格式
陣列名[下標]
1)下標如果是浮點數系統會去掉小數部分。
2)下標範圍要合理,超出稱為下標越界。
3)一個數組元素的使用方式與同類型的變數一樣。
陣列的初始化,語法格式
int a [10]={1,2,3,4,5,6,7,8,9,10}
上面是給全部元素賦值,也可以只輸入一部分,給前幾個賦值。對陣列初始化的時候,可以不用寫下標,系統會根據所需要的元素自動分配空間