某高校循環(huán)程序設(shè)計基礎(chǔ)系_第1頁
某高校循環(huán)程序設(shè)計基礎(chǔ)系_第2頁
某高校循環(huán)程序設(shè)計基礎(chǔ)系_第3頁
某高校循環(huán)程序設(shè)計基礎(chǔ)系_第4頁
某高校循環(huán)程序設(shè)計基礎(chǔ)系_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

某高校循環(huán)程序設(shè)計基礎(chǔ)系

在C語言中可用以下語句構(gòu)成循環(huán):

if…gotowhiledo…whilefor其中if…goto是通過編程技巧(if語句和goto語句組合)構(gòu)成循環(huán)功能。而且goto語句將影響程序流程的模塊化,使程序可讀性變差,所以結(jié)構(gòu)化程序設(shè)計主張限制goto語句的使用。其他三種語句是C語言提供的循環(huán)結(jié)構(gòu)專用語句。1/7/20242【例二】main(){intn=0,sum=0;loop:if(sum>=10000)gotoend;sum+=n;++n;gotoloop;end:printf(“n=%d\n”,n);}直到型當(dāng)型1、if…goto語句循環(huán)結(jié)構(gòu)【例一】main(){intn=0,sum=0;loop:sum+=n;++n;if(sum<=10000)gotoloop;printf(“n=%d\n”,n);}1/7/202432、while語句循環(huán)結(jié)構(gòu)【例三】main(){intn=0,sum=0;while(sum<=10000){sum+=n;++n;}printf(“n=%d\n”,n);}當(dāng)型一般形式while(條件表達式)循環(huán)體;用于構(gòu)成當(dāng)型循環(huán):先判斷后執(zhí)行/條件為真繼續(xù)循環(huán),直到條件為假時結(jié)束循環(huán)。【注意】條件表達式或循環(huán)體內(nèi)應(yīng)有改變條件使循環(huán)結(jié)束的語句,否則可能陷入“死循環(huán)”。1/7/202443、do…while語句循環(huán)結(jié)構(gòu)

【例四】main(){intn=0,sum=0;do{sum+=n;++n;}while(sum<=10000)printf(“n=%d\n”,n);}一般形式do{循環(huán)語句(組)}while(條件表達式);用于構(gòu)成直到型循環(huán):先執(zhí)行后判斷/條件為真繼續(xù)循環(huán),直到條件為假時結(jié)束循環(huán)?!咀⒁狻織l件表達式或循環(huán)體內(nèi)同樣應(yīng)有改變條件使循環(huán)結(jié)束的語句,否則可能陷入“死循環(huán)”。直到型直到sum超過10000為止1/7/202454、for語句循環(huán)結(jié)構(gòu)一般形式for(表達式1;條件表達式;表達式3)循環(huán)語句(組);用于構(gòu)成計數(shù)型當(dāng)型循環(huán):先判斷后執(zhí)行/條件為真繼續(xù)循環(huán),直到條件為假時結(jié)束循環(huán)。表達式1:整個循環(huán)中只執(zhí)行1次,常用來對循環(huán)變量設(shè)置初值條件表達式(表達式2):其值為真(非0)時繼續(xù)執(zhí)行循環(huán)語句(組),否則結(jié)束循環(huán)表達式3:常用于循環(huán)變量值的更新(循環(huán)體的一部分每次循環(huán)語句組執(zhí)行完后執(zhí)行一次)【例六】求∑i=1+2+3+4…+99+100(i=1~100)main(){inti,s=0;for(i=1;i<=100;i++)s=s+i;printf(“Sum=%d\n”,s);}1/7/202465、其他循環(huán)控制結(jié)構(gòu)main(){inta,y;a=10,y=0;do{a+=2;y+=a;if(y>50)break;}while(a=14);printf("a=%d,y=%d\n",a,y);}結(jié)果:a=16,y=60

