第4章 程序流程控制_第1頁
第4章 程序流程控制_第2頁
第4章 程序流程控制_第3頁
第4章 程序流程控制_第4頁
第4章 程序流程控制_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第4章程序流程控制算法C語言的基本語句順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)14.1算法數(shù)據(jù)結(jié)構(gòu)+算法=程序數(shù)據(jù)結(jié)構(gòu)+算法+程序設(shè)計方法+語言環(huán)境=程序4.1.1算法的概念算法的五個特性:有窮性、確定性、可行性、輸入、輸出。算法設(shè)計注意:正確性、可讀性、健壯性、高效性。24.1.2算法的組成要素1、操作:

包括算術(shù)運算、邏輯運算、關(guān)系運算、函數(shù)運算、位運算、I/O操作等。2、控制結(jié)構(gòu):

控制算法中各個操作的執(zhí)行順序。三種基本控制結(jié)構(gòu)是:

順序結(jié)構(gòu)(順序執(zhí)行)選擇結(jié)構(gòu)(比較判斷)循環(huán)結(jié)構(gòu)或稱重復(fù)結(jié)構(gòu)(反復(fù)執(zhí)行)34.1.3算法的描述自然語言流程圖N-S圖PAD圖偽代碼語句2語句1語句1語句2判斷YN語句43.復(fù)合語句一般形式:{[內(nèi)部數(shù)據(jù)說明部分;]執(zhí)行語句部分;}2.表達式語句運算符表達式語句:計算表達式的值。函數(shù)調(diào)用表達式語句:調(diào)用函數(shù)。4.2C語言的基本語句聲明語句用于聲明合法標識符(變量名或函數(shù)名),可在函數(shù)體或復(fù)合語句中使用,且須寫在其他語句前面。例:x=(a+3)*b;a=sin(x);y=x++;例如:inta,b;doublex,y,z;5空語句只有分號組成的語句,什么也不執(zhí)行。流程控制語句條件判斷語句if語句、switch語句。循環(huán)執(zhí)行語句do…while語句、while語句、for語句。流程轉(zhuǎn)向語句break語句、goto語句、continue、語句return語句。如:main(){inta=1,b=4;…..{intb;b=3;printf(“%d\n”,a+b);}printf(“%d”,a+b);}

輸出:45說明:

}后不加分號。語法上和單一語句相同。復(fù)合語句可嵌套。復(fù)合語句中的變量只在本部分有效。64.3順序結(jié)構(gòu)順序結(jié)構(gòu)程序由簡單語句組成,程序流程如圖3.1所示,語句按書寫順序執(zhí)行,先執(zhí)行A,再執(zhí)行B。BA順序結(jié)構(gòu)執(zhí)行流程例:main(){inta,b=4;a=b*2;printf(“%d”,a);}74.4選擇結(jié)構(gòu)4.4.1if…else語句結(jié)構(gòu)形式:if(表達式)語句1;else語句2;執(zhí)行過程:先判斷表達式,成立就執(zhí)行語句1,否則執(zhí)行語句2。例:if(x>y)max=x;elsemax=y;注意:

if…else中表達式可為關(guān)系表達式、邏輯表達式、數(shù)值表達式。

if…else中語句1、語句2可以為簡單語句或復(fù)合語句。

if…else中分號的使用位置。表達式語句1真假語句2雙分支選擇84.4.2if語句結(jié)構(gòu)形式:if(表達式)語句;執(zhí)行過程:先判斷表達式,若成立則執(zhí)行語句,否則跳過該語句而直接執(zhí)行該結(jié)構(gòu)后的下一條語句。注意:此處,不管分支語句是否執(zhí)行,if后的表達式一定執(zhí)行。表達式語句真假單分支選擇例:main(){inta=1,b=3,max;max=a;

if(a<b)max=b;printf(“%d”,max);}94.4.3elseif語句一般形式:if(表達式1)語句1;elseif(表達式2)語句2;…elseif(表達式n)語句n;else語句n+1;執(zhí)行過程:執(zhí)行時先判斷表達式1的值,非0就執(zhí)行下面的語句,若為0就執(zhí)行下一個判斷,一直這樣做下去直到得出最后結(jié)果。

