




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)6.1引例【例6-1】求1~100的累計(jì)和。設(shè)置一個(gè)累計(jì)器sum,其初值為0,利用sum+=n來(lái)計(jì)算(n依次取1、2、……、100),只要解決以下3個(gè)問(wèn)題即可:(1)將n的初值置為1;(2)每執(zhí)行1次“sum+=n”后,n增1;(3)當(dāng)n增到101時(shí),停止計(jì)算。此時(shí),sum的值就是1~100的累計(jì)和。C語(yǔ)言中,可用以下語(yǔ)句實(shí)現(xiàn)循環(huán)(1)用for語(yǔ)句。(2)用do-while語(yǔ)句。(3)用while語(yǔ)句。(4)用goto語(yǔ)句和if語(yǔ)句構(gòu)成循環(huán)。6.2while語(yǔ)句1.語(yǔ)句格式:while(表達(dá)式) {循環(huán)體語(yǔ)句組;}
如果循環(huán)體只有一條語(yǔ)句,{}可以省略while(表達(dá)式)
循環(huán)體語(yǔ)句;2.執(zhí)行過(guò)程:
3.特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體語(yǔ)句。
【例6-2】用while語(yǔ)句求1~100的累計(jì)和。main(){intsum=0,n=1;/*定義并初始化循環(huán)控制變量,以及累計(jì)器*/while(n<=100){sum+=n;/*實(shí)現(xiàn)累加*/n++;/*循環(huán)控制變量n增1*/}printf("sum=%d\n",sum);}【例6-3】用while語(yǔ)句求n!main(){intn,i=1;longints=1;/*求乘積時(shí),乘積s應(yīng)賦初值1*/printf("pleaseinputn:");scanf("%d",&n);while(i<=n){s*=i;i++;/*循環(huán)控制變量i增1*/}printf("%d!=%ld\n",n,s);/*%ld表示輸出長(zhǎng)整形變量*/}輸入一字符串,統(tǒng)計(jì)其中字母、數(shù)字以及其他字符的個(gè)數(shù)main(){intletter=0,number=0,other=0;/*定義各變量并賦初值0*/charc; /*字符變量c存放輸入的逐個(gè)字符*/ c=getchar(); while(c!='\n') /*輸入回車('\n')時(shí),結(jié)束*/{ if(c>='a'&&c<='z'||c>='A'&&c<='Z') letter++; /*若為字母,則letter加1*/ else if(c>='0'&&c<='9') number++; /*若為數(shù)字,則number加1*/ else other++; /*否則,則other加1*/ c=getchar(); /*輸入下一字符*/}printf("Theletter:%d\nThenumber:%d\n",letter,number); printf("Theother:%d\n",other); /*輸出結(jié)果*/}6.3do-while語(yǔ)句1.語(yǔ)句格式:do{循環(huán)體語(yǔ)句組;}while(表達(dá)式);2.執(zhí)行過(guò)程3.特點(diǎn)
先執(zhí)行循環(huán)體語(yǔ)句組,然后再判斷循環(huán)條件。因此循環(huán)體至少被執(zhí)行一次?!纠?-4】用do-while語(yǔ)句求解1~100的累計(jì)和main(){intsum=0,n=1;/*定義并初始化循環(huán)控制變量,以及累計(jì)器*/do {sum+=n;/*實(shí)現(xiàn)累加*/n++;/*循環(huán)控制變量n增1*/ }while(n<=100);printf("sum=%d\n",sum);}【例6-5】用do-while語(yǔ)句求n!main(){intn,i=1;longints=1; /*求乘積時(shí),乘積s應(yīng)賦初值1*/printf("pleaseinputn:");scanf("%d",&n);do{s*=i;i++;/*循環(huán)控制變量i增1*/}while(i<=n);/*";"不可省*/printf("%d!=%ld\n",n,s);}6.4for語(yǔ)句1.語(yǔ)句格式:
for([表達(dá)式1];[表達(dá)式2];[表達(dá)式3]) {循環(huán)體語(yǔ)句組;}
2.執(zhí)行過(guò)程:
【例6-6】用for語(yǔ)句求解1~100的累計(jì)和main(){inti,sum=0; /*將累加器sum初始化為0*/for(i=1;i<=100;i++)/*實(shí)現(xiàn)累加,循環(huán)結(jié)束時(shí)i=101*/sum+=i;printf("sum=%d\n",sum);}【例6-7】用for語(yǔ)句求n!main(){intn,i=1;longintfact=1;/*求乘積時(shí),乘積fact應(yīng)賦初值1*/printf("pleaseinputn:");scanf("%d",&n);for(i=1;i<=n;i++)fact*=i;printf("%d!=%ld\n",n,fact); }3.說(shuō)明:
(1)“表達(dá)式1”、“表達(dá)式2”和“表達(dá)式3”部分均可缺省,甚至全部缺省,但其間的分號(hào)“;”絕對(duì)不能省略i=1;/*循環(huán)變量賦初值部分提前*/for(;i<=100;i++)/*省略“表達(dá)式1”*/sum+=i;for(i=1;i<=100;)/*省略“表達(dá)式3”*/{sum+=i;i++; /*“表達(dá)式3”,作為循環(huán)體的一部分*/}/*省略“表達(dá)式1”和“表達(dá)式3”*/
i=1;for(;i<=100;){sum=sum+i;i++;}表達(dá)式1可以是逗號(hào)表達(dá)式for(sum=0,i=1;i<=100;i++)sum+=i; 找出1000以內(nèi)的所有水仙花數(shù)水仙花數(shù)是每一位的立方和等于本身的三位數(shù),如153滿足,就是水仙花數(shù)。令,a、b、c分別為m的百位、十位和個(gè)位,如果m==a*a*a+b*b*b+c*c*c成立,則m為水仙花數(shù),輸出該數(shù)求Fibonacci數(shù)列的前20項(xiàng),以及這20項(xiàng)之和f1=1,f2=1,fn=fn-1+fn-2(n>=3),即從第3項(xiàng)開(kāi)始,每一項(xiàng)等于前2項(xiàng)之和6.5幾種循環(huán)的比較1.while語(yǔ)句和do-while語(yǔ)句的區(qū)別
【例6-8】用while語(yǔ)句編寫(xiě)程序,寫(xiě)出其運(yùn)行結(jié)果【例6-9】用do-while語(yǔ)句編寫(xiě)程序,寫(xiě)出其運(yùn)行結(jié)果2.三種語(yǔ)句在程序設(shè)計(jì)中的選擇(1)如果循環(huán)次數(shù)在執(zhí)行循環(huán)體之前就已確定,一般用for語(yǔ)句;如果循環(huán)次數(shù)是由循環(huán)體的執(zhí)行情況確定的,一般用while語(yǔ)句或者do-while語(yǔ)句。(2)當(dāng)循環(huán)體至少執(zhí)行一次時(shí),用do-while語(yǔ)句;如果循環(huán)體可能一次也不執(zhí)行,選用while語(yǔ)句。6.6循環(huán)的嵌套1.循環(huán)嵌套的概念一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套
2.循環(huán)嵌套的基本形式
3.循環(huán)嵌套的執(zhí)行過(guò)程外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)執(zhí)行一遍
for(i=0;i<=2;i++) {for(j=1;j<=4;j++)a++;}【例6-11】編程輸出九九乘法表main(){ inti,j; for(i=1;i<=9;i++)/*i從1到9,表示輸出9行*/{for(j=1;j<=i;j++)
printf("%d*%d=%-3d",j,i,i*j);
printf("\n"); /*換行輸出*/}}【例6-10】編程輸出以下形式的正三角形main(){ inti,j; for(i=1;i<=5;i++) /*i從1到5,表示輸出5行*/{for(j=1;j<=20-i;j++)/*輸出每一行的空格*/printf("");for(j=1;j<=2*i-1;j++)/*輸出每一行的“*”*/printf("*");printf("\n");/*換行輸出,此語(yǔ)句丟失將在一行內(nèi)輸出*/}}6.7break和continue語(yǔ)句1.語(yǔ)句格式:
break;
continue;
2.功能
(1)在循環(huán)體內(nèi),迫使所在循環(huán)體立即終止,即結(jié)束循環(huán),轉(zhuǎn)向執(zhí)行循環(huán)體后面的語(yǔ)句。(2)continue:結(jié)束本次循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句。對(duì)于for循環(huán),轉(zhuǎn)向循環(huán)變量增量“表達(dá)式3”的計(jì)算;對(duì)于while和do-while循環(huán),轉(zhuǎn)向循環(huán)繼續(xù)條件的判定。設(shè)圓半徑為1~10之間的正整數(shù),面積小于200,輸出所有滿足條件的圓面積#definePI3.1415926main(){ intr; floatarea; for(r=1;r<=10;r++){area=PI*r*r;if(area>=200)break;/*area>=200,結(jié)束循環(huán)*/printf("r=%d,area=%6.2f\n",r,area);}}【例6-13】把100~200之間的不能被3整除的數(shù)輸出main(){ inti; for(i=100;i<=200;i++){if(i%3==0)continue;printf("%d",i);}}【例6-14】求main(){ longintsum=0,t; /*t中存放每一項(xiàng)的值*/inti,j;for(i=1;i<=20;i++)/*循環(huán)20次,計(jì)算20項(xiàng)和*/{t=1;for(j=1;j<=i;j++)t=t*j;sum=sum+t; /*將該項(xiàng)加入sum中*/}printf("sum=%ld\n",sum);}main(){ longintsum=0,t=1;/*t中存放每一項(xiàng)的值*/ inti; for(i=1;i<=20;i++)/*循環(huán)20次,計(jì)算20項(xiàng)和*/{ t=t*i; sum=sum+t;/*將該項(xiàng)加入sum中*/} printf("sum=%ld\n",sum);}【例6-16】求a,-aa,aaa,-aaaa,aaaaa,…數(shù)列的前n項(xiàng)之和可以看出數(shù)列的每一項(xiàng)都是由其前一項(xiàng)按照一定的方法得到的即main(){ floatsum=0,f;/*sum表示數(shù)列和,f表示數(shù)列中的每一項(xiàng)*/ inta,n,i,p;/*n表示數(shù)列的項(xiàng)數(shù),p表示符號(hào)的變化*/ printf("pleaseinputaandn:"); scanf("%d,%d",&a,&n); f=a; /*f存放第一項(xiàng)的值*/ p=1; /*第一項(xiàng)p的符號(hào)為正*/ for(i=1;i<=n;i++){sum=sum+p*f; /*累加求和*/p=-p; /*下一項(xiàng)與前一項(xiàng)的符號(hào)相反*/f=10*f+a; /*求下一項(xiàng)的值*/} printf("sum=%.0f\n",sum);}【例6-17】計(jì)算直到最后一項(xiàng)的絕對(duì)值小于時(shí)為止#include"math.h"main(){ floatsum=0,t,x,n=1; printf("pleaseinputx:"); scanf("%f",&x); t=x; do{sum=sum+t; /*累加求和*/n=n+2; /*該數(shù)列只含有奇數(shù)項(xiàng)*/t=t*(-x*x)/((n-1)*n); /*求下一項(xiàng)的值*/} while(fabs(t)>=1e-7); /*fabs():求絕對(duì)值函數(shù)*/ printf("sin(%f)=%f\n",x,sum);}【例6-19】判斷某一正整數(shù)是否為素?cái)?shù)分析:所謂素?cái)?shù)就是除了1和本身,再無(wú)別的約數(shù)的正整數(shù)(即數(shù)學(xué)上的質(zhì)數(shù))根據(jù)素?cái)?shù)的定義,用2~(n-1)之間的每一個(gè)數(shù)去整除n,如果都不能被整除,則表示該數(shù)是一個(gè)素?cái)?shù)。判斷一個(gè)數(shù)是否能被另一個(gè)數(shù)整除,可通過(guò)判斷它們整除的余數(shù)是否為0來(lái)實(shí)現(xiàn)。main(){ intn,m; printf("pleaseinputn:"); scanf("%d",&n); for(m=2;m<=n;m++) if(n%m==0)break; if(m>=n)printf("Yes!\n"); elseprintf("No!\n");}改進(jìn)算法
#include“math.h”main(){ intn,m,t,flag=1; printf("pleaseinputn:"); scanf("%d",&n);t=(int)sqrt(n); for(m=2;m<=t;m++)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)商業(yè)合作項(xiàng)目協(xié)議書(shū)
- 智慧物流解決方案合作框架協(xié)議
- 海南省部分學(xué)校2024-2025學(xué)年高三下學(xué)期學(xué)業(yè)水平診斷測(cè)試(三)地理試題(含答案)
- 法律行業(yè)法律咨詢免責(zé)聲明書(shū)
- 昆蟲(chóng)歷險(xiǎn)記觀后感
- 超前鋼管 現(xiàn)場(chǎng)質(zhì)量檢驗(yàn)報(bào)告單
- 智能酒店客房控制系統(tǒng)采購(gòu)合同
- 貨車駕駛員合同協(xié)議書(shū)
- 電子商務(wù)行業(yè)增長(zhǎng)趨勢(shì)分析表
- 林地土地承包合同
- 2025年安徽中醫(yī)藥高等??茖W(xué)校單招職業(yè)適應(yīng)性測(cè)試題庫(kù)有答案
- 北京大學(xué)DeepSeek系列-DeepSeek與AIGC應(yīng)用
- 2025年皖北衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 2025年無(wú)錫職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)完整版
- 2025年皖西衛(wèi)生職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案1套
- 《馬云創(chuàng)業(yè)經(jīng)歷》課件
- 2024年05月安徽農(nóng)商銀行系統(tǒng)社會(huì)招考計(jì)算機(jī)法律專業(yè)員工人員筆試歷年參考題庫(kù)附帶答案詳解
- 騰訊云人工智能工程師認(rèn)證考試題(附答案)
- 班級(jí)管理案例與應(yīng)用知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋哈爾濱師范大學(xué)
- 建設(shè)單位保證工程安全措施的實(shí)施方案
- 第16課數(shù)據(jù)管理與編碼(教案)四年級(jí)全一冊(cè)信息技術(shù)人教版
評(píng)論
0/150
提交評(píng)論