C程序的流程設(shè)計(jì)_第1頁
C程序的流程設(shè)計(jì)_第2頁
C程序的流程設(shè)計(jì)_第3頁
C程序的流程設(shè)計(jì)_第4頁
C程序的流程設(shè)計(jì)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、教學(xué)的目的與要求掌握順序、選擇、循環(huán)三類程序流程限制語句,以及轉(zhuǎn)移語句,能夠正確使用它們編程.二、重點(diǎn)與難點(diǎn):if語句中的條件表達(dá)式,if語句中if-else 的匹配關(guān)系,if語句的嵌套;switch語句的限制流程, switch語句的嵌套;三種循環(huán)語句的格式和功能,循環(huán)嵌套的使用;轉(zhuǎn)移語句的使用.三、教學(xué)內(nèi)容第一節(jié)算法1、算法的概念為解決某一個(gè)問題而采取的方法和步驟,就稱為算法.2、算法的性質(zhì)有窮性:一個(gè)算法應(yīng)包含有限的操作步驟一個(gè)初始:此動(dòng)作序列只有一個(gè)初始動(dòng)作確定性:算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定性的,僅有一個(gè)后繼動(dòng)作.有一個(gè)或多個(gè)輸出:序列終止表示問題得到解答或問題沒有解答,沒有輸

2、出的算法是沒有意義的第二節(jié)選擇型程序設(shè)計(jì)1、if 語句的形式if (條件表達(dá)式)語句if (條件表達(dá)式)語句1 else 語句2注意:if語句中的條件表達(dá)式一般為邏輯表達(dá)式或關(guān)系表達(dá)式,但也可以是任意的數(shù)值類型(包括整型、實(shí)型、字符型、指針類型),例如以下語句也是合法的.i f( 'a' ) printf( "%d , ' a');在if語句中,分號是語句的結(jié)束標(biāo)志.在if和else后面可以只含一個(gè)內(nèi)嵌的操作語句,也可以有多個(gè)操作語句,此時(shí)用花括號將幾個(gè) 語句括起來成為一個(gè)復(fù)合語句.例1:以下不正確的if語句形式是().A) if(x>y&

3、;&x!=y);B) if(x=y) x+=y;C) if(x!=y) scanf( "%d ,&x) else scanf( "%d ,&y);D) if(x<y) x+;y+;答案:C詳解:scanf( "d ,&x)末尾應(yīng)加分號,由于分號是語句不可缺少的局部.例2:int x=10,y=20,z=30;以下語句執(zhí)行后 x,y,z 的值是().if(x>y)z=x;x=y;y=z;答案:x,y,z的值分別是:20 30 30詳解:在此語句中,條件 x>y為假,所以只執(zhí)行 x=y;y=z;兩條語句例3、以下不正確

4、的語句是()A) if(x>y);B) if(x=y)&&(x!=0) x+=y;C) if(x!=y) scanf("%d ,&x);D) if(x<y)x+;y+;答案:D詳解:分號是語句結(jié)束的標(biāo)志,y+的末尾無分號,所以y+不是合法的語句.2、if 的嵌套if (條件1)if (條件2)語句1else語句2else if (條件 3)語句3else語句4例4:以下程序的輸出結(jié)果是()main( )int a=100,x=10,y=20,ok1=5,ok2=0;if(x<y)if(y!=10)if (!ok1)a=1;elseif(ok2

5、) a=10;p rintf( "d n,a);答案:100詳解:把10、20、5、0分別給變量x、y、ok1、ok2賦值,執(zhí)行條件語句后a值沒有改變,所以 a值仍是原值100O3、switch 結(jié)構(gòu)switch語句是多分支選擇語句,其形式如下:switch(表達(dá)式)case常量表達(dá)式1:語句1case常量表達(dá)式2:語句2 default:語句 n+1注意:1、switch后面括弧內(nèi)的“表達(dá)式,可以是整型表達(dá)式或字符型表達(dá)式,也可以枚舉型數(shù)據(jù)2、當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語句,假設(shè)所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹

6、配的,就執(zhí)行 default后面的語句.3、每一個(gè)case的常量表達(dá)式的值必須互不相同,否那么就會(huì)出現(xiàn)互相矛盾的現(xiàn)象.4、執(zhí)行完一個(gè)case后面的語句后,流程限制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行,直到遇到 break語句或執(zhí)行完為止.5、default 可以放在case語句的后面,也可以放在 case語句的前面.例5:運(yùn)輸公司對用戶計(jì)算運(yùn)費(fèi),距離越遠(yuǎn),每公里運(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),編寫程序.公里數(shù)s與折扣率d 的標(biāo)準(zhǔn)如下:(此程序可用if else來完成,也可以用 switch來完成).s<25

7、0kmd=0250 Vs<500d=500 Vs<1000d=1000 s<2000d=2000 s<3000d=3000 sd=main() int s; float p,w,d,f;printf(“請輸入每公里每噸貨物的根本運(yùn)費(fèi));scanf( "% f" ,&p);printf(“請輸入貨物重);scanf( "% f" ,&w);printf("請輸入公里數(shù)");scanf( "% f" ,&s);switch(int)(s/250)case 0: d=0;

8、break;case 1: d=; break;case 2:case 3: d=; break;case 4:case 5:case 6:case 7: d=; break;case 8:case 9:case 10:case 11: d=; break;default: d=;)f=p*w*s(1-d);printf("根本運(yùn)費(fèi)是:f" ,f);詳解:1、多個(gè)case可共用一組執(zhí)行語句,必須寫成如下的形式:case 4:case 5:case 6:case 7: d=; break;case后面只能有一個(gè)常量,把上式改寫成case 4,5,6,7: d=; break;

