三 C語言控制語句和函式

2021-10-01 19:29:49 字數 3496 閱讀 9401

在前面的兩節講的變數及其操作,還有列印操作,很簡單就寫出按順序執行的多條語句,但如果不需要按順序執行語句,或者需要迴圈執行一條語句,需要用到if、do...while、while、for、switch這些條件語句。

(1)if(判斷條件)語句塊

若判斷條件為真,則執行語句塊,否則不執行。語句塊可以是一條語句,也可以是用大括號括起來的一段語句塊,如:【if(2>1)printf("老婆,我愛你!");】

【if(1>3)】

(2)if(判斷條件1) 

else if(判斷條件2) 

else

這裡如果判斷條件1成立則執行語句塊1,然後就不繼續執行下面的else if的判斷,也不執行下面的else語句;如果判斷條件1不成立,則去執行判斷條件2,如果判斷條件2成立則執行語句塊2,如果判斷條件2不成立,則無條件執行語句塊3。

如:if(1>2) printf("老婆生氣了!");

else if(1>3) printf("老公生氣了!");

else printf("老婆和老公都很開心~~!\n");

(3)do

while(判斷條件);

這個控制語句,是先執行語句塊,然後再去判斷條件,若判斷條件成立則又返回去執行語句塊,如此迴圈,知道判斷條件為假時候才跳出迴圈體。

如:bool temp = false;

do}while(!temp);

先執行語句塊,然後判斷"!temp"是否為真,若為真表示沒結婚,又返回去執行語句塊,語句塊中,如果函式ifjiehun()返回值為真,則結婚了,temp被賦值為true,在接下來的判斷條件中"!temp"為假,已結婚,跳出迴圈。開始新生活~~。

(4)while(判斷條件)

若判斷條件為真,則執行語句塊,語句塊執行完畢後,又再次回到去執行判斷條件,若為真,又再次執行語句塊。。。直到判斷條件為假,才跳出迴圈,不再執行語句塊了。

如:while(1+2 > 4)

首先執行「1+2>4」的判斷條件,顯然判斷條件最終結果是false,所以一次都沒有執行列印語句塊。

(5)for(語句1; 語句2; 語句3)

這裡for語句有三部分,語句1表示初始執行語句,表示進入迴圈前,要初始化的工作或其他工作;語句2表示判斷條件,若判斷條件為真,則繼續執行語句塊,否則跳出迴圈;這裡語句3是在執行語句塊之後才執行的,在這裡不管語句塊執行了什麼語句,除非呼叫break;跳出for迴圈,否則在執行語句塊之後,必定會執行語句3!當執行完語句3之後,才執行判斷語句!

注:for語句中,語句1和語句3可以為空,即什麼都不寫,但語句2是必須存在程式語句。

如:for(int index = 0; index < 10; index++)

這裡for迴圈,「int index = 0」是語句1,表示用來初始化用於迴圈累計的index,「index > 10」是語句2,也就是判斷語句,若index小於10表示繼續執行語句塊,「index++」是語句3,用於執行語句塊之後要執行的語句;語句塊裡,除非執行了break;無條件跳出迴圈語句,continue的作用是跳過下在「continue;」後面所有語句,然後執行語句3「index++」,當執行完語句3之後,才執行判斷語句,若index<10為真,繼續執行下面的語句塊,為假就跳出迴圈。

(6)switch語句。

switch(檢驗數值)

break;

case 數值2:

break;

......

default:

}這裡的檢驗數值必須是整數或者能被轉換成整數的單個字元,不能是浮點數,不能預設強制轉換浮點數為整數,只能是整型變數,或者單個字元變數。

若檢驗數值和數值1相等,則執行語句塊1,然後才執行break;,這裡的break;只是跳出switch語句,可以把break放到語句塊1裡面,若沒有break語句,會繼續用檢驗數值和數值2比較,若相等則繼續執行語句塊2,一直執行到break,或者直到default,這裡的default表示預設,若檢驗數值和數值1/2/3等等這些數值都不匹配,在這個前提下才會預設執行default裡面的語句塊n。

這裡的default和語句塊n可以省略,也就是若沒有匹配的數值則會跳出switch。

