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