表達式1真語句1假表達式2表達式3語句4語句3語句2真真假假多分支選擇例:if(score>=90)grade=‘A’;elseif(score>=80)grade=‘B’;elseif(score>=70)grade=‘C’;elseif(score>=60)grade=‘D’;elsegrade=‘E’;104.4.4if語句的嵌套當(dāng)if(表達式)或else后面的語句本身又是一個if語句結(jié)構(gòu)時,就形成了if語句的嵌套結(jié)構(gòu)。一般形式:if(表達式1)if(表達式1_2)語句1_1else語句1_2elseif(表達式2_1)語句2_1else語句2_2注意:當(dāng)程序中存在嵌套的if….else結(jié)構(gòu)時,每個else都與其前面最近的if配對,由內(nèi)層向外層逐步處理。11if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4內(nèi)嵌if內(nèi)嵌ifif(expr1)if(expr2)statement1elsestatement2內(nèi)嵌ifif(expr1){if(expr2)statement1}elsestatement3

內(nèi)嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4內(nèi)嵌if例如:12if(z>y)if(z>x)max=z;elseif(y>x)max=y;if(z>y){if(z>x)max=z;}else{if(y>x)max=y;}

二者有何區(qū)別?13#include“stdio.h”main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");elseprintf("a!=b\n");}例輸入兩個數(shù)并判斷兩數(shù)是否相等運行:Enterintegera:12

Enterintegerb:12a==b

運行:Enterintegera:12

Enterintegerb:9a!=b

14#include“stdio.h”main(){charc;c=getchar();if(c<0x20)printf(“Thisisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf(“Thisisadigit\n");elseif(c>='A'&&c<='Z')printf(“Thisisacapitalletter\n");elseif(c>='a'&&c<='z')printf(“Thisisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");}例判斷輸入字符種類運行:Enteracharacter:8Thecharacterisadigit運行:Enteracharacter:DThecharacterisacapitalletter運行:Enteracharacter:hThecharacterisalowerletter運行:Enteracharacter:#Thecharacterisothercharacter15例:輸入兩數(shù)并判斷其大小關(guān)系#include“stdio.h”main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");}運行:Enterintegerx,y:12,23X<YEnterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Y16例考慮下面程序輸出結(jié)果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;elsex=-1;printf(“%d”,x);}結(jié)果:-1174.4.5switch語句結(jié)構(gòu)一般形式:執(zhí)行過程:switch(表達式){caseE1:語句組1;caseE2:語句組2;…….caseEn:語句組n;[default:語句組;]}switch表達式語句組1語句組2語句組n語句組…...E1E2Endefaultcase

例:switch(i)

{case1:printf(“A\n”);break;

case2:printf(“B\n”);break;

case3:printf(“C\n”);break;case4:printf(“D\n”);break;

default:printf(“E\n”);

}18說明:E1,E2,…En是常量表達式,且值必須互不相同每個分支必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..19例switch(score){case5:printf(“Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);}運行結(jié)果:score為5時,輸出:Verygood!Good!Pass!Fail!dataerror!20例main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}運行結(jié)果:a=2,b=1214.5循環(huán)結(jié)構(gòu)循環(huán)控制:記數(shù)法和標志法。4.5.1窮舉與迭代算法窮舉問題所涉及的情況。答案需要滿足的條件。迭代確定迭代變量。建立迭代關(guān)系式。對迭代工程進行控制。224.5.2while語句一般格式:while(循環(huán)條件表達式)循環(huán)體語句;執(zhí)行過程:先計算循環(huán)條件表達式的值,若為真則執(zhí)行循環(huán)體語句,重復(fù)上述過程,直到循環(huán)條件表達式的值為假時,循環(huán)結(jié)束。注意:先判斷,后執(zhí)行。循環(huán)條件表達式只要其值非0,就可以執(zhí)行循環(huán)體。循環(huán)體由多個語句組成時,須用花括號形成復(fù)合語句。為使循環(huán)最終能結(jié)束,每執(zhí)行一次循環(huán)體,循環(huán)條件表達式的值應(yīng)趨于0變化。如果表達式的值一開始就為0,則語句一次也會被不執(zhí)行。#include“stdio.h”main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}234.5.3do…while語句一般格式:do{循環(huán)體語句;}while(循環(huán)條件表達式);執(zhí)行流程:先執(zhí)行循環(huán)體語句,然后對循環(huán)條件表達式進行計算,若其值為真則重復(fù)上述過程,直到循環(huán)條件表達式的值為假時,循環(huán)結(jié)束。注意:如果表達式的值一開始就為0,也會執(zhí)行一次語句,此處異于while語句。循環(huán)控制變量值在循環(huán)體內(nèi)必須有所改變。#include“stdio.h”main(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);}244.5.4for語句一般形式:for([表達式1];[表達式2];[表達式3])