變量跟蹤ay10012 1214+212+16=2814+216+28=4414+216+44=60變量跟蹤分析法break結(jié)束循環(huán)在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。continue結(jié)束本次循環(huán)循環(huán)“短路”(跳過循環(huán)體后面的語句,開始下一輪循環(huán))。goto跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號處。【注意】goto語句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!基礎(chǔ)系1/7/202475、其他循環(huán)控制結(jié)構(gòu)break結(jié)束循環(huán)在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。continue結(jié)束本次循環(huán)循環(huán)“短路”(跳過循環(huán)體后面的語句,開始下一輪循環(huán))。goto跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號處?!咀⒁狻縢oto語句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!基礎(chǔ)系求以下程序段執(zhí)行后x和i的值。inti,x;for(i=1,x=1;i<=50;i++){if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;}結(jié)果:x的值為10,i的值為6

變量跟蹤ix11→626→333→848→555→1061/7/202485、其他循環(huán)控制結(jié)構(gòu)break結(jié)束循環(huán)在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。continue結(jié)束本次循環(huán)循環(huán)“短路”(跳過循環(huán)體后面的語句,開始下一輪循環(huán))。goto跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號處?!咀⒁狻縢oto語句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!main(){inti=1;while(i<=15)if(++i%3!=2)continue;elseprintf("%d",i);printf("\n");}結(jié)果:2581114

變量跟蹤

i++i%3輸出i

1→2222→303→414→5255→60……1/7/202495、其他循環(huán)控制結(jié)構(gòu)break結(jié)束循環(huán)

在switch中退出switch結(jié)構(gòu);在循環(huán)中結(jié)束循環(huán)。

continue結(jié)束本次循環(huán)循環(huán)“短路”(跳過循環(huán)體后面的語句,開始下一輪循環(huán))。goto跳轉(zhuǎn)跳到循環(huán)體外指定標(biāo)號處。【注意】goto語句只能從循環(huán)內(nèi)向外跳轉(zhuǎn),反之不可!main(){inti,k=0;for(i=1;;i++){k++;while(k<i*i){k++;if(k%3==0)gotoloop;}}loop:printf("%d,%d",i,k);}結(jié)果:2,3

1/7/202410循環(huán)常用算法1、枚舉法(窮舉法)

“笨人之法”:把所有可能的情況一一測試,篩選出符合條件的各種結(jié)果進行輸出。

【例一】百元買百雞:用一百元錢買一百只雞。已知公雞5元/只,母雞3元/只,小雞1元/3只。分析:這是個不定方程——三元一次方程組問題(三個變量,兩個方程)

x+y+z=100

