《基本控制結(jié)構(gòu)》PPT課件.ppt
《《基本控制結(jié)構(gòu)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《基本控制結(jié)構(gòu)》PPT課件.ppt(86頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
《C語言程序設(shè)計(jì)》,第4章基本控制結(jié)構(gòu),順序結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)應(yīng)用舉例程序設(shè)計(jì),講課提綱,C語言語句類型:1.表達(dá)式語句在一個(gè)表達(dá)式的后面加一個(gè)分號(hào)“;”就構(gòu)成表達(dá)式語句。例如:i=i+2是表達(dá)式,而不是語句。i=i+2;是語句。注:任何表達(dá)式都可以加上分號(hào)而成為語句2.函數(shù)調(diào)用語句在函數(shù)調(diào)用表達(dá)式后面加分號(hào)就構(gòu)成了函數(shù)調(diào)用語句。例如:printf("thisisacstatement.");3.控制語句C語言中共有9種流程控制語句:if()….else、for()……4.空語句只有1個(gè)分號(hào)的語句稱為空語句。如:;即是一個(gè)空語句,它什么也不做。5.復(fù)合語句由一對(duì)大括弧“{}”把若干語句括起來構(gòu)成的語句稱為復(fù)合語句。復(fù)合語句在語法上相當(dāng)于1個(gè)單一語句,在一對(duì)花括號(hào)內(nèi)的語句數(shù)量不限。例如:{t=a;a=b;b=t;},4.1順序結(jié)構(gòu),順序結(jié)構(gòu)程序的一般算法描述,可用:變量初始化賦值語句輸入函數(shù)調(diào)用語句,注意各個(gè)語句的順序,例:從鍵盤輸入a、b的值,輸出交換以后的值。思路:交換變量a和b的值,不能只寫下面兩條賦值語句a=b;b=a;,?,正確的交換方法:c=a;a=b;b=c;,main(){inta,b,c;printf(“輸入a,b:");scanf("%d,%d",},程序運(yùn)行情況如下:輸入a,b:32,57?交換前:a=32b=57交換后:a=57b=32,例:已知三條邊a、b、c,求三角形面積。計(jì)算三角形面積的海倫公式:,其中:,設(shè)定義:整型變量a、b、c實(shí)型變量s、area,#include"math.h"main(){inta,b,c;floats,area;scanf("%d,%d,%d",},程序運(yùn)行情況如下:3,4,5?area=6.000,實(shí)際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理,例:輸入小寫字母,輸出大寫字母。,#includemain(){charch1,ch2;ch1=getchar();ch2=getchar();/*scanf(“%c%c”,*/},關(guān)系運(yùn)算符和表達(dá)式關(guān)系運(yùn)算符種類:=>!=結(jié)合方向:自左向右優(yōu)先級(jí)別:,例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==bc//a=(b>c),關(guān)系表達(dá)式的值:是邏輯值“真”或“假”,用1和0表示,4.2選擇結(jié)構(gòu),邏輯運(yùn)算符和表達(dá)式邏輯運(yùn)算符種類:!做為運(yùn)算結(jié)果時(shí):0表示“假”,1表示“真”。,4.2選擇結(jié)構(gòu),優(yōu)先級(jí):,結(jié)合方向:,(a>b)printf("Enterx},4.2.2if語句的三種形式,例2鍵盤輸入一個(gè)實(shí)數(shù),要求輸出它的絕對(duì)值。編寫程序如下:main(){doublex;scanf("%lf",},4.2.2if語句的三種形式,2、缺省else子句的if結(jié)構(gòu)(單分支結(jié)構(gòu))格式:if(表達(dá)式)語句或:if(表達(dá)式)語句執(zhí)行過程:,4.2.2if語句的三種形式,用不帶else的if結(jié)構(gòu)完成上兩題。1、輸入兩數(shù),輸出最大的。2、輸入任一數(shù),輸出其絕對(duì)值。,4.2.2if語句的三種形式,3、if…else…if階梯結(jié)構(gòu)(多分支結(jié)構(gòu))格式:if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3┇elseif(表達(dá)式n-1)語句n-1[else語句n],4.2.2if語句的三種形式,4.2.2if語句的三種形式,If后續(xù)語句,執(zhí)行過程:,例4編寫程序,根據(jù)輸入的學(xué)生成績,給出相應(yīng)的等級(jí)。假設(shè)等級(jí)劃分如下:90~100分等級(jí)為A;80~89分等級(jí)為B;70~79分等級(jí)為C;60~69分等級(jí)為D;0~59分等級(jí)為E。,4.2.2if語句的三種形式,main(){intscore;printf("Enterscore:");scanf("%d",},4.2.2if語句的三種形式,條件運(yùn)算符和條件表達(dá)式,條件表達(dá)式一般形式:expr1?expr2:expr3執(zhí)行過程:,條件運(yùn)算符(?:)條件運(yùn)算符由兩個(gè)運(yùn)算符組成,是C語言提供的唯一的三目運(yùn)算符。,,說明:(1)條件運(yùn)算符優(yōu)先于賦值運(yùn)算,但低于邏輯運(yùn)算、關(guān)系運(yùn)算和算術(shù)運(yùn)算。(2)條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蟆薄?如x?a∶bx>y?1∶1.5,條件運(yùn)算符和條件表達(dá)式,如ad?c:dad?c:d),(3)條件表達(dá)式中,表達(dá)式1的類型可以與表達(dá)式2和表達(dá)式3的類型不同。若不同取其中較高類型。,由條件表達(dá)式組成的賦值語句事實(shí)上就是一個(gè)if-else語句的簡寫。相當(dāng)于:if(a>b)max=a;elsemax=b;推廣開來,若在if-else語句中,當(dāng)表達(dá)式為“真”和“假”時(shí),都只執(zhí)行一個(gè)賦值語句且給同一個(gè)變量賦值時(shí),均可以用簡單的條件運(yùn)算符來處理。,條件運(yùn)算符和條件表達(dá)式,例輸入一字符,若是大寫字母,將其轉(zhuǎn)換成小寫字母;若不是則不轉(zhuǎn)換。然后輸出最后得到的字符。程序如下:main(){charch;scanf(“%c”,},由條件表達(dá)式構(gòu)成的選擇結(jié)構(gòu),,1、在if子句中嵌套具有else子句的if語句格式:if(表達(dá)式1)if(表達(dá)式2)語句1else語句2else語句3即:當(dāng)表達(dá)式1的值為非0時(shí),執(zhí)行內(nèi)嵌的if-else語句;當(dāng)表達(dá)式1的值為0時(shí),執(zhí)行語句3。,4.2.3if語句的嵌套,2、在if子句中嵌套不含else子句的if語句【格式】if(表達(dá)式1){if(表達(dá)式2)語句1}else語句2else的配對(duì)原則:與前面最近出現(xiàn)的未配對(duì)的if配對(duì)。,4.2.3if語句的嵌套,3.在else子句中嵌套if語句語句形式有如下兩種:(1)嵌套if語句帶有else:if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2else語句3,4.2.3if語句的嵌套,(2)嵌套if語句不帶else:if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2,4.2.3if語句的嵌套,試用if-else編程,實(shí)現(xiàn)如下賦值:,,例寫程序,判斷某一年是否閏年。閏年的條件是:①能被4整除,但不能被100整除的年份都是閏年,如1996年,2004年是閏年;或者:②能被400整除的年份是閏年。如1600年、2000年是閏年。不符合這兩個(gè)條件的年份不是閏年。,if語句應(yīng)用舉例,假設(shè)用整型變量year來代表年份,閏年條件概括為如下一個(gè)邏輯表達(dá)式:year%4==0scanf("%d",},if語句應(yīng)用舉例,返回,Switch語句是多分支選擇語句。用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)?!靖袷健縮witch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2┇case常量表達(dá)式n:語句n[default:語句n+1]},4.2.4switch語句,說明:(1)Switch是關(guān)鍵字,其后內(nèi)容用{}定界。(2)switch后的(表達(dá)式)可為任何類型,且case后的常量表達(dá)式的類型應(yīng)與表達(dá)式的類型相同。且各case間的值也應(yīng)不同。(3)case語句標(biāo)號(hào)后的語句可以是一條語句,也可是多條語句,可不用{}括起。(4)每個(gè)case僅是一個(gè)入口標(biāo)號(hào),并不確定執(zhí)行的終止點(diǎn)。如無break;語句則將一直執(zhí)行到switch的最后。注意break;語句的作用。default也是關(guān)鍵字,其可有可無,分析區(qū)別。(5)可多個(gè)case語句共用一組執(zhí)行語句。(6)switch語句可嵌套。,4.2.4switch語句,例用switch改寫上面的學(xué)生成績等級(jí)題。90~100分等級(jí)為A;80~89分等級(jí)為B;70~79分等級(jí)為C;60~69分等級(jí)為D;0~59分等級(jí)為E。試分析下列幾種情況的運(yùn)行結(jié)果:,4.2.4switch語句,1、main(){intscore,grade;printf("Pleaseinputscore:");scanf("%d",}},4.2.4switch語句,4.2.4switch語句,2、main(){intscore,grade;printf("Pleaseinputscore:");scanf("%d",}},3、所有case后均加break;語句case10:case9:printf("gradeA\n");break;case8:printf("gradeB\n");break;case7:printf("gradeC\n");break;case6:printf("gradeD\n");break;case5:case4:case3:case2:case1:case0:printf("gradeE\n");break;,4、case嵌套例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);},4.2.4switch語句,運(yùn)行結(jié)果:a=2,b=1,循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)之一C語言可實(shí)現(xiàn)循環(huán)的語句:用goto和if構(gòu)成循環(huán)(限制使用)while語句do-while語句for語句按一定條件重復(fù)執(zhí)行某段程序即是循環(huán)。,4.3循環(huán)結(jié)構(gòu),格式:while(表達(dá)式)循環(huán)體語句;說明:While后的表達(dá)式,可為任意合法的表達(dá)式循環(huán)體可為任意類型語句若循環(huán)體內(nèi)需要多個(gè)語句,應(yīng)用復(fù)合語句形式,4.3.1while循環(huán),執(zhí)行過程:,4.3.1while循環(huán),用法說明:當(dāng)型循環(huán)結(jié)構(gòu),先判斷表達(dá)式,后執(zhí)行循環(huán)體循環(huán)體內(nèi)必須改變循環(huán)條件,使其趨于結(jié)束循環(huán)體有可能一次也不執(zhí)行下列情況,退出while循環(huán)條件表達(dá)式不成立(為零)循環(huán)體內(nèi)遇break,return,goto無限循環(huán):while(1)循環(huán)體;此時(shí)應(yīng)與break;配合使用,使循環(huán)結(jié)束。,4.3.1while循環(huán),舉例:1、輸出一行星號(hào):*****(1)printf(“*****\n”);(2)用printf(“*”)時(shí),可用循環(huán)完成。main(){inti=1;/*i稱為循環(huán)變量,為其賦初值*/while(i<=5)/*i<5稱為循環(huán)條件,也稱循環(huán)終值*/{printf(“*”);i++;/*i++循環(huán)變量變化使循環(huán)}條件趨于假,使整個(gè)循環(huán)結(jié)束。*/printf(“\n”);},S=0,S=0i=1S=0+1=1i=1+1=2S=1+2=3i=2+1=3i=99+1=100S=4950+100=5050,i=1,i=1,i=2,S=1,i=2,S=3,2、用while循環(huán)求,3、輸出100以內(nèi)奇數(shù)。要求:每個(gè)數(shù)字占4列且每行輸出10個(gè)數(shù)。4、編程求:1*2*3*……*n,即n!(n的值由鍵盤輸入)或求:12+22+32+……+n25、求:100以內(nèi)偶數(shù)和或100以內(nèi)奇數(shù)和。6、求:或求:,7、利用while循環(huán)顯示ASCⅡ碼表中的可見字符。main()main(){unsignedcharch;{unsignedcharch;ch=32;inti=1;ch=32;while(ch)while(ch){printf("%c",ch);{printf(“%3c”,ch);ch++;i++;}if(i%20==0)printf(“\n”);}ch++;}},返回,do-while循環(huán)的格式:do循環(huán)體語句;while(表達(dá)式);說明:do和while聯(lián)合使用以do開始、while結(jié)束,“;”不可丟While后的表達(dá)式,可為任意合法的表達(dá)式循環(huán)體可為任意類型語句,4.3.2do-while循環(huán),do-while循環(huán)的執(zhí)行流程:,4.3.2do-while循環(huán),用法說明:先執(zhí)行循環(huán)體,后判斷表達(dá)式循環(huán)體內(nèi)必須改變循環(huán)條件,使其趨于結(jié)束至少執(zhí)行一次循環(huán)體do-while可轉(zhuǎn)化成while結(jié)構(gòu),4.3.2do-while循環(huán),執(zhí)行流程:,,,,表達(dá)式,,循環(huán)體,,,,,,假(0),真(非0),,,循環(huán)體,main(){inti,sum=0;i=1;do{sum+=i;i++;}while(i<=100);printf("%d",sum);},例用do-while循環(huán)求,4.3.2do-while循環(huán),例while和do-while循環(huán)的比較,main(){intsum=0,i;scanf("%d",},main(){intsum=0,i;scanf("%d",},返回,4.3.2do-while循環(huán),for循環(huán)的基本格式:,4.3.3for循環(huán),for([表達(dá)式1];[表達(dá)式2];[表達(dá)式3])循環(huán)體語句;,“靈活”——循環(huán)次數(shù)確定或不確定,執(zhí)行流程圖:,,例用for循環(huán)求,main(){inti,sum;sum=0;for(i=1;i<=100;i++)sum+=i;printf(“sum=%d",sum);},表達(dá)式1;while(表達(dá)式2){循環(huán)體語句;表達(dá)式3;},,for語句一般應(yīng)用形式:,for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){循環(huán)體語句;},說明:for語句中三個(gè)表達(dá)式類型任意,都可省略,但分號(hào)“;”不可省無限循環(huán):for(;;)for語句可以轉(zhuǎn)換成while結(jié)構(gòu)循環(huán)體語句可以是一條語句,也可以是復(fù)合語句。,4.3.3for循環(huán),分析如下程序:,main(){inti;for(i=0;i<10;i++)printf(“*”);},main(){inti=0;for(;i<10;i++)printf(“*”);},main(){inti;for(i=0;i<10;){printf(“*”);i++;}},main(){inti=0;for(;i<10;){printf(“*”);i++;}},main(){inti=0;for(;i<10;printf(“*”),i++);},三種循環(huán)可以互相代替循環(huán)變量初始化的位置控制循環(huán)變量改變,使循環(huán)趨于結(jié)束循環(huán)體都可以使用復(fù)合語句可以用break語句跳出循環(huán),用continue語句結(jié)束本次循環(huán),三種循環(huán)的比較說明,返回,循環(huán)的嵌套三種循環(huán)可互相嵌套,層數(shù)不限,設(shè)置不同循環(huán)變量外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán),但不能相互交叉嵌套循環(huán)的執(zhí)行流程,4.3.4循環(huán)的嵌套,(1)while(){…while(){…}},(2)do{…do{…}while();}while();,(3)for(;;){…for(;;){…}},(4)while(){…do{…}while();…},(5)for(;;){…while(){…}…},(6)do{…for(;;){…}}while();,二重循環(huán)的結(jié)構(gòu)(for語句)for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句1;for(表達(dá)式4;表達(dá)式5;表達(dá)式6)語句2;語句3;},1.概念在一個(gè)循環(huán)的循環(huán)體中,又包含另外的循環(huán)(多重循環(huán))。如:for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%d,%d\n",i,j);}},4.3.4循環(huán)的嵌套,2.雙重循環(huán)的執(zhí)行流程例、寫出下列程序的運(yùn)行結(jié)果。main(){inti,j;for(i=0;i<2;i++){for(j=0;j<3;j++){printf("%d,%d\n",i,j);}printf("*****\n");}},則運(yùn)行結(jié)果為:0,00,10,2*****1,01,11,2*****,例1使用雙層for循環(huán)打印下面的圖形,********************,main(){inti,j,k;for(i=0;i<=4;i++){for(k=1;k<=i;k++)printf("");for(j=0;j<=4;j++)printf("*");printf("\n");}},4.3.4循環(huán)的嵌套,2、輸出如下圖形:*******1a*********222bbb***********33333ccccc*************4444444ddddddd3、輸出九九乘法表,讀程序?qū)懡Y(jié)果:main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=2*i-1;j++)printf(“%d”,i);printf(“\n”);}},使用格式:break;使用說明:在循環(huán)語句和switch語句中,終止并跳出循環(huán)體或開關(guān)體break只能終止并跳出最近一層的結(jié)構(gòu)break不能用于循環(huán)語句和switch語句之外的任何其它語句之中,4.3.5break和continue,返回,break的流程控制:,4.3.5break和continue,例使用break語句跳出循環(huán)體,main(){inti;floatarea;for(i=1;i100)break;}printf("i=%d,area=%.2f\n",i,area);},運(yùn)行結(jié)果:i=6,area=113.04,4.3.5break和continue,例for(i=1;i3)break;printf("%d,",i);}則運(yùn)行結(jié)果為1,2,3,,4.3.5break和continue,使用格式:continue;使用說明:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷僅用于循環(huán)語句中,4.3.5break和continue,continue的流程控制:,4.3.5break和continue,如for(i=1;i<=5;i++){if(i<=2)continue;printf("%d,",i);}則運(yùn)行結(jié)果為3,4,5,,例輸出0~100之間的偶數(shù)main(){intx;for(x=0;x<=100;x++){if(x%2==1)printf("%d",x);}},continue語句后只終止本次循環(huán);break語句后將無條件地結(jié)束整個(gè)循環(huán),,返回,4.3.5break和continue,例1求Fibonacci數(shù)列:1,1,2,3,5,8,……的前40個(gè)數(shù),每行輸出5個(gè)數(shù)。,f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n≥3),112358132134558914423337761098715972584418167651094617711286574636875025121393196418317811514229832040134626921783093524578022887922746514930352241578173908816963245986102334155,位置號(hào):1234567……數(shù)列:11235813……,第4次循環(huán)(i=6):,第1次循環(huán)(i=3):,,,f1,f2,f,,+,+,+,第2次循環(huán)(i=4):,第3次循環(huán)(i=5):,+,+,第5次循環(huán)(i=7):,……,……,,,,,,main(){inti;longf1,f2,f;f1=1;f2=1;printf("\n%12ld%12ld",f1,f2);for(i=3;i=a},返回,例4百元百雞問題(100元買100只雞,公雞5元1只、母雞3元1只、小雞1元2只)#includemain(){intgj,mj,xj;for(gj=0;gj<=20;gj++)for(mj=0;mj<=33;mj++){xj=100-gj-mj;if(gj*5+mj*3+xj/2==100}},返回,例5有一組樓梯:一次邁5層最后余下3層,一次邁4層最后余下2層,一次邁3層最后余下1層,問該組樓梯層數(shù)?#includemain(){intn=1;while(!(n%5==3},返回,例6猜數(shù)游戲。計(jì)算機(jī)隨機(jī)產(chǎn)生一個(gè)100以內(nèi)的整數(shù),用戶猜數(shù),最多猜10次,每次給出大了或小了的提示。最后根據(jù)猜的次數(shù)給出相應(yīng)的評(píng)價(jià)。如果10次還沒有猜對(duì),則輸出“很遺憾,你已經(jīng)沒有機(jī)會(huì)了!游戲結(jié)束?。。 ?。,返回,#include#include#includemain(){inti,magic;intguess;/*人猜的數(shù)*/srand(time(NULL));/*產(chǎn)生隨機(jī)函數(shù)的種子*/magic=rand()%100;/*計(jì)算機(jī)產(chǎn)生隨機(jī)數(shù)*/for(i=1;imagic)printf("大了,再小點(diǎn)!\n");elseif(guess10)printf("\t很遺憾,你已經(jīng)沒有機(jī)會(huì)了!游戲結(jié)束!??!\n");},While循環(huán)是“當(dāng)型”循環(huán),先判斷后執(zhí)行do-while語句先執(zhí)行后判斷For語句使用靈活三種循環(huán)可以替換,可以嵌套注意:循環(huán)變量初值、循環(huán)條件、循環(huán)體的控制break語句用于結(jié)束整個(gè)循環(huán);continue語句用于結(jié)束本次循環(huán),小結(jié),返回,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基本控制結(jié)構(gòu) 基本 控制 結(jié)構(gòu) PPT 課件
鏈接地址:http://m.jqnhouse.com/p-12723272.html