注:這裡的數值1、數值2、和數值3...等等這些數值必定不能出現兩個相等的。

如:switch(a)

這裡,若a為1則列印1,若a為2,則會列印2,且在列印2之後沒有遇到break語句,所以繼續執行列印3語句,這裡不需要繼續判斷是否等於3,因為這裡列印3語句的執行條件預設是a值為2或者3。若a是4、5或者6,會執行列印4的語句,這裡數值之間是或者的意思,不是全部數值都要匹配的與的意思。

另外switch的case後面的數值可以用省略符號「...」表示乙個具體的範圍空間。

如:switch(a)

}這裡表示若a的數值處於1到10這個區間,就會執行語句塊,其意思和的if語句相同即【if(a>=1 || a<=10) 】

(7)在程式語言中,函式本質上是用你來封裝語句塊的,主要是把那些程式設計師看起來是重複性的**都應該放到函式裡,然後在多次使用這些重複性**時候,只需要呼叫該函式就可以了,簡單有效!

在c語言裡,函式名最終會編譯成乙個記憶體位址,這個記憶體位址指向的是一段**段,當程式執行到函式入口時候,就會通過函式位址跳轉到對應的**段繼續執行,而當**段中執行完畢後,也就是函式執行完畢,又會跳回到原來的函式入口,繼續執行下一條語句。

函式原型宣告:【返回值型別 函式名(引數列表);】

函式定義:

返回型別 函式名(引數列表)

返回值型別:是函式呼叫完畢之後必須返回該型別的值,除非在函式裡呼叫了exit()退出程式函式。

引數列表:都是傳入函式的引數,表明要執行該函式,必須傳入什麼樣的什麼型別的引數,其形式如同定義變數:【int a,char* ptr】定義每個引數,用逗號隔開。這裡的引數列表都是形參,表示形式上的引數,只是形式上,但並沒有真實的值,也只有在呼叫這個函式時候,才會傳入實參,即實際引數,具有實際的值。

如:【void myfunc(int a,char* ptr)】定義乙個沒有返回值(不需要返回值),形參有整型變數a和字串指標ptr的函式,定義了形參,那麼在語句塊裡就能直接使用形參的變數,但形參的值並不確定,在呼叫時候或許傳入的是1,又或許傳入的是2。

在c語言裡,程式的啟動函式是main函式,程式一啟動,必須呼叫main函式。

(8)返回值和臨時變數

在c語言中,函式返回值一般都是返回乙個臨時變數,如

int myfunc()

int myint = myfunc();

這裡myfunc函式返回100賦值給變數myint,但是這個100不會直接被返回用於myint的初始化,而是在return 100;的同時,編譯器會新建乙個臨時的int型別變數,然後將100賦值給這個臨時變數,之後才賦值給myint,然後進行函式堆疊的清空,也就是銷毀執行函式時候所分配的記憶體。

注:函式呼叫,必然是先獲得其返回值,然後才會銷毀函式堆疊。

(9)可變成引數

引數個數不確定的函式叫變長引數函式,需要使用特殊的方法獲取這種函式的形參。

如:void print(int ge_shu, ...);

第乙個引數是後面「...」省略的引數的個數,至於後面省略引數的型別,需要通過函式獲得。

C語言 控制語句

一 順序語句 二 分支語句 if dse switch 1 if else 語句的使用 格式 if 表示式 語句塊1 else 語句塊2 形式 在 else 中還可以階梯式的輸入 if else 這種形式,在實際模型中,可呈現出優先順序的形式。同時,在if 的語句塊1中國可在巢狀 if else 且...

流程語句和控制語句(三)

順序語句 程式至上而下執行,一條語句執行完後據需執行下一條語句,中間沒有判斷和跳轉,直到程式結束。選擇結構 if語句 第一種 if boolean表示式 第二種 if boolean表示式 else 第三種 if boolean表示式 else if boolean表示式 else switch語句...

C語言 控制語句 迴圈

今天,學習了c primer plus的第六章。本章的主題是程式控制,對while迴圈進行了更加詳盡的講解,並講解了for迴圈 do while迴圈。同時,對一些運算子 陣列及帶返回值的函式也做了介紹。現將知識點總結如下 while expression statementfor 表示式1 表示式2...