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

下載本文檔

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

文檔簡(jiǎn)介

C程序的流程設(shè)計(jì)C程序的流程設(shè)計(jì)一、教學(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)容1、算法的概念為解決某一個(gè)咨詢題而采取的方法和步驟,就稱為算法。2、算法的性質(zhì)=1\*GB3①有窮性:一個(gè)算法應(yīng)包含有限的操作步驟=2\*GB3②一個(gè)初始:此動(dòng)作序列只有一個(gè)初始動(dòng)作=3\*GB3③確定性:算法中的每一個(gè)步驟都應(yīng)當(dāng)是確定性的,僅有一個(gè)后繼動(dòng)作。=4\*GB3④有一個(gè)或多個(gè)輸出:序列終止表示咨詢題得到解答或咨詢題沒有解答,沒有輸出的算法是沒有意義的。第二節(jié)選擇型程序設(shè)計(jì)1、if語句的形式=1\*GB3①if(條件表達(dá)式)語句=2\*GB3②if(條件表達(dá)式)語句1else語句2注意:=1\*GB3①if語句中的條件表達(dá)式一樣為邏輯表達(dá)式或關(guān)系表達(dá)式,但也能夠是任意的數(shù)值類型(包括整型、實(shí)型、字符型、指針類型),例如下列語句也是合法的。if(‘a(chǎn)’)printf(“%d”,’a’);=2\*GB3②在if語句中,分號(hào)是語句的終止標(biāo)志。=3\*GB3③在if和else后面能夠只含一個(gè)內(nèi)嵌的操作語句,也能夠有多個(gè)操作語句,現(xiàn)在用花括號(hào)將幾個(gè)語句括起來成為一個(gè)復(fù)合語句。例1:以下不正確的if語句形式是()。A)if(x>y&&x!=y);B)if(x==y)x+=y;C)if(x!=y)scanf(“%d”,&x)elsescanf(“%d”,&y);D)if(x<y){x++;y++;};詳解:scanf(“%d”,&x)末尾應(yīng)加分號(hào),因?yàn)榉痔?hào)是語句不可缺少的部分。例2:已知intx=10,y=20,z=30;以下語句執(zhí)行后x,y,z的值是()。if(x>y)z=x;x=y;y=z;詳解:在此語句中,條件x>y為假,因此只執(zhí)行x=y;y=z;兩條語句。例3、以下不正確的語句是()A)if(x>y);C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第1頁。B)if(x=y)&&(x!=0)x+=y;C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第1頁。C)if(x!=y)scanf(“%d”,&x);D)if(x<y){x++;y++};詳解:分號(hào)是語句終止的標(biāo)志,y++的末尾無分號(hào),因此y++不是合法的語句。2、if的嵌套if(條件1)if(條件2)語句1else語句2elseif(條件3)語句3else語句4例4:以下程序的輸出結(jié)果是()main(){inta=100,x=10,y=20,ok1=5,ok2=0;if(x<y)if(y!=10)if(!ok1)a=1;elseif(ok2)a=10;printf(“%d\n”,a);}詳解:把10、20、5、0分不給變量x、y、ok1、ok2賦值,執(zhí)行條件語句后a值沒有改變,因此a值仍是原值100。3、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后面的語句,若所有的case中的常量表達(dá)式的值都沒有與表達(dá)式的值匹配的,就執(zhí)行default后面的語句。3、每一個(gè)case的常量表達(dá)式的值必須互不相同,否則就會(huì)顯現(xiàn)互相矛盾的現(xiàn)象。C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第2頁。4、執(zhí)行完一個(gè)case后面的語句后,流程操縱轉(zhuǎn)移到下一個(gè)case連續(xù)執(zhí)行,直到遇到break語句或執(zhí)行完為止。C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第2頁。5、default能夠放在case語句的后面,也能夠放在case語句的前面。例5:運(yùn)輸公司對(duì)用戶運(yùn)算運(yùn)費(fèi),距離越遠(yuǎn),每公里運(yùn)費(fèi)越低。設(shè)每公里每噸物資的差不多運(yùn)費(fèi)為p,物資重為w,距離為s,折扣為d,則總運(yùn)費(fèi)f運(yùn)算公式為f=p*w*s(1-d),編寫程序。公里數(shù)s與折扣率d的標(biāo)準(zhǔn)如下:(此程序可用if……else來完成,也能夠用switch來完成)。s<250kmd=0250≤s<500d=0.05500≤s<1000d=0.0751000≤s<2000d=0.12000≤s<3000d=0.153000≤sd=0.2main(){ints;floatp,w,d,f;printf(“請(qǐng)輸入每公里每噸物資的差不多運(yùn)費(fèi)”);scanf(“%f”,&p);printf(“請(qǐng)輸入物資重”);scanf(“%f”,&w);printf(“請(qǐng)輸入公里數(shù)”);scanf(“%f”,&s);switch((int)(s/250)){case0:d=0;break;case1:d=0.05;break;case2:case3:d=0.075;break;case4:case5:case6:case7:d=0.1;break;case8:case9:case10:case11:d=0.15;break;default:d=0.2;}f=p*w*s(1-d);printf(“差不多運(yùn)費(fèi)是:%f”,f);}詳解:1、多個(gè)case可共用一組執(zhí)行語句,必須寫成如下的形式:case4:case5:C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第3頁。case6:C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第3頁。case7:d=0.1;break;case后面只能有一個(gè)常量,把上式改寫成case4,5,6,7:d=0.1;break;的形式是錯(cuò)誤的。2、switch后面括弧內(nèi)的“表達(dá)式”必須是整型表達(dá)式或字符型表達(dá)式,也能夠是枚舉型數(shù)據(jù),關(guān)于swith來講,關(guān)鍵是把原始數(shù)據(jù)轉(zhuǎn)換為易表達(dá)的形式。例6:請(qǐng)讀以程序?qū)懗龀绦虻妮敵鼋Y(jié)果。#include<stdioh>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf(“a=%d,b=%d”,a,b);}詳解:此程序是switch的嵌套結(jié)構(gòu),在此程序中break跳出內(nèi)層switch結(jié)構(gòu),接著執(zhí)行外層switch的case2后的語句。例7:寫出下面程序的運(yùn)行結(jié)果是()main(){inti;for(i=1;i<=5;i++)switch(i%5){case0:printf(“*”);break;case1:printf(“#”);break;default:printf(“\n”);case2:printf(“&”);}}&&*詳解:default可放在case語句的前面,也能夠放在case語句的后面,當(dāng)i%5不等于0,1,2時(shí),將執(zhí)行default后的語句printf(“\n”);執(zhí)行完成后沒有break,將連續(xù)執(zhí)行case2后的語句printf(“&”);C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第4頁。第三節(jié)循環(huán)型程序設(shè)計(jì)C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第4頁。1、while語句while語句用來實(shí)現(xiàn)”當(dāng)型”循環(huán)結(jié)構(gòu),其一樣形式如下:while(條件表達(dá)式)循環(huán)體語句例8:設(shè)有程序段:intk=10;while(k=0)k=k-1;循環(huán)體執(zhí)行()次。例9:下面程序段的運(yùn)行結(jié)果是()x=y=0;while(x<15)y++,x+=++y;printf(“%d,%d”,y,x);例10、設(shè)有程序段t=0;while(printf(“*”)){t++;if(t>3)break;}循環(huán)執(zhí)行()次2、do-while語句do-while語句的特點(diǎn)是先執(zhí)行循環(huán)體,然后判定循環(huán)條件是否成立,其一樣形式為:do{循環(huán)體語句}while(條件表達(dá)式);例11、若有如下語句intx=3;do{printf(“%d\n”,x-=2);}while(--x);則上面程序段輸出結(jié)果是()。例12、以下程序段循環(huán)執(zhí)行幾次。x=-1;do{x=x*x;}while(!x);例13、下面程序的運(yùn)行結(jié)果是()main(){inty=10;do{y--;}while(--y);printf(“%d\n”,y--);}3、for語句C語言中的for語句使用最為靈活,不僅能夠用于循環(huán)次數(shù)差不多確定的情形,而且能夠用于循環(huán)次數(shù)不確定而只給出循環(huán)終止條件的情形,它完全能夠代替while語句,其一樣形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式2)語句講明:C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第5頁。=1\*GB3①for語句一樣形式中的“表達(dá)式1”能夠省略,現(xiàn)在應(yīng)for語句之前給循環(huán)變量賦初值。注意省略表達(dá)式1時(shí),其后的分號(hào)不能省略。C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第5頁。=2\*GB3②假如表達(dá)式2省略,即不判定循環(huán)條件,循環(huán)無終止地進(jìn)行下去。=3\*GB3③表達(dá)式3也能夠省略,但現(xiàn)在程序設(shè)計(jì)者應(yīng)另外設(shè)法保證循環(huán)正常終止。=4\*GB3④能夠省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,即只給循環(huán)條件,在這種情形下,完全等同于while語句。=5\*GB3⑤3個(gè)表達(dá)式都可省略,如:for(;;)語句,相當(dāng)于while(1)語句,即不設(shè)初值,不判定條件(認(rèn)為表達(dá)式2為真值),循環(huán)變量不增值。無終止地執(zhí)行循環(huán)體。=6\*GB3⑥表達(dá)式1能夠是設(shè)置循環(huán)變量初值的賦值表達(dá)式,也能夠是與循環(huán)變量無關(guān)的其他表達(dá)式。for(sum=0;i<=100;i++)sum=sum+i;=7\*GB3⑦表達(dá)式一樣是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&&x<y),但也能夠是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為非零,就執(zhí)行循環(huán)體。例14、若i為整型變量,則以下循環(huán)執(zhí)行次數(shù)是()。for(i=2;i!=0;)printf(“%d”,i--);例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;例16、執(zhí)行語句for(i=1;i++<4;);后變量i的值是()例17、下面程序段的功能是運(yùn)算1000!的末尾含有多少個(gè)零。請(qǐng)?zhí)羁?。for(k=0,i=5;i<=1000;i+=5){m=i;while(){k++;m=m/5;}}4、break與continue在break語句能夠使流程跳出switch結(jié)構(gòu),連續(xù)執(zhí)行switch語句下面的一個(gè)語句。實(shí)際上,break語句還能夠用來從循環(huán)體內(nèi)跳出循環(huán)體,即提高終止循環(huán),接著執(zhí)行循環(huán)下面的語句。break語句的一樣形式為:break;continue語句只終止本次循環(huán),而不是終止整個(gè)循環(huán)的執(zhí)行。continue語句的一樣形式為:continue;例18、下列程序的運(yùn)行結(jié)果是()。main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf(“x=%d\n”,x);}C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第6頁。例19、下面程序的運(yùn)行結(jié)果是()C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第6頁。main(){intk=0;charc=’A’;do{switch(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;}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),這確實(shí)是多層循環(huán)。6、舉例:=1\*GB3①求和咨詢題例20、s=1+2+…………..+100例21、s=1!+2!+…………+100!例22、e=1+1/1!+1/2!+1/3!+……精確到10-6例23、s=1-1/3!+1/5!-1/7!+…….精確到10-6#include“math.h”main(){longt;doubles;for(s=0,t=1,i=0;fabs(1/t)>=1e-6;i++){t=(-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(){ints=0,f1=1,f2=2;for(I=1;I<=20;I++){s=s+f2/f1;f2=f1+f2;C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第7頁。f1=f2-f1;C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第7頁。}printf(“%d”,s);}例25、打印九九表main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf(“%2d*%2d=%2d”,i,j,i*j);printf(“\n”);}}例26、打印出下列圖形*********main(){inti,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(){inti,f1,f2,f3;for(i=3;i<=12;i++){C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第8頁。f3=f1+f2;C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第8頁。f1=f2;f2=f3;}printf(“%d”,f3);}例29、求最大公約數(shù)、最小公倍數(shù)。main(){intr,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,最小公倍數(shù)是”,v,m*n/v);}例30、sn=a+aa+aaa+aa…a,從鍵盤輸入a及n后,求sn方法一:main(){intn,a;longs;scnaf(“%d%d”,&n,&a);for(i=1;i<=n;i++)s=s*10+i*a;printf(“%ld”,s);}方法二:main(){intn,a;longs,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(){longa;inti=0;s=0;printf(“它的每一位數(shù):”);While(a!=0)C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第9頁。{i=i+1;C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第9頁。x=a%10;a=a/10;s=s*10+x;printf(“%d”,x);}printf(“\n”);printf(“它是%d位數(shù)\n”,i);printf(“它的逆序是%d\n”,s);}例32、輸出1—100之間每位數(shù)的乘積大于每位數(shù)的和的數(shù)main(){intn,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;}if(k>s)printf(“%d”,n);}}main(){inti,s=1;for(i=9;i<=1;i--)s=2*s+1;}例34、預(yù)備客票:某鐵路線上共有10個(gè)車站,咨詢需要預(yù)備幾種車票。main(){inti,j,s=0;for(I=1;I<=9;I++)for(j=I+1;j<=10;j++)s=s+1;printf(“需要預(yù)備%d”,2*s);}main(){intday=0,s=1020;while(s<=0){s=s/2-2;day++;}printf(“%d”,day);}C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第10頁。例36、從三個(gè)紅球、五個(gè)白球、六個(gè)黑球中任意取出八個(gè)球,且其中必須有白球,輸出所有可能的方案。C程序的流程設(shè)計(jì)全文共12頁,當(dāng)前為第10頁。main(){intred,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è)紅球,%d個(gè)白球,%d個(gè)黑球”,red,white,black);}例37、二分迭代法二分迭代法的思想是:先取f(x)=0的兩個(gè)粗略解x1與x2。若f(x1)與f(x2)符號(hào)相反,則方程f(x)=0在區(qū)間(x1,x2)中至少有一個(gè)根。While(fabs(x1-x2)>=1e-6){x3=(x1+x2)/2;if(f(x3)*f(x2)>0)x2=x3;else

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論