循環(huán)體語句;其中:表達式1常用于給循環(huán)變量賦初值,可選。表達式2是循環(huán)條件,可選。表達式3常用來修改循環(huán)變量的值,可選。expr2循環(huán)體假(0)真(非0)forexpr1expr3說明:

for語句中三個表達式的類型任意,自身都可省略,但

分號不可省。無限循環(huán):for(;;)for語句可以轉(zhuǎn)換成while結(jié)構(gòu)。表達式1;while(表達式2){

循環(huán)體語句; 表達式3;}#include“stdio.h”main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}25例:main(){inti,sum=0;

for(i=1;i<=100;i++)sum+=i;printf(“%d”,sum);}例:main(){inti=1,sum=0;

for(;i<=100;i++)sum+=i;printf(“%d”,sum);}例:main(){inti=1,sum=0;

for(;i<=100;sum+=i++);printf(“%d”,sum);}264.5.5流程轉(zhuǎn)向語句功能:改變程序的結(jié)構(gòu),使程序從其所在的位置轉(zhuǎn)向另一處。1.break語句語句形式:break;作用:在switch分支結(jié)構(gòu)中,可以使流程跳出switch分支結(jié)構(gòu);在循環(huán)結(jié)構(gòu)中,使流程跳出當(dāng)前的循環(huán)層,轉(zhuǎn)向執(zhí)行該循環(huán)結(jié)構(gòu)后面的語句。說明:break只能終止并跳出最近一層的結(jié)構(gòu)。break不能用于循環(huán)語句和switch語句之外的任何其它語句之中。27例:main()

{

inti=1,sum=0:

for(;;)

{sum+=i;i++;if(i>100)break;/*如果i>100,則退出循環(huán)*/

}

printf(“sum=%d”,sum);

}

本程序中,當(dāng)i>100時,強行終止for循環(huán),繼續(xù)執(zhí)行for語句下一條語句。282.continue語句語句形式:continue;作用:使本次循環(huán)提前結(jié)束,即跳過循環(huán)體中尚未執(zhí)行的循環(huán)體語句,但不結(jié)束整個循環(huán),而繼續(xù)進行下一次循環(huán)的條件判別以決定是否進入下一次循環(huán)。說明:僅用于循環(huán)語句中。3.函數(shù)的調(diào)用和返回作用:使程序流程轉(zhuǎn)向被調(diào)用函數(shù),而函數(shù)返回語句return的功能是使流程從被調(diào)用函數(shù)返回主調(diào)函數(shù)。29例:顯示輸入的字符,如果按的是Esc鍵,則退出循環(huán);如果按的是Enter鍵,則不做任何處理,繼續(xù)輸入下一個字符。#include<stdio.h>main(){charch;for(;;){ch=getchar();/*字符輸入函數(shù)*/if(ch==27)/*Esc鍵的ACSII碼為27*/

break;/*退出循環(huán)*/if(ch==13)

continue;/*按的是Enter鍵,跳過字符輸出語句*/putchar(ch);/*顯示輸入的字符*/}getchar();/*讓程序停一下,拍任意鍵繼續(xù)*/}304.goto語句goto語句被稱為無條件轉(zhuǎn)移語句,由兩部分組成:

goto標號;和標號:語句其中:標號必須是一個合法的標識符,把它放在一個語句前面,后跟一個冒號,表示程序流程將轉(zhuǎn)向此語句。注意:goto語句和break語句相比最大的好處是可以一下跳出多重循環(huán),但不能從外面跳入循環(huán)體內(nèi)。goto語句應(yīng)有限制地進行使用。main(){intsum=0,n=1;loop:if(n<

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論