版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)學(xué)習(xí)目標(biāo)本章主要介紹循環(huán)的結(jié)構(gòu)和用法。通過本章學(xué)習(xí),要掌握while、do-while、for循環(huán)三種基本循環(huán)語句,掌握使用break語句和contiune語句提前結(jié)束循環(huán),并能開始嘗試編寫一些較復(fù)雜的程序。循環(huán)結(jié)構(gòu)是程序設(shè)計(jì)中一種很重要的結(jié)構(gòu)。其特點(diǎn)是,在給定條件成立時(shí),反復(fù)執(zhí)行某程序段,直到條件不成立為止。給定的條件稱為循環(huán)條件,反復(fù)執(zhí)行的程序段稱為循環(huán)體。第4章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)4.1三種循環(huán)結(jié)構(gòu)4.2循環(huán)的嵌套4.3continue語句和break語句4.1三種循環(huán)結(jié)構(gòu)4.1.1用while語句實(shí)現(xiàn)循環(huán)4.1.2用do…while語句實(shí)現(xiàn)循環(huán)4.1.3用for語句實(shí)現(xiàn)循環(huán)4.1.1用while語句實(shí)現(xiàn)循環(huán)
while語句的一般形式如下:
while(表達(dá)式)語句“真”時(shí)執(zhí)行循環(huán)體語句“假”時(shí)不執(zhí)行循環(huán)條件表達(dá)式while循環(huán)的特點(diǎn)是:先判斷條件表達(dá)式,后執(zhí)行循環(huán)體語句while語句的執(zhí)行過程為:(1)計(jì)算并判斷表達(dá)式的值。(2)若值為0,則結(jié)束循環(huán),退出while語句;若值為非0,則執(zhí)行循環(huán)體(3)轉(zhuǎn)步驟(1)while循環(huán)語句的特點(diǎn)是:先判斷循環(huán)條件,然后再執(zhí)行循環(huán)體。其執(zhí)行過程可表示為下圖:圖4.1while循環(huán)執(zhí)行過程例4.1求1+2+3+…+100,即解題思路:這是累加問題,需要先后將100個(gè)數(shù)相加要重復(fù)100次加法運(yùn)算,可用循環(huán)實(shí)現(xiàn)后一個(gè)數(shù)是前一個(gè)數(shù)加1而得加完上一個(gè)數(shù)i后,使i加1可得到下一個(gè)數(shù)#include<stdio.h>intmain(){
inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}
printf("sum=%d\n",sum);return0;}#include<stdio.h>intmain(){
inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}
printf("sum=%d\n",sum);return0;}復(fù)合語句#include<stdio.h>intmain(){
inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}
printf("sum=%d\n",sum);return0;}復(fù)合語句不能少#include<stdio.h>intmain(){
inti=1,sum=0;
while(i<=100){sum=sum+i;i++;}
printf("sum=%d\n",sum);return0;}不能丟,否則循環(huán)永不結(jié)束例4.2已知s=1!+2!+3!+……+n!,求當(dāng)s首次超過2,000,000時(shí)的n和s的值。#include<stdio.h>voidmain(){ intn=0; longs=0,an=1;
while(s<2000000) {n++;an=an*n;s=s+an; } printf("s=%ldn=%d\n",s,n);}運(yùn)行結(jié)果:s=4037913n=104.1.2用do…while語句實(shí)現(xiàn)循環(huán)do---while語句的特點(diǎn):先無條件地執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立do---while語句的一般形式為:
do
語句
while(表達(dá)式);表達(dá)式循環(huán)體語句Ndo-while與while語句的區(qū)別是:do-while總是要先做一遍循環(huán)體,再做表達(dá)式的判斷,因此循環(huán)體中的語句肯定要做一次。在設(shè)計(jì)程序時(shí),如果不知道重復(fù)執(zhí)行的次數(shù),而且第一次必須執(zhí)行時(shí),常采用do-while語句。
例4.3用do…while語句求:
1+2+3+…+100,即解題思路:i≤100Nsum=sum+ii=i+1sum=0i=1
i=1;sum=0;
do{sum=sum+i;i++;}while(i<=100);
#include<stdio.h>intmain(){inti=1,sum=0;
do{sum=sum+i;i++;}while(i<=100);
printf("sum=%d\n",sum);return0;}例4.4用do-while循環(huán),把26個(gè)大寫字母按順序顯示出來#include<stdio.h>voidmain(){ chari='A';do{printf("%c",i);i++;}while(i<='Z');}運(yùn)行結(jié)果:ABCDEFGHIJKLMNOPQRSTUVWXYZ4.1.3用for語句實(shí)現(xiàn)循環(huán)for語句的一般形式為
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句設(shè)置初始條件,只執(zhí)行一次??梢詾榱銈€(gè)、一個(gè)或多個(gè)變量設(shè)置初值執(zhí)行4.1.3用for語句實(shí)現(xiàn)循環(huán)for語句的一般形式為
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句循環(huán)條件表達(dá)式,用來判定是否繼續(xù)循環(huán)。在每次執(zhí)行循環(huán)體前先執(zhí)行此表達(dá)式,決定是否繼續(xù)執(zhí)行循環(huán)4.1.3用for語句實(shí)現(xiàn)循環(huán)for語句的一般形式為
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
語句作為循環(huán)的調(diào)整器,例如使循環(huán)變量增值,它是在執(zhí)行完循環(huán)體后才進(jìn)行的4.1.3用for語句實(shí)現(xiàn)循環(huán)for語句的執(zhí)行過程:(1)先求解表達(dá)式1(2)求解表達(dá)式2,若其值為真,執(zhí)行循環(huán)體,然后執(zhí)行下面第(3)步。若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步(3)求解表達(dá)式3(4)轉(zhuǎn)回上面步驟(2)繼續(xù)執(zhí)行(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個(gè)語句4.1.3用for語句實(shí)現(xiàn)循環(huán)其執(zhí)行過程可表示為下圖:圖4.3for循環(huán)執(zhí)行過程例4.5用for語句計(jì)算s=1+2+3+…+100。#include<stdio.h>voidmain(){inti,sum=0;
for(i=1;i<=100;i++)
sum+=i; printf("sum=%d\n",sum);} 運(yùn)行結(jié)果:sum=5050例4.6打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個(gè)三位正整數(shù),其各位數(shù)字的立方和等于該數(shù)本身,例如:153=13+53+33。#include"stdio.h"voidmain(){intn,i,j,k;
for(n=100;n<=999;n++){
i=n/100;j=(n/10)%10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)printf("%d=%d^3+%d^3+%d^3\n",n,i,j,k);
}}運(yùn)行結(jié)果:153=1^3+5^3+3^3370=3^3+7^3+0^3371=3^3+7^3+1^3407=4^3+0^3+7^3分析:本題采用了“窮舉法”,即把所有的三位正整數(shù)100~999按題意一一行判斷,如果一個(gè)三位正整數(shù)n的百位、十位、個(gè)位上的數(shù)字分別為i、j、k,則判斷式為:
n=i3+j3+k3
求解三位數(shù)n的百位、十位、個(gè)位:百位:i=n/100;
十位:j=(n/10)%10;
個(gè)位:k=n%10;4.2循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)3種循環(huán)(while循環(huán)、do…while循環(huán)和for循環(huán))可以互相嵌套例4.7用如下格式輸出九九乘法表*12345678911234567892468101214161839121518212427416202428323652530354045636424854749566386472981#include<stdio.h>voidmain(){int
i,j;/*ouputtablehead*/printf("%4c",‘*’);for(i=1;i<=9;++i)printf("%4d",i);printf("\n");/*ouputtablebody*/for(i=1;i<=9;++i){printf("%4d",i);for(j=1;j<=9;++j)if(j>=i)printf("%4d",i*j);elseprintf("");printf("\n");}}例4.8輸入5名學(xué)生6門課程的成績(jī),分別統(tǒng)計(jì)出每個(gè)學(xué)生6門課程的平均成績(jī)。#defineN5#defineM6#include”stdio.h”main(){int
i,j;floatg,sum,ave;for(i=1;i<=N;i++){sum=0;for(j=1;j<=M;j++){scanf("%f",&g);sum=sum+g;}ave=sum/M;printf("No.%dave=%5.2f\n",i,ave);}}運(yùn)行結(jié)果:606570758085↙No.1ave=72.50657075808590↙No.2ave=77.50707580859095↙No.3ave=82.50758085909597↙No.4ave=87.00808590959799↙No.5ave=91.00分析:程序中需要用雙重循環(huán)來處理。外層循環(huán):每循環(huán)一次,輸入一名學(xué)生的6門課程的成績(jī),并求出該學(xué)生的平均成績(jī),然后輸出該學(xué)生的全部數(shù)據(jù),外循環(huán)執(zhí)行5次,可處理5名學(xué)生的數(shù)據(jù);內(nèi)層循環(huán):讀入第i位學(xué)生的6門成績(jī),并進(jìn)行累加。4.3continue語句和break語句4.3.1用break語句提前終止循環(huán)4.3.2用continue語句提前結(jié)束本次循環(huán)4.3.1用break語句提前終止循環(huán)在前章switch結(jié)構(gòu)中,我們用break語句跳出結(jié)構(gòu)去執(zhí)行switch語句的下一條語句。實(shí)際上,break語句也可以用來從循環(huán)體中跳出,終止最內(nèi)層循環(huán),即從包含它的最內(nèi)層循環(huán)語句(while,do-while,for)中退出,執(zhí)行包含它的循環(huán)語句的下面一條語句。常常和if語句配合使用。
例如:for(i=1;i<100;i++)
if(i>100)break;/*當(dāng)變量i>100時(shí)退出循環(huán)*/break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中。
例4.9求3到100之間的所有素?cái)?shù)。#include"stdio.h"voidmain(){int
i,j;for(i=3;i<=100;i++){for(j=2;j<=i-1;j++)if(i%j==0)break;if(i==j)printf("%4d",i);}printf("\n");}運(yùn)行結(jié)果:357111317192329313741434753596167717379838997例4.10計(jì)算r=1到r=10時(shí)的圓面積,直到面積area大于100為止。#definePI3.1415926#include”stdio.h”main(){intr;floatarea;for(r=1;r<=10;r++){area=PI*r*r;if(area>100)break;printf("r:%dareais:%f\n",r,area);}}運(yùn)行結(jié)果:r:1areais:3.141593r:2areais:12.566370r:3areais:28.274334r:4areais:50.265480r:5areais:78.5398184.3.2用continue語句提前結(jié)束本次循環(huán)與break語句退出循環(huán)不同的是,continue語句只結(jié)束本次循環(huán),接著進(jìn)行下一次循環(huán)的判斷,如果滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。
4.3.2用continue語句提前結(jié)束本次循環(huán)continue語句的作用是跳過循環(huán)本中剩余的語句而強(qiáng)行執(zhí)行下一次循環(huán)。continue語句只用在for、while、do-while等循環(huán)體中,常與if條件語句一起使用,用來加速循環(huán)。例4.11求100~200之間的不能被3整除的數(shù)#include"stdio.h"main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}運(yùn)行結(jié)果:100101103104106107109110112113115116118119121122124125127128130131133134136137139140142143145146148149151152154155157158160161163164166167169170172173175176178179181182184185187188190191193194196197199200例4.12輸入10個(gè)整數(shù),輸出其中的正整數(shù)的個(gè)數(shù)及平均值。#include<stdio.h>main(){inta,i,k,x;printf("input10numbers:\n");for(a=0,i=0,k=0;i<10;++i){scanf("%d",&x);if(x<=0)continue;else{a+=x;++k;}}if(k)printf("numbers=%d,average=%f\n",k,1.0*a/k);}運(yùn)行結(jié)果:input10numbers:10-20-3040-5060708090-100↙numbers=6,average=58.333333例4.13輸入任意一個(gè)大于或等于2的整數(shù)n,判斷該數(shù)是否為素?cái)?shù),并輸出相應(yīng)的結(jié)果。#include<stdio.h>#include<math.h>main(){intn,i,k,r;printf(“inputn:\n”);scanf(“%d”,&n);if(n==2)printf(“2isaprime\n”);elseif(n>2){i=1;k=sqrt(n);do{++i;r=n%i;}while(r&&i<=k);if(r)printf(“%disaprime\n”,n);elseprintf(“%disn’taprime\n”,n);}}運(yùn)行結(jié)果:19↙19isaprime分析:根據(jù)數(shù)學(xué)定義,一個(gè)大于2的整數(shù)n,如果除1和n外,不能被任何數(shù)整除(即n不含1和n以外的任何因子),則n是素?cái)?shù);此外,整數(shù)2不符合上述定義,但規(guī)定2是最小素?cái)?shù)。為了確定n是否含有1和n以外的因子,只需用2至n(也可以用2至n-1)作除數(shù)除n。如果均不能整除n,則n是素?cái)?shù);否則(只要發(fā)現(xiàn)一個(gè)因子)n不是素?cái)?shù)。顯然,用2至n作除數(shù)時(shí)所做的除法次數(shù),比用2至n-1作除數(shù)時(shí)少得多。例4.14有以下程序(2009年9月全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C試題填空題10題)#include<stdio.h>main(){
intf,f1,f2,i;f1=0;f2=1;
printf(“%d%d”,f1,f2);
for(i=3;i<=5;i++){f=f1+f2;printf(“%d”,f);
f1=f2;f2=f;
}
printf(“\n”);}程序運(yùn)行后的輸出結(jié)果是
。分析:執(zhí)行第一個(gè)輸出語句時(shí)輸出01,然后執(zhí)行for循環(huán),總共循環(huán)3次,第一次輸出1(0+1),第二次輸出2(1+1),第三次輸出3(1+2)。所以輸出結(jié)果為01123。例4.15求兩整數(shù)的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>main(){int
m,n,a,b,t,c;
printf("Inputtwointegernumbers:\n");
scanf("%d%d",&a,&b);m=a;n=b;c=a%b;
while(c!=0){a=b;b=c;c=a%b;}
printf("Thelargestcommondivisor:%d\n",b);
printf("Theleastcommonmultiple:%d\n",m*n/b);}運(yùn)行結(jié)果:Inputtwointegernumbers:318648Thelargestcommondivisor:6Theleastcommonmultiple:34344分析:求最大公約數(shù)算法:有兩整數(shù)a和b:①a%b得余數(shù)c②若c=0,則b即為兩數(shù)的最大公約數(shù)③若c≠0,則a=b,b=c,再回去執(zhí)行①。例如求27和15的最大公約數(shù)過程為:
27÷15余1215÷12余312÷3余0
因此,3即為最大公約數(shù)求最小公倍數(shù)算法:最小公倍數(shù)=兩整數(shù)的乘積÷最大公約數(shù)例4.16計(jì)算s=11+22+33+…+nn
,n由終端輸入。#include<stdio.h>main(){inti,j,n;longs,term;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版工程責(zé)任履約保障合同樣本版
- 2024年股權(quán)轉(zhuǎn)讓反擔(dān)保合同
- 聯(lián)考素描課程設(shè)計(jì)
- 蒙語人體器官結(jié)構(gòu)課程設(shè)計(jì)
- 鐵投勞務(wù)分包合同
- 2024智慧城市大數(shù)據(jù)分析與處理合同
- 云計(jì)算資源服務(wù)合同
- 二零二五年度廣告代言人合同:明星代言人聘用及權(quán)益2篇
- 課程設(shè)計(jì)拓?fù)湔n程設(shè)計(jì)
- 2025年度新型城鎮(zhèn)化項(xiàng)目代建合同性質(zhì)規(guī)定3篇
- 設(shè)備運(yùn)行售后故障響應(yīng)方案
- 個(gè)人住房質(zhì)押擔(dān)保借款合同書范本(3篇)
- 亞馬遜品牌授權(quán)書(英文模板)
- DB52∕T 046-2018 貴州省建筑巖土工程技術(shù)規(guī)范
- 醫(yī)療電子票據(jù)管理系統(tǒng)建設(shè)方案
- 火箭發(fā)動(dòng)機(jī)課件-
- 人教版小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)教學(xué)反思(46篇)
- atv61變頻器中文手冊(cè)
- 農(nóng)業(yè)機(jī)械維修業(yè)開業(yè)技術(shù)條件
- 主要零部件的設(shè)計(jì)和強(qiáng)度校核參考
評(píng)論
0/150
提交評(píng)論