9、的形式是錯(cuò)誤的.2、switch后面括弧內(nèi)的“表達(dá)式必須是整型表達(dá)式或字符型表達(dá)式,也可以是枚舉型數(shù)據(jù),對 于swith來說,關(guān)鍵是把原始數(shù)據(jù)轉(zhuǎn)換為易表達(dá)的形式.例6:請讀以程序?qū)懗龀绦虻妮敵鼋Y(jié)果.#include<stdio h>main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0: a+;break;case 1: b+;break;case 2:a+;b+;break;printf("a=%d,b=%d ,a,b);答案:a=2,b=1switch詳解:此程序是switch的嵌套結(jié)構(gòu),在此程序中 brea

10、k跳出內(nèi)層switch結(jié)構(gòu),接著執(zhí)行外層 的case 2后的語句.例7:寫出下面程序的運(yùn)行結(jié)果是()main()int i;for(i=1;i<=5;i+)switch(i%5)case 0:printf(“*);break;case 1:printf(“#");break;default:printf("n");case 2:printf(“&");答案:#&& &*詳解:default 可放在case語句的前面,也可以放在 case語句的后面,當(dāng)i%5不等于0,1,2 時(shí), 將執(zhí)行default后的語句print

11、f( "n ");執(zhí)行完成后沒有 break ,將繼續(xù)執(zhí)行case 2后的語句 printf("& );第三節(jié)循環(huán)型程序設(shè)計(jì)1、while 語句while語句用來實(shí)現(xiàn)“當(dāng)型循環(huán)結(jié)構(gòu),其一般形式如下:while(條件表達(dá)式)循環(huán)體語句例8:設(shè)有程序段:int k=10;while(k=0) k=k-1;循環(huán)體執(zhí)行()次.答案:0答案解析:在此程序的 while結(jié)構(gòu)中,條件表達(dá)式 k=0的結(jié)果永遠(yuǎn)為0即為假,所以循環(huán)執(zhí)行的次 數(shù)為0.例9:下面程序段的運(yùn)行結(jié)果是()x=y=0;while(x<15) y+,x+=+y;printf( "d,%d

12、 ,y,x);答案:8, 20例10、設(shè)有程序段t=0;while(printf( “*) t+;if(t>3) break;循環(huán)執(zhí)行()次答案:4答案解析:while結(jié)構(gòu)中的條件表達(dá)式printf( “*")的值為輸出數(shù)據(jù)的個(gè)數(shù),在此例中,printf( “*)的結(jié)果為1,即為真.2、do-while 語句do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立,其一般形式為:do循環(huán)體語句while( 條件表達(dá)式);例11、假設(shè)有如下語句int x=3;do printf( "%d n ,x -=2);while(-x);那么上面程序段輸出結(jié)果是().答

13、案:1例12、以下程序段循環(huán)執(zhí)行幾次.x=-1;do x=x*x; while(!x);答案:1例13、下面程序的運(yùn)行結(jié)果是()main()int y=10;doy-; while(-y);printf("d n,y -);答案:03、for語句C語言中的for語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句,其一般形式為:for(表達(dá)式1 ;表達(dá)式2 ;表達(dá)式2)語句說明:for語句一般形式中的“表達(dá)式1可以省略,此時(shí)應(yīng) for語句之前給循環(huán)變量賦初值.注意省略表達(dá)式1時(shí),其后的分號不能省略.如

14、果表達(dá)式2省略,即不判斷循環(huán)條件,循環(huán)無終止地進(jìn)行下去.表達(dá)式3也可以省略,但此時(shí)程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)正常結(jié)束.可以省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件,在這種情況下,完全等同于 while語句.3個(gè)表達(dá)式都可省略,如: for(;)語句,相當(dāng)于 while(1) 語句,即不設(shè)初值,不判斷條件(認(rèn) 為表達(dá)式2為真值),循環(huán)變量不增值.無終止地執(zhí)行循環(huán)體.表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也可以是與循環(huán)變量無關(guān)的其他表達(dá)式.for(sum=0;i<=100;i+) sum=sum+i;表達(dá)式一般是關(guān)系表達(dá)式(如 i<=100 )或邏輯表達(dá)式(如 a&

15、lt;b && x<y ),但也可以是數(shù)值表達(dá)式 或字符表達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體.例14、假設(shè)i為整型變量,那么以下循環(huán)執(zhí)行次數(shù)是().for( i=2 ;i!=0 ; )printf("%d ,i -);答案:2例15、以下不是無限循環(huán)的語句是()A) for(y=0,x=1;x>+y;x=i+) i=x;B for(;x+=i)C while(1)x+;D for(i=10;i-) sum+=i;答案:A例16、執(zhí)行語句for( i=1 ; i+<4 ;);后變量i的值是()答案:4例17、下面程序段的功能是計(jì)算1000!的末尾含有多

16、少個(gè)零.請?zhí)羁?for(k=0,i=5;i<=1000;i+=5)m=i;while( )k+;m=m/5;)答案:m%5!=04、break 與 continue在break語句可以使流程跳出 switch結(jié)構(gòu),繼續(xù)執(zhí)行 switch語句下面的一個(gè)語句.實(shí)際上,break語句還可以用來從循環(huán)體內(nèi)跳出循環(huán)體,即提升結(jié)束循環(huán),接著執(zhí)行循環(huán)下面的語句.break語句的一般形式為:break;continue語句只結(jié)束本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行.continue語句的一般形式為:continue;例18、以下程序的運(yùn)行結(jié)果是().main( ) int i,j,x=0;for(i=0;

17、i<2;i+)x+;for(j=0;j<=3;j+) if(j%2) continue; x+;x+;printf("x=%d n ,x);答案:例19、下面程序的運(yùn)行結(jié)果是()main( ) int k=0;char c= ' A';doswitch(c+)case 'A' :k+;break;case 'B' :k -;case 'C :k+=2;break;case ' D' :k=k%2;continue;case 'E' :k=k*10;break;default:k=k/3

18、;k+;while(c< ' G ); printf( "k=%d n ,k);答案:5、循環(huán)的嵌套一個(gè)循環(huán)體中又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套.內(nèi)嵌的循環(huán)中還可嵌套循環(huán),這就是 多層循環(huán).6、舉例:求和問題例 20、s=1+2+ .+100+100!例 21、s=1!+2!+例 22、e=1+1/1!+1/2!+1/3!+ 精確到10-6一,一,-6例 23、s=1-1/3!+1/5!-1/7!+ .精確到 10#includemain()(long t;double s;for(s=0,t=1,i=0;fabs(1/t)>=1e-6;i+) (t=(-

19、1)*t*i; s=s+1/t; printf( "lf,s);例 24、有一分?jǐn)?shù)序列:2/1 , 3/2 , 5/3 , 8/5 , 13/6 , 21/13 ,求出這個(gè)數(shù)列的前 20項(xiàng)之和main()(int s=0, f1=1,f2=2;for(I=1;I<=20;I+) (s=s+f2/f1;f2=f1+f2;f1=f2-f1; printf( "%d ,s);例25、打印九九表main( )int i,j;for(i=1;i<=9;i+)for(j=1;j<=9;j+)printf( "2d*%2d=%2d ,i,j,i*j);prin

20、tf( "n );例26、打印出以下圖形* * * * *main( )int i,j;for(i=1;i<=5;i+)(for(j=1;j<=5+fabs(i-3);j+)printf( " );for(j=1;j<=5-2*fabs(i-3);j+)printf();printf( " n );例27、打印出以下圖形* * * * *例28、兔子繁殖問題main( )(int i,f1,f2,f3;for(i=3;i<=12;i+)(f3=f1+f2;f1=f2;f2=f3;printf("d ,f3);例29、求最大公約數(shù)、

21、最小公倍數(shù).main( )int r,u,v,m,n;scanf( "%d,%d ,&m,&n);m=u;n=v;if(u<v) r=u;u=v;v=r;while(u!=0)r=u%v;u=v;v=r;printf("最大公約數(shù)是:d,最小公彳曾教是",v,m*n/v);例30、sn=a+aa+aaa+aaa,從鍵盤輸入a及n后,求 sn方法一:main()int n,a;long s;scnaf( "d%d ,&n,&a);for(i=1;i<=n;i+)s=s*10+i*a;printf("ld

22、,s);)方法二:main()int n,a;long s,t=0;scnaf( "d%d ,&n,&a);for(i=1;i<=n;i+)t=t*10+as=s+t;)printf("ld,s);)例31、給出一個(gè)不多于 5位的正整數(shù),要求求出它是幾位數(shù)分別打印出每一位數(shù)逆序打印此 數(shù)據(jù).main( )long a;int i=0;s=0;printf(“它的每一位數(shù):);While(a!=0) i=i+1;x=a%10;a=a/10;s=s*10+x;printf("%d ,x);)printf( “ n);printf( "它

23、是 位數(shù) n" ,i);printf("它的逆序是n" ,s);)例32、輸出1 100之間每位數(shù)的乘積大于每位數(shù)的和的數(shù)main() int n,k=1,s=0,m;for(n=1;n<=100;n+)k=1;s=0;m=n;while(m!=0)k=k+m%10;s=s+m%10;m=m/10;)%d ,n);)例33、猴子吃桃問題,猴子第一天摘下假設(shè)干桃子,當(dāng)即吃了一半,還不過癮又多吃了一個(gè),第二天又將剩下的桃子吃掉一半,又多吃了一個(gè),以后每天都吃前一天剩下的半多一個(gè),到第10天,再吃桃時(shí)只剩下一個(gè)桃子,求第一天共摘下多少了桃.main()int i,

24、s=1;for(i=9;i<=1;i-)s=2*s+1;printf("第一天共摘下 d個(gè)桃子,s);)例34、準(zhǔn)備客票:某鐵路線上共有10個(gè)車站,問需要準(zhǔn)備幾種車票.main()int i,j,s=0;for(I=1;I<=9;I+)for(j=I+1;j<=10;j+)s=s+1;printf("需要準(zhǔn)備 %T ,2*s);)例35、有1020個(gè)西瓜,第一天賣一半多兩個(gè),以后每天賣剩下的一半多兩個(gè),問幾天以后能賣完.main( ) int day=0,s=1020;while(s<=0)s=s/2-2; day+; printf( "%

25、d ,day);例36、從三個(gè)紅球、五個(gè)白球、六個(gè)黑球中任意取出八個(gè)球,且其中必須有白球,輸出所有可能的 方案.main()int red,white,black;for(white=1;white<=5;white+)for(red=0;red<=3;red+)for(black=0;black<=6;black+)if(white+red+black=8) printf( "%d 個(gè)紅球,個(gè)白球,個(gè)黑球,red,white,black);例37、二分迭代法二分迭代法的思想是:先取f(x)=0的兩個(gè)粗略解x1與x2.假設(shè)f(x1)與f(x2)符號相反,那么方程f(x)=0 在區(qū)間(x1,x2 )中至少有一個(gè)根.W

溫馨提示

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

最新文檔

評論

0/150

提交評論