




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三章流程控制程序的運行流程選擇結構語句循環結構語句2.1程序的運行圖2.2順序結構語句2.3選擇結構語句2.4循環結構語句2.5本章小結3.1程序的運行流程圖
流程圖是描述問題處理步驟的一種常用圖形工具,它是由一些圖框和流程線組成的。使用流程圖描述問題的處理步驟,形象直觀,便于閱讀。畫流程圖時必須按照功能選用相應的流程圖符號,常用的流程圖符號如圖3-1所示:
圖3-1流程圖符號3.1程序的運行流程圖
圖3-1所示的流程圖符號中,列舉了四個圖框、一個流程線和一個連接點,具體說明如下:起止框用于表示流程的開始或結束;輸入/輸出框用平行四邊形表示,在平行四邊形內可以寫明輸入或輸出的內容;判斷框用菱形表示,它的作用是對條件進行判斷,根據條件是否成立來決定如何執行后續的操作;處理框用矩形表示,它代表程序中的處理功能,如算術運算和賦值等;
3.1程序的運行流程圖流程線用實心單向箭頭或直線表示,可以連接不同位置的圖框,流程
線的標準流向是從左到右和從上到下,可用直線表示,非標準流向的流程線應使用箭頭指示方向;連接點用圓形表示,用于流程圖的延續;
學習畫流程圖可以有效的進行結構化程序設計,基本的流程結構有3種,即順序結構、選擇結構和循環結構。它們可以編寫各種復雜程序。在接下來的小節中,將分別講解這3種基本流程結構,而流程圖可以更好的理解和學習這些流程結構語句。
3.2順序結構語句程序中的所有語句都是從上到下逐條執行,這樣的程序結構稱為順序結構。順序結構是程序開發中最常見的一種結構,它可以包含多種語句,如變量的定義語句、輸入輸出語句、賦值語句等。下面來看一個順序結構的簡單例子,如例3-1所示:例3-1:
#include<stdio.h>voidmain(){ printf("我\n"); printf("愛\n"); printf("C\n"); printf("語\n"); printf("言\n");}3.2順序結構語句運行結果如圖3-2:
圖3-2運行結果
在例3-1的程序中,使用了5個printf()語句,從上往下依次輸出字符“我、愛、C、語、言”。從運行結果可以看出,程序是按照語句的先后順序依次執行的,這樣的程序就是一個順序結構的程序。
3.3選擇結構語句3.3.1if條件語句if語句if語句是指如果滿足某種條件,就進行相應的處理。在C語言中,if語句的具體語法格式如下:
上述語法中,判斷條件的值只能是0或非0,若判斷條件的值為0,按“假”處理,若判斷條件的值為非0,按“真”處理,執行{}中的語句。
if(判斷條件){
代碼塊}3.3選擇結構語句if語句的執行流程如圖3-3所示:
圖3-3if語句流程圖
3.3選擇結構語句通過一個案例來學習if語句的具體用法,如例3-2所示:例3-2:
#include<stdio.h>voidmain(){ //聲明變量x intx=5; //如果x的值小于10則執行if大括號中的代碼 if(x<10) { x++; } printf("x=%d\n",x);}3.3選擇結構語句運行結果如圖3-4:
圖3-4運行結果
在if語句的判斷條件中判斷x的值是否小于10,很明顯條件成立,因此{}中的語句會被執行,變量x的值將進行自增。從圖3-4的運行結果可以看出,x的值已由原來的5變成了6。
3.3選擇結構語句3.3.1if條件語句if…else語句
if…else語句是指如果滿足某種條件,就進行相應的處理,否則就進行另一種處理。if…else語句的具體語法格式如下:
if(判斷條件){
執行語句1 ……}else{
執行語句2 ……}3.3選擇結構語句if…else語句的執行流程如圖3-4所示:
圖3-3if…else語句流程圖
3.3選擇結構語句例3-3通過一個實現奇偶數判斷來演示if…else語句的具體用法:
例3-3:
#include<stdio.h>voidmain(){ intnum=19; if(num%2==0) { //判斷條件成立,num被2整除 printf("num是一個偶數\n"); } else { printf("num是一個奇數\n"); }}3.3選擇結構語句運行結果如圖3-5所示:
圖3-5運行結果
例3-3中,變量num的值為19,模以2的結果為1,不等于0,判斷條件不成立,因此程序會執行else后面{}中的語句,打印“num是一個奇數”。
3.3選擇結構語句3.3.1if條件語句if…elseif…else語句
if…elseif…else語句用于對多個條件進行判斷,從而進行多種不同的處理。if…elseif…else語句的具體語法格式如下:
if(判斷條件1){執行語句1}elseif(判斷條件2){執行語句2}……elseif(判斷條件n){執行語句n}else{執行語句n+1}3.3選擇結構語句if…elseif…else語句的執行流程如圖3-5所示:
圖3-5if…elseif…else語句流程圖
3.3選擇結構語句
通過一個對學生考試成績進行等級劃分的案例來演示if…elseif…else語句的用法,如例3-4所示:
運行結果如圖3-6:
圖3-6運行結果
例3-4中,定義了學生成績grade為75,由于它不滿足第一個判斷條件grade>=80,會執行第二個判斷條件grade>=70,條件成立,因此會打印“該成績的等級為良”。
3.3選擇結構語句例3-4:
#include<stdio.h>voidmain(){ intgrade=75;//定義學生成績 if(grade>=80) { //滿足條件grade>=80 printf("該成績的等級為優\n"); } elseif(grade>=70) { //不滿足條件grade>=80,但滿足條件grade>=70 printf("該成績的等級為良\n"); } elseif(grade>=60) { //不滿足條件grade>=70,但滿足條件grade>=60 printf("該成績的等級為中\n"); } else { //不滿足條件grade>=60 printf("該成績的等級為差\n"); }}
多學一招三元運算符:
在C語言中有一種特殊的運算叫做三元運算,它和if…else語句類似具體語法格式如下:
三元運算通常用于對某個變量進行賦值,當判斷條件成立時,運算結果為表達式1的值,否則結果為表達式2的值。如求x,y中最大值:
判斷條件?表達式1:表達式;intx=0;//if…else語句inty=1;intmax;if(x>y){ max=x;}else{ max=y;}//三元運算intx=0;inty=1;intmax;max=x>y?x:y;3.3選擇結構語句3.3.2switch條件語句switch條件語句也是一種很常用的選擇語句,和if條件語句不同,它只能針對某個表達式的值作出判斷,從而決定程序執行哪一段代碼。例如,在程序中使用數字1~7來表示星期一到星期天,如果想根據某個輸入的數字來輸出對應中文格式的星期值,可以通過下面的一段偽代碼來描述:
用于表示星期的數字
如果等于1,則輸出星期一
如果等于2,則輸出星期二
如果等于3,則輸出星期三
如果等于4,則輸出星期四
如果等于5,則輸出星期五
如果等于6,則輸出星期六
如果等于7,則輸出星期天
如果不是1~7,則輸出此數字為非法數字3.3選擇結構語句
對于上面一段偽代碼的描述,大家可能會立刻想到用剛學過的if…elseif…else語句來實現,但是由于判斷條件比較多,實現起來代碼過長,不便于閱讀。這時就可以使用C語言中的switch語句來實現這種需求。在switch語句中,switch關鍵字后面有一個表達式,case關鍵字后面有目標值,當表達式的值和某個目標值匹配時,會執行對應case下的語句。接下來通過一段偽代碼來描述switch語句的基本語法格式,具體如下:
3.3選擇結構語句switch語句格式:
switch(表達式){ case目標值1:
執行語句1 break; case目標值2:
執行語句2 break; …… case目標值n:
執行語句n break; default:
執行語句n+1 break;}3.3選擇結構語句例3-5,用switch語句實現星期輸出:
#include<stdio.h>voidmain(){intweek=5; switch(week) {case1: printf("星期一"); break; case2: printf("星期二"); break; case3: printf("星期三"); break; case4: printf("星期四"); break; case5: printf("星期五"); break; case6: printf("星期六"); break; case7: printf("星期天"); break; default: printf("輸入的數字不正確..."); break;}}3.3選擇結構語句例3-5輸出結果如圖3-7:
圖3-7運行結果
由于變量week的值為5,整個switch語句判斷的結果滿足第19行的條件,因此打印“星期五”。程序中的default語句用于處理和前面的case都不匹配的情況,將第4行代碼替換為intweek=8,再次運行程序,輸出結果如圖3-8所示:
圖3-8運行結果
3.4循環結構語句3.4.1while循環語句while循環語句和3.3小節講到的條件判斷語句有些相似,都是根據判斷條件來決定是否執行大括號內的執行語句。區別在于,while語句會反復地進行條件判斷,只要條件成立,{}內的執行語句就會一直執行下去,直到條件不成立,while循環才會結束。while循環語句的具體語法格式如下:
while(循環條件){
執行語句………}3.4循環結構語句while循環語句的執行流程圖如圖3-8所示:
圖3-8while循環流程圖
3.4循環結構語句
接下來通過while語句來實現1~4之間自然數的打印,如例3-6所示:例3-6:
#include<stdio.h>voidmain(){intx=1; //定義變量x,初始值為1while(x<=4)//循環條件{printf("x=%d\n",x);//條件成立,打印x的值x++;//x進行自增}}3.4循環結構語句例3-6運行結果如圖3-9所示:
圖3-9運行結果
例3-7中,x的初始值為1,在滿足循環條件x<=4的情況下,循環體會重復執行,打印x的值并讓x進行自增。因此,打印結果中x的值分別為1、2、3、4。需要注意的是,例3-7中的第8行代碼用于在每次循環時改變變量x的值,直到循環條件不成立,如果沒有這行代碼,整個循環會進入無限循環的狀態,永遠不會結束。
3.4循環結構語句3.4.2do…while循環語句do…while循環語句和while循環語句功能類似,二者的不同之處在于,while語句需要先判斷循環條件,然后根據判斷結果來決定是否執行大括號中的代碼,而do…while循環語句先要執行一次大括號內的代碼再判斷循環條件,其具體語法格式如下:
在上面的語法格式中,關鍵字do后面{}中的執行語句是循環體。do…while循環語句將循環條件放在了循環體的后面。這也就意味著,循環體會無條件執行一次,然后再根據循環條件來決定是否繼續執行。do{執行語句………}while(循環條件);3.4循環結構語句do…while循環語句的執行流程圖如圖3-10所示:
圖3-10do…while循環流程圖
3.4循環結構語句
接下來使用do…while循環語句將例3-6進行改寫,如例3-7所示:例3-7:
#include<stdio.h>voidmain(){intx=1; //定義變量x,初始值為1do{printf("x=%d\n",x);//條件成立,打印x的值x++;//x進行自增}while(x<=4);//循環條件}3.4循環結構語句例3-7運行結果如圖3-11所示:
圖3-11運行結果
例3-8和例3-7的運行結果一致,這說明do…while循環和while循環能實現同樣的功能。然而在程序運行過程中,這兩種語句還是有差別的。如果循環條件在循環語句開始時就不成立,那么while循環的循環體一次都不會執行,而do…while循環的循環體還是會執行一次。若將例中的循環條件x<=4改為x<1,例3-8會打印x=1,而例3-7什么也不會打印。
3.4循環結構語句3.4.3for循環語句
在前面的小節中分別講解了while循環和do…while循環。在程序開發中,還經常會使用另一種循環語句,即for循環,它通常用于循環次數已知的情況,其具體語法格式如下:
在上面的語法格式中,for關鍵字后面()中包括了初始化表達式、循環條件和操作表達式三部分內容,它們之間用“;”分隔,{}中的執行語句為循環體。for(初始化表達式;循環條件;操作表達式){
執行語句 ………}3.4循環結構語句
接下來分別用“①”表示初始化表達式、“②”表示循環條件、“③”表示操作表達式、“④”表示循環體,通過序號來具體分析for循環的執行流程。具體如下:
第一步,執行①;
第二步,執行②,如果判斷條件的值非0,執行第三步,如果判斷條件的值為0,執行第五步;
第三步,執行④;
第四步,執行③,然后繼續執行第二步;
第五步,退出循環;
for(①;②;③){
④}3.4循環結構語句
對自然數1~4求和,實現方式如例3-8所示:例3-8:
#include<stdio.h>voidmain(){intsum=0;//定義變量sum,用于記住累加的和for(inti=1;i<=4;i++)//i的值會在1~4之間變化{sum+=i;//實現sum與i的累加}printf("sum=%d\n",sum);//打印累加的和}3.4循環結構語句例3-8運行結果如圖3-12所示:
圖3-11運行結果
例3-8中,變量i的初始值為1,在判斷條件i<=4為真的情況下,會執行循環體sum+=i,執行完畢后,會執行操作表達式i++,i的值變為2,然后繼續進行條件判斷,開始下一次循環,直到i=5時,條件i<=4為假,結束循環,執行for循環后面的代碼,打印“sum=10”。
3.4循環結構語句
為了讓讀者能熟悉整個for循環的執行過程,現將例3-9運行期間每次循環中變量sum和i的值通過表3-1列舉出來:
表3-1sum和i在循環中的值
循環次數sumi第一次11第二次32第三次63第四次1043.4循環結構語句3.4.4循環嵌套
有時為了解決一個較為復雜的問題,需要在一個循環中再定義一個循環,這樣的方式被稱作循環嵌套。在C語言中,while、do…while、for循環語句都可以進行嵌套,并且它們之間也可以互相嵌套。for循環中嵌套是最常見的循環嵌套,其語法格式如下所示:
for(初始化表達式;循環條件;操作表達式){……for(初始化表達式;循環條件;操作表達式){
執行語句; ……} ……}3.4循環結構語句
接下來,通過for語句的循環嵌套來實現使用“*”打印直角三角形,如例3-10所示:
#include<stdio.h>voidmain(){inti,j;//定義兩個循環變量for(i=1;i<=9;i++)//外層循環{for(j=1;j<=i;j++)//內層循環{ printf("*"); //打印*} printf("\n"); //換行}}3.4循環結構語句例3-10運行結果如圖3-12所示:
圖3-12運行結果
3.4循環結構語句例3-10運行步驟解析:
第一步,在第4行代碼中定義了兩個循環變量i和j,其中i為外層循環變量,j為內層循環變量;
第二步,在第5行代碼中將i初始化為1,條件i<=9為真,程序將首次進入外層循環的循環體;
第三步,在第7行代碼中將j初始化為1,由于此時i的值為1,條件j<=i為真,程序將首次進入內層循環的循環體,打印一個“*”。
第四步,執行第7行代碼中內層循環的操作表達式j++,將j的值自增為2。
第五步,執行第7行代碼中的判斷條件j<=i,判斷結果為假,內層循環結束。執行后面的代碼,打印換行符。
3.4循環結構語句
第六步,執行第5行代碼中外層循環的操作表達式i++,將i的值自增為2。
第七步,執行第5行代碼中的判斷條件i<=9,判斷結果為真,程序將進入外層循環的循環體,繼續執行內層循環。
第八步,由于i的值為2,內層循環會執行兩次,即在第2行打印兩個“*”。在內層循環結束時會打印換行符。
第九步,以此類推,在第3行會打印3個“*”,逐行遞增,直到i的值為10時,外層循環的判斷條件i<=9結果為假,外層循環結束,整個程序也就結束了。
3.4循環結構語句3.4.5跳轉語句
跳轉語句用于實現循環執行過程中程序流程的跳轉,在C語言中,跳轉語句有break語句、goto語句和continue語句。break
在switch條件語句和循環語句中都可以使用break語句。當它出現在switch條件語句中時,作用是終止某個case并跳出switch結構。當它出現在循環語句中,作用是跳出當前循環語句,執行后面的代碼。接下來通過一個具體的案例來演示break語句如何跳出當前循環。
如例3-11所示:
3.4循環結構語句例3-11:
#include<stdio.h>voidmain(){intx=1;//定義變量x,初始值為1while(x<=4)//循環條件{printf("x=%d\n",x);//條件成立,打印x的值if(x==3){ break;} x++;//x進行自增}}3.4循環結構語句例3-11運行結果如圖3-13:
圖3-13運行結果
例3-11中,通過while循環打印x的值,當x的值為3時使用break語句跳出循環。因此打印結果中并沒有出現“x=4”。
3.4循環結構語句goto語句
當break語句出現在嵌套循環中的內層循環時,它只能跳出內層循環,如果想要跳出外層循環則需要對外層循環添加標記,然后使用goto語句。接下來通過一個案例來演示如何使用goto語句。
如例3-12所示:
3.4循環結構語句例3-12:
#include<stdio.h>voidmain(){inti,j;//定義兩個循環變量for(i=1;i<=9;i++)//外層循環{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 噴槍及類似器具行業技術創新與研發考核試卷
- 電池失效分析與故障排除考核試卷
- 描寫陽光的初三語文作文
- 電影制作與特效出版考核試卷
- 纖維板制造中的原材料質量檢驗與控制考核試卷
- 廈門市高三上學期期末語文卷作文
- 紙容器行業人才培養與技能培訓考核試卷
- 粘土原料化學成分分析考核試卷
- 急救藥品知識 2
- 7-7 數字系統設計實例1-數字乘法器系統級設計
- 干冰傳奇-科學實驗
- 關于藥店醫保整改報告范文六篇
- 灰砂磚合格證
- 戰地衛生及救護學習教案
- 2023年04月2023年北京外國語大學管理及教輔崗位招考聘用筆試題庫含答案解析
- 抗菌藥物臨床應用指導原則(2023年版)
- 產品終檢記錄表
- 大學生創業計劃書word文檔(三篇)
- 暖通空調鍋爐系統詳細介紹
- MT 194-1989煤礦用巷道支架試驗方法與型式檢驗規范
- 蝴蝶小知識及標本制作
評論
0/150
提交評論