5x+3y+z/3=100設(shè)公雞為x只,母雞為y只,小雞為z只。1/7/202411百元買百雞問題分析1/7/202412百元買百雞問題分析main(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++){z=100-x-y;if(5*x+3*y+z/3.0==100)printf(“cocks=%d,hens=%d,chickens=%d\n",x,y,z);}}【討論】令z=100-x-y只進行101×101=10201次運算(前者的1%)

取x<=19,y<=33只進行20×34=680次運算(第1種運算的6.7%)1/7/202413【例二】雨水淋濕了算術(shù)書的一道題,8個數(shù)字只能看清3個,第一個數(shù)字雖然看不清,但可看出不是1。編程求其余數(shù)字是什么?

[□×(□3+□)]2=8□□9分析設(shè)分別用A、B、C、D、E五個變量表示自左到右五個未知的數(shù)字。其中A的取值范圍為2~9,其余取值范圍為0~9。條件表達式即為給定算式。1/7/202414main(){intA,B,C,D,E;for(A=2;A<=9;A++)for(B=0;B<=9;B++)for(C=0;C<=9;C++)for(D=0;D<=9;D++)for(E=0;E<=9;E++)if(A*(B*10+3+C)*A*(B*10+3+C)==8009+D*100+E*10)printf(“%2d%2d%2d%2d%2d\n”,A,B,C,D,E);}結(jié)果:32864

【例二】雨水淋濕了算術(shù)書的一道題,8個數(shù)字只能看清3個,第一個數(shù)字雖然看不清,但可看出不是1。編程求其余數(shù)字是什么?

[□×(□3+□)]2=8□□91/7/2024152、歸納法(遞推法)

“智人之法”:通過分析歸納,找出從變量舊值出發(fā)求新值的規(guī)律。【例一】編程求∑i=1+2+3+4…+99+100(i=0~100)分析i=0S0=0(初值)i=1S1=0+1=S0+1i=2S2=1+2=S1+2i=3S3=1+2+3=S2+3i=4S4=1+2+3+4=S3+4

………i=nSn=1+2+3+4+…+n=Sn-1+n1/7/202416【例一】編程求∑i=1+2+3+4…+n(n≤100)程序:main(){inti,n,s=0;printf("n=");scanf("%d",&n);for(i=1;i<=n;i++)s=s+i;printf("Sum=%d\n",s);}運行結(jié)果:n=100Sum=5050如果是∑i=1+1/2+1/3+…+1/n呢?1/7/202417【例二】

編程求1-1/2+1/3-1/4+1/5-…+1/99-1/100分母為奇數(shù)時,相加分母為偶數(shù)時,相減法1:從變化規(guī)律分析……程序:main(){inti;floats=0;for(i=1;i<=100;i++)if(i%2)s=s+1/i;elses=s-1/i;printf("Sum=%f\n",s);}運行結(jié)果:Sum=1.000000錯在哪里?1/7/202418【例二】

編程求1-1/2+1/3-1/4+1/5-…+1/99-1/100法2:這是個累加型算法的編程題……程序:#include<math.h>main();{inti;floats=0;for(i=1;i<=100;i++)s=s+pow(-1,i+1)/i;printf("Sum=%f\n",s);}

程序:#include<math.h>main(){inti,k=1;floats=0;for(i=1;i<=100;i++){s=s+k/i;k=-k;}printf("Sum=%f\n",s);}累加型算法程序基本結(jié)構(gòu)為:

s=0;for(i=1;i<=n;i++)s=s+□;錯在哪里?(如何檢查程序錯誤?)運行結(jié)果:Sum=0.688172運行結(jié)果:Sum=1.0000001/7/202419【例三】編程求n!(n由鍵盤輸入)

分析i=0S0=1=S0(初值)i=1S1=0×1=S0×1i=2S2=1×2=S1×2i=3S3=1×2×3=S2×3i=4S4=1×2×3×4=S3×4

………i=nSn=1×2×3×4×…×n=Sn-1×n1/7/202420算法類型小結(jié):階乘型【階乘型】類型諸如□×□×□×□×……×□×□求其前n項之積的編程題。階乘型算法若設(shè)i為循環(huán)變量,s為前n項相乘之積,則程序的基本結(jié)構(gòu)為:

s=1;for(i=1;i<=n;i++)s=s*□;1/7/202421【例四】

編程求∑i!=1!+2!+3!…+n!(n由鍵盤輸入)外循環(huán)為累加型內(nèi)循環(huán)為階乘型法1:從變化規(guī)律分析……程序:main(){inti,j,n;floats,s1;

printf("請輸入n=");scanf("%d",&n);

s=0;for(i=1;i<=n;i++){s1=1;for(j=1;j<=i;j++)s1=s1*j;s=s+s1;}

printf("Sum=%.0f\n",s);}運行結(jié)果:n=5Sum=153/*如果n值較大,可改為printf(“Sum=%e\n”,s);*/1/7/202422【例四】

編程求∑n!=1!+2!+3!…+n!(n由鍵盤輸入)在同一個循環(huán)中先階乘,后累加法2:通過單循環(huán)實現(xiàn)……程序:main(){inti,n;floats,s1;

printf("請輸入n=");scanf("%d",&n);s=0,s1=1;for(i=1;i<=n;i++){s1=s1*i;s=s+s1;}printf("Sum=%.0f\n",s);}運行結(jié)果:n=5Sum=1531/7/202423【例五】

例5.12

兔子繁殖問題(斐波那契數(shù)列問題)main(){intf1=1,f2=1,f,i,s,n;clrscr();printf("請輸入月數(shù):");scanf("%d",&n);for(s=2,i=3;i<=n;i++){f=f1+f2;s=s+f;f1=f2;f2=f;}printf("%d個月的兔子數(shù)是%d\n",n,s);}1/7

溫馨提示

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

評論

0/150

提交評論