《C語言程序設(shè)計(jì)》第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)寫字字帖_第1頁(yè)
《C語言程序設(shè)計(jì)》第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)寫字字帖_第2頁(yè)
《C語言程序設(shè)計(jì)》第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)寫字字帖_第3頁(yè)
《C語言程序設(shè)計(jì)》第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)寫字字帖_第4頁(yè)
《C語言程序設(shè)計(jì)》第4章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)寫字字帖_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論