C語言三種程序結(jié)構(gòu).ppt
《C語言三種程序結(jié)構(gòu).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語言三種程序結(jié)構(gòu).ppt(64頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
2020年4月25日星期六,游志宇,電子科技大學(xué)成都學(xué)院微電子系,,第四講,4.1順序結(jié)構(gòu),什么是順序結(jié)構(gòu)??,程序按語句的先后順序依次執(zhí)行的程序,,例子:輸入三角形的三邊長(zhǎng),求三角形面積。,假設(shè)三個(gè)邊長(zhǎng)a,b,c能構(gòu)成三角形。則面積公式為:area=s=(a+b+c)*0.5,#include#includevoidmain(){floata,b,c,s,area;scanf(“%f,%f,%f,},數(shù)學(xué)函數(shù)庫(kù)因?yàn)橐玫狡渲械膕qrt函數(shù),4.1順序結(jié)構(gòu),例從鍵盤輸入一個(gè)大寫字母,要求改用小寫字母輸出。#includevoidmain(){charcl,c2;cl=getchar();printf(″%c,%d\n″,cl,cl);c2=cl+32;printf(″%c,%d\n″,c2,c2);},運(yùn)行情況:A↙A,65a,97,4.1順序結(jié)構(gòu),,,,,,例求ax2+bx+c=0方程的根。a,b,c由鍵盤輸入,且設(shè)>0。眾所周知,一元二次方程式的根為x1=x2=可以將上面的分式分為兩項(xiàng):p=,q=x1=p+q,x2=p-q,4.1順序結(jié)構(gòu),#include#includevoidmain(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",},運(yùn)行情況:a=1,b=3,c=2↙x1=-1.00x2=-2.00,4.1順序結(jié)構(gòu),4.2選擇結(jié)構(gòu),選擇結(jié)構(gòu)是3種基本結(jié)構(gòu)之一。,選擇結(jié)構(gòu)的作用:根據(jù)所指定的條件是否滿足,決定從給定的操作中選擇其一執(zhí)行;在C語言中選擇結(jié)構(gòu)是由if語句和switch語句實(shí)現(xiàn)的。正確使用選擇結(jié)構(gòu),需要充分理解關(guān)系表達(dá)式和邏輯表達(dá)式。,4.2選擇結(jié)構(gòu),一、if語句,if語句是用來判斷所給條件是否滿足,然后根據(jù)結(jié)果決定執(zhí)行給出的操作。,if語句最常用的有三種基本形式,(1)if(表達(dá)式){語句}例:if(x>y)printf(“%d”,x);,4.2選擇結(jié)構(gòu),#includevoidmain(){floata,b,t;scanf(“%f,%f”,},4.2選擇結(jié)構(gòu),例輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大的順序輸出這兩個(gè)數(shù)。,例輸入三個(gè)數(shù)a,b,c,要求按由小到大的順序輸出。,用偽代碼寫的算法為:ifa>b將a和b對(duì)換,a中保存a、b中的小者;ifa>c將a和c對(duì)換,a中保存a、c中的小者;ifb>c將b和c對(duì)換,b中保存b、c中的小者;,4.2選擇結(jié)構(gòu),#includevoidmain(){floata,b,c,t;scanf(“%f,%f,%f”,},,4.2選擇結(jié)構(gòu),(2)if(表達(dá)式)語句1else語句2例:if(x>y)printf(“%d”,x);elseprintf(“%d”,y);,4.2選擇結(jié)構(gòu),if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3……elseif(表達(dá)式m)語句melse語句n,4.2選擇結(jié)構(gòu),例:if(number>500)cost=0.15;elseif(number>300)cost=0.10;elseif(number>100)cost=0.075;elseif(number>50)cost=0.05;elsecost=0;,4.2選擇結(jié)構(gòu),說明:(1).3種形式的if語句中,在if后面都有表達(dá)式,一般為邏輯表達(dá)式或關(guān)系表達(dá)式。注:在執(zhí)行if語句時(shí),先對(duì)表達(dá)式求解,然后根據(jù)表達(dá)式的值,執(zhí)行指定的語句。(2).第二,第三種形式的if語句中,在每個(gè)else前面有一個(gè)分號(hào),整個(gè)語句結(jié)束處有一個(gè)分號(hào)。(3).在if和else后面可以只含有一個(gè)內(nèi)嵌的操作語句,也可以由多個(gè)操作語句,此時(shí)用花括號(hào)將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。,4.2選擇結(jié)構(gòu),二.if語句的嵌套在if語句中又包含一個(gè)或多個(gè)if語句稱為if語句的嵌套。形式:if()if()語句1else語句2elseif()語句3else語句4,,,內(nèi)嵌if,4.2選擇結(jié)構(gòu),-1(x0)算法1:算法2:輸入x輸入x若x0,則y=1若x=0,則y=0輸出y若x>0,則y=1輸出y,,4.2選擇結(jié)構(gòu),#includevoidmain(){intx,y;scanf(“%d”,},4.2選擇結(jié)構(gòu),上例中的程序段有四個(gè),請(qǐng)判斷哪個(gè)是正確的?程序1:程序2:if(x=0)y=-1;if(x>0)elsey=1;if(x==0)elsey=0;y=0;elseelsey=1;y=-1;程序3:程序4:y=-1;y=0;if(x!=0)if(x>=0)if(x>0)if(x>0)y=1;y=1;elseelsey=0;y=-1;,正確,正確,錯(cuò)誤,錯(cuò)誤,4.2選擇結(jié)構(gòu),,,例寫程序,判斷某一年是否閏年。用下圖來表示判斷閏年的算法。,能被4整除,但不能被100整除。能被4整除,又能被400整除,#includevoidmain(){intyear,leap;scanf("%d",,,if(year%4?。剑埃﹍eap=0;elseif(year%100?。剑埃﹍eap=1;elseif(year%400?。剑埃﹍eap=0;elseleap=1;,//也可以用一個(gè)邏輯表達(dá)式包含所有的閏年條件,//將上述if語句用下面的if語句代替:if((year%4==0elseleap=0;,if(leap)printf("%dis",year);elseprintf("%disnot",year);printf("aleapyear.\n");},運(yùn)行情況:1989↙1989isnotaleapyear.2000↙2000isaleapyear.,三.Switch語句,4.2選擇結(jié)構(gòu),switch語句是多分支語句,用來實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。if語句只有兩個(gè)分支可共選擇。在實(shí)際問題中,我們經(jīng)常會(huì)遇到多分支選擇的問題,因此引入多分支語句switch。例如:學(xué)生成績(jī)分類(90分以上為‘a(chǎn)’等,80~89分為‘b’等,70~79分為‘c’等……);人口統(tǒng)計(jì)分類(按年齡分為老、中、青、少、兒童);工資統(tǒng)計(jì)分類;銀行存款分類……。當(dāng)然多分支選擇也可以用if語句嵌套來解決,但如果分支過多,則嵌套的if語句層數(shù)就多,程序冗長(zhǎng)而可讀性降低。,4.2選擇結(jié)構(gòu),switch語句的格式:switch(表達(dá)式){case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2…case常量表達(dá)式n:語句ndefault:語句n+1},說明:switch后面括弧內(nèi)的“表達(dá)式”,允許它為任何類型。(2)當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語句,若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。(3)每一個(gè)case的常量表達(dá)式的值必須互不相同,否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象(對(duì)表達(dá)式的同一個(gè)值,有兩種或多種執(zhí)行方案)。,4.2選擇結(jié)構(gòu),4.2選擇結(jié)構(gòu),(4)各個(gè)case和default的出現(xiàn)次序不影響執(zhí)行結(jié)果。例如,可以先出現(xiàn)“default:…”,再出現(xiàn)“caseXX:…”,然后是“caseAA:…”。(5)執(zhí)行完一個(gè)case后面的語句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行?!癱ase常量表達(dá)式”只是起語句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。,例運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。設(shè)每公里每噸貨物的基本運(yùn)費(fèi)為p,貨物重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f的計(jì)算公式為:f=p*w*s*(1-d)路程(s)越遠(yuǎn),每公里運(yùn)費(fèi)越低。假設(shè)標(biāo)準(zhǔn)如下:s<250km沒有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣,4.2選擇結(jié)構(gòu),分析折扣變化的規(guī)律性:折扣的“變化點(diǎn)”都是250的倍數(shù)(250,500,1000,2000,3000)利用這一特點(diǎn),可以在橫軸上加一種坐標(biāo)c,c的值為S/250,c代表250的倍數(shù)。當(dāng):c<1時(shí),表示S<250,無折d=0%;1≤c<2時(shí),表示250≤S<500,折扣d=2%;2≤c<4時(shí),表示500≤S<1000,折扣d=5%;4≤c<8時(shí),表示1000≤S<2000,折扣d=8%;8≤c<12時(shí),表示2000≤S<3000,折扣d=10%;c≥12時(shí),表示3000≤S,折扣d=15%。,4.2選擇結(jié)構(gòu),4.2選擇結(jié)構(gòu),據(jù)此寫出程序如下:#includevoidmain(){intc,S;floatp,w,d,f;printf(“請(qǐng)輸入基本運(yùn)費(fèi)P、貨物重量W及運(yùn)輸距離S:\n”)scanf("%f,%f,%d",i=1;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf("%d\n″,sum);},4.3.2用while語句實(shí)現(xiàn)循環(huán),while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。其一般形式:while(表達(dá)式){語句}當(dāng)表達(dá)式為非0值時(shí),執(zhí)行while語句中的內(nèi)嵌語句。其特點(diǎn)是:先判斷表達(dá)式,后執(zhí)行語句。,流程圖,例求1到100的和#includevoidmain(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf(″%d\n″,sum);},,說明:(1)循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn).(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。,運(yùn)行結(jié)果:5050,注意:循環(huán)體如果包含一個(gè)以上的語句,應(yīng)該用花括號(hào)括起來,以復(fù)合語句形式出現(xiàn)。如果不加花括號(hào),則while語句的范圍只到while后面的第一個(gè)分號(hào)處。在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句。如果無此語句,則i的值始終不改變,循環(huán)永不結(jié)束。(成為無限循環(huán)),4.3.3用do-while語句實(shí)現(xiàn)循環(huán),do-while語句的特點(diǎn):先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式:do{循環(huán)體語句}while(表達(dá)式);,執(zhí)行過程:先執(zhí)行一次指定的循環(huán)體語句,然后判別表達(dá)式,當(dāng)表達(dá)式的值為非零(“真”)時(shí),返回重新執(zhí)行循環(huán)體語句,如此反復(fù),直到表達(dá)式的值等于0為止,此時(shí)循環(huán)結(jié)束。,流程圖,#includevoidmain(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d\n″,sum);},運(yùn)行結(jié)果:5050,,例求1到100的和,從上面例題可以看到:對(duì)同一個(gè)問題可以用while語句處理,也可以用do-while語句處理。在一般情況下,用while語句和用do-while語句處理同一問題時(shí),若二者的循環(huán)體部分是一樣的,它們的結(jié)果也一樣。但是如果while后面的表達(dá)式一開始就為假(0值)時(shí),兩種循環(huán)的結(jié)果是不同的。,,,,例while和do-while循環(huán)的比較(1)#include(2)#includevoidmain()voidmain(){intsum=0,i;{intsum=0,i;scanf(“%d″,}},,運(yùn)行結(jié)果:1↙sum=55再運(yùn)行一次:11↙sum=0,運(yùn)行結(jié)果:1↙sum=55再運(yùn)行一次:11↙sum=11,,說明:當(dāng)while后面的表達(dá)式的第一次的值為“真”時(shí),兩種循環(huán)得到的結(jié)果相同。否則,二者結(jié)果不相同。,4.4用for語句實(shí)現(xiàn)循環(huán),C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句。其一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句},4.4用for語句實(shí)現(xiàn)循環(huán),For循環(huán)的執(zhí)行過程:(1)先求解表達(dá)式1。(2)求解表達(dá)式2,若其值為真(值為非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第(3)步。若為假(值為0),則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)求解表達(dá)式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句,for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句},,4.4用for語句實(shí)現(xiàn)循環(huán),,循環(huán)初始條件,,循環(huán)控制條件,,循環(huán)體,for語句等價(jià)于下列語句:表達(dá)式1;while(表達(dá)式2){語句;表達(dá)式3;},for語句最簡(jiǎn)單的應(yīng)用形式也就是最易理解的如下形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體;,例如:求1到100的和,它相當(dāng)于以下語句:i=1;while(i<=100){sum=sum+i;i++;},顯然,用for語句簡(jiǎn)單、方便。,for(i=1;i<=100;i++)sum=sum+i;,例:求(即求1!+2!+3!+….+20!),#includevoidmain(){floats=0,t=1;intn;for(n=1;n100時(shí),執(zhí)行break語句,提前結(jié)束循環(huán),即不再繼續(xù)執(zhí)行其余的幾次循環(huán)。,4.5break語句和continue語句,4.5.2continue語句作用為結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,接著進(jìn)行下一次是否執(zhí)行循環(huán)的判定.一般形式:continue;,4.5break語句和continue語句,continue語句和break語句的區(qū)別:continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。,while(表達(dá)式1){…if(表達(dá)式2)continue;…},流程圖,4.5break語句和continue語句,continue語句和break語句的區(qū)別:break語句則是結(jié)束整個(gè)循環(huán)過程,不再判斷執(zhí)行循環(huán)的條件是否成立。,while(表達(dá)式1){…if(表達(dá)式2)break;…},流程圖,例把100~200之間的不能被3整除的數(shù)輸出。#includevoidmain(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d″,n);}},,說明:當(dāng)n能被3整除時(shí),執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n不能被3整除時(shí)才執(zhí)行printf函數(shù)。,說明:例中循環(huán)體也可以改用一個(gè)if語句處理:if(n%3!=0)printf(“%d”,n);,題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如,153是一水仙花數(shù),因?yàn)椋?53=13+53+33。,程序分析:利用for循環(huán)控制100-999之間的數(shù),每個(gè)數(shù)分解出個(gè)位,十位,百位,#includevoidmain(){inti,j,k,n;printf(“‘’waterflower‘’numberis:\n");for(n=100;n<1000;n++){i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出個(gè)位*/if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf("%-5d",n);}}printf(“\n");},題目:有1、2、3、4共四個(gè)數(shù)字,能組成多少個(gè)互不相同且無重復(fù)數(shù)字的三位數(shù)?都是多少?,程序分析:可填在百位、十位、個(gè)位的數(shù)字都是1、2、3、4。組成所有的排列后再去掉不滿足條件的排列。,#includevoidmain(){inti,j,k;printf("\n");for(i=1;i<5;i++)//以下為三重循環(huán)for(j=1;j<5;j++)for(k=1;k<5;k++){/*確保i、j、k三位互不相同*/if(i!=k}},題目:猜數(shù)游戲(掌握程序結(jié)構(gòu)及隨機(jī)函數(shù)應(yīng)用)程序說明:游戲的開始由機(jī)器產(chǎn)生一個(gè)隨機(jī)數(shù)(1~100之間,用庫(kù)函數(shù)srand(),rand()),然后游戲者在程序的提示下猜數(shù),若輸入的數(shù)比這個(gè)數(shù)大,程序提示:YouranswerisHIGH,tryagain.,否則,程序提示:YouranswerisLOW,tryagain.,直到猜對(duì)為止。程序可實(shí)現(xiàn)連續(xù)猜數(shù),直到游戲者退出。voidsrand(unsignedseed)初始化隨機(jī)數(shù)發(fā)生器intrand()產(chǎn)生一個(gè)隨機(jī)數(shù)并返回這個(gè)數(shù)system("cls");//清屏DOS命令fflush(stdin);//清除內(nèi)存getch();//從控制臺(tái)獲取一個(gè)字符,不顯示在屏幕上,題目:百錢百雞(窮舉算法)我國(guó)古代數(shù)學(xué)家張丘鍵在《算經(jīng)》中出了一道題“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?注:窮舉法是最簡(jiǎn)單、最常見的一種程序設(shè)計(jì)方法。它充分利用了計(jì)算機(jī)處理的高速特性。使用窮舉法的關(guān)鍵是確定正確的窮舉范圍,即不能過分?jǐn)U大、也不能過分縮小窮舉的范圍。,題目:簡(jiǎn)單計(jì)算器請(qǐng)編寫一個(gè)程序計(jì)算表達(dá)式:data1opdata2的值。其中,op為運(yùn)算符+、-、*、/。,TheEnd,Thanks!,- 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文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語言 程序結(jié)構(gòu)
鏈接地址:http://www.hcyjhs8.com/p-11495294.html