C語言程序設(shè)計-循環(huán)結(jié)構(gòu)程序設(shè)計_第1頁
C語言程序設(shè)計-循環(huán)結(jié)構(gòu)程序設(shè)計_第2頁
C語言程序設(shè)計-循環(huán)結(jié)構(gòu)程序設(shè)計_第3頁
C語言程序設(shè)計-循環(huán)結(jié)構(gòu)程序設(shè)計_第4頁
C語言程序設(shè)計-循環(huán)結(jié)構(gòu)程序設(shè)計_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

模塊學(xué)習(xí)目標(biāo)1.熟練掌握VisualC++2010的C語言程序開發(fā)流程;2.熟練掌握C語言的基本數(shù)據(jù)類型、常量和變量、運(yùn)算符和表達(dá)式;3.理解輸入/輸出函數(shù)、順序結(jié)構(gòu)程序設(shè)計、選擇結(jié)構(gòu)程序設(shè)計和循環(huán)結(jié)構(gòu)程序設(shè)計;4.初步掌握利用C語言進(jìn)行軟件開發(fā)的基本方法和步驟。簡易計算器中菜單的設(shè)計項目一簡易計算器

模塊三

簡易計算器中菜單的設(shè)計

3.3循環(huán)結(jié)構(gòu)程序設(shè)計

3.3循環(huán)結(jié)構(gòu)程序設(shè)計3.3.1while語句3.3.2dowhile語句3.3.3for語句3.3.4循環(huán)的嵌套3.3.5break、continue和goto語句3.3.6典型算法舉例3.3.1while語句1、while語句的基本語法while語句在使用時,總是先要判斷一個條件,所以可以用while語句實現(xiàn)當(dāng)型循環(huán)。while語句的一般形式如下:

while(表達(dá)式)循環(huán)體;while語句的執(zhí)行流程如圖所示。3.3.1while語句2、While循環(huán)使用示例分析:本例是求1~10的累加和,即求 sum=1+2+3+…+100其中變量sum用于存放和,稱作累加變量,其初值應(yīng)設(shè)置為0;變量i用于存放1~10的每一個自然數(shù),初值取1?!纠?1】#include<stdio.h>intmain(){ inti,sum; i=1;sum=0; while(i<=100) { sum=sum+i; i=i+1; } printf("sum=%d\n",sum); return0;}運(yùn)行結(jié)果:sum=5050【例02】輸入一個正整數(shù)n,計算n!。分析:本例是求 fact=1×2×3×…×n即求n的階乘。用變量fact存放累乘的結(jié)果,稱作累乘變量,其初值應(yīng)設(shè)置為1;變量i用于存放1~n的每一個自然數(shù),初值取1。#include<stdio.h>intmain(){ inti;longn,i=2;fact=1;

printf("請輸入n的值:"); scanf("%ld",&n); while(i<=n) { fact=fact*i; i=i+1; } printf("%ld!=%ld\n",n,fact); return0;}運(yùn)行結(jié)果:請輸入n的值:1010!=36288003.3.2dowhile語句1、do-while語句的基本語法可以用do-while語句實現(xiàn)直到型循環(huán)。do-while語句的一般形式如下:

do 循環(huán)體

while(表達(dá)式);do-while語句的執(zhí)行流程如圖所示。3.3.2dowhile語句2、dowhile循環(huán)使用示例【例03】#include<stdio.h>intmain(){ inti,sum;/*定義用到的變量*/i=1;sum=0; /*變量賦初值*/do{ sum=sum+i; /*累加器,累加一個值*/i=i+1; /*累加項的增量*/}while(i<=100); /*循環(huán)的條件*/printf("sum=%d\n",sum);/*輸出累加和*/return0;}運(yùn)行結(jié)果:sum=5050輸入一個整數(shù),統(tǒng)計該數(shù)的位數(shù)?!纠?4】#include<stdio.h>intmain(){longn,m; /*定義用到的變量*/intcount=0; /*計數(shù)變量賦初值0*/printf("請輸入一個整數(shù):");scanf("%ld",&n); /*輸入整數(shù)*/m=n;if(n<0)n=-n; /*輸入的負(fù)數(shù)轉(zhuǎn)換為正數(shù)*/do /*循環(huán)入口*/{n=n/10; /*減少一位數(shù)字*/ count++; /*位數(shù)加1*/}while(n!=0); /*循環(huán)結(jié)束的條件是n=0*/

printf("整數(shù)%ld有%d位數(shù)\n",m,count);return0;}運(yùn)行結(jié)果:請輸入一個整數(shù):3276700整數(shù)3276700有7位數(shù)3.3.3for語句for語句的基本語法for語句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 循環(huán)體語句;for語句的執(zhí)行過程如下:①首先計算表達(dá)式1。②判斷表達(dá)式2,若其值為真(非0),則執(zhí)行循環(huán)體語句,然后執(zhí)行第③步;若值為假(0),結(jié)束循環(huán),轉(zhuǎn)到第⑤步執(zhí)行。③計算表達(dá)式3。④返回第②步繼續(xù)執(zhí)行。⑤循環(huán)結(jié)束,繼續(xù)執(zhí)行for語句的下一條語句。

3.3.3for語句1.可以應(yīng)用于計數(shù)型的循環(huán)格式如下:

for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增量)

循環(huán)體語句;3.3.3for語句【例05】輸入一個正整數(shù)n,求的值。

算法如下:

①循環(huán)變量賦初值:i=1。

②循環(huán)條件:i<=n。

③循環(huán)變量增量:i++。

④循環(huán)體語句:sum=sum+i。for(i=1;i<=n;i++)

sum=sum+i;程序代碼:#include<stdio.h>intmain(){inti,n,sum; printf("Inputn:");/*輸入提示*/ scanf("%d",&n);/*調(diào)用scanf函數(shù)輸入n*/ sum=0;/*置累加和sum的初值為0*/ for(i=1;i<=n;i++) /*循環(huán)執(zhí)行n次*/ sum=sum+i;/*累加器,累加i的值*/ printf("Sumofnumbersfrom1to%dis%d\n",n,sum); return0;}運(yùn)行結(jié)果:Inputn:100Sumofnumbersfrom1to100is50503.3.3for語句2.for語句的一般形式中省略表達(dá)式1格式如下:for(;表達(dá)式2;表達(dá)式3)循環(huán)體語句;說明:省略表達(dá)式1時,表示不對循環(huán)變量賦初值,這時可以將循環(huán)變量賦初值放在for之前。注意,此時不能省略第一個“;”。例如,循環(huán)語句:for(i=1;i<=n;i++)sum=sum+i;等價于:i=1;for(;i<=n;i++)sum=sum+i;3.for語句的一般形式中省略表達(dá)式2

格式如下:for(表達(dá)式1;;表達(dá)式3)循環(huán)體語句;說明:省略表達(dá)式2時,表示不對循環(huán)進(jìn)行控制,這時如果沒有其他處理的話,會形成死循環(huán)。應(yīng)避免這樣使用for結(jié)構(gòu)。例如,循環(huán)語句:for(i=1;;i++)sum=sum+i;為死循環(huán)格式如下:

for(表達(dá)式1;表達(dá)式2;)

循環(huán)體語句;

4.for語句的一般形式中省略表達(dá)式3說明:省略表達(dá)式3時,則循環(huán)變量不會增量,這時可以在循環(huán)體語句中加入修改循環(huán)變量的值的語句。例如,循環(huán)語句:for(i=1;i<=n;i++)sum=sum+i;等價于:for(i=1;i<=n;){sum=sum+i;i++;}5.for語句的一般形式中表達(dá)式1和表達(dá)式3也可以是逗號表達(dá)式例如,例5.3的程序段:sum=0; /*置累加和sum的初值為0*/for(i=1;i<=n;i++) /*循環(huán)執(zhí)行n次*/sum=sum+i; /*累加器,反復(fù)累加i的值*/等價于:for(sum=0,i=1;i<=n;i++)/*循環(huán)執(zhí)行n次*/sum=sum+i; /*累加器,反復(fù)累加i的值*/表達(dá)式sum=0,i=1稱為逗號表達(dá)式。6.for語句的一般形式中表達(dá)式2的值只要非0,就執(zhí)行循環(huán)體例如:for(;(ch=getchar())!='\n';)printf("%c",ch);其中g(shù)etchar()函數(shù)的功能是:由鍵盤讀入一個字符。7.for語句的一般形式中循環(huán)體語句可以省略例如,例5.3的循環(huán)語句:for(i=1;i<=n;i++)/*循環(huán)執(zhí)行n次*/ sum=sum+i;/*累加器,反復(fù)累加i的值*/等價于:for(i=1;i<=n;sum=sum+i,i++); /*循環(huán)執(zhí)行n次,并實現(xiàn)累加*/【例06】編寫程序,輸入10個數(shù),輸出其中的最大數(shù)。#include<stdio.h>intmain(){ inti; floatx,max; printf("請輸入第1個數(shù):"); scanf("%f",&x); max=x; for(i=1;i<=9;i++) {printf("請輸入第%d個數(shù):",i+1); scanf("%f",&x); if(x>max) max=x; } printf("10個數(shù)的最大值是:%.0f",max); return0;}

請輸入第1個數(shù):8請輸入第2個數(shù):11請輸入第3個數(shù):4請輸入第4個數(shù):6請輸入第5個數(shù):32請輸入第6個數(shù):12請輸入第7個數(shù):16請輸入第8個數(shù):23請輸入第9個數(shù):31請輸入第10個數(shù):1910個數(shù)的最大值是:32【例07】編寫程序,輸出所有的水仙花數(shù)。#include<stdio.h>intmain(){intnumber,a,b,c; for(number=100;number<=999;number++) { a=number/100; /*取得百位數(shù)*/ b=number%100/10; /*取得十位數(shù)*/ c=number%10; /*取得個位數(shù)*/ if(number==a*a*a+b*b*b+c*c*c) printf("%5d",number); } return0;}

運(yùn)行結(jié)果:153370371407【例08】編寫程序,由鍵盤輸入一個正整數(shù),判斷其是否為素數(shù)。

#include<stdio.h>intmain(){inti,flag,number;printf("請輸入一個正整數(shù):");scanf("%d",&number);flag=1; for(i=2;i<=number-1&&flag;i++) if(number%i==0) flag=0; if(flag) printf("%d是素數(shù)\n",number);else printf("%d不是素數(shù)\n",number); return0;}運(yùn)行結(jié)果1:請輸入一個正整數(shù):1111是素數(shù)運(yùn)行結(jié)果2:請輸入一個正整數(shù):1212不是素數(shù)【課堂思考】關(guān)于語句,下面說法中正確的是

。A.do-while語句的循環(huán)體至少會被執(zhí)行1次B.while語句的循環(huán)體至少會被執(zhí)行1次C.for語句的循環(huán)體至少會被執(zhí)行1次D.在C語言中只能用for、do或do-while語句實現(xiàn)循

環(huán)結(jié)構(gòu)3.3.4循環(huán)的嵌套

當(dāng)一個循環(huán)的循環(huán)體內(nèi)又包含了另一個完整的循環(huán)結(jié)構(gòu)時,稱為循環(huán)的嵌套或者是二重循環(huán)。根據(jù)問題的需要,可以構(gòu)成三重及以上的循環(huán)嵌套結(jié)構(gòu),但一般情況下最多使用到三重循環(huán)。使用for語句、while語句及do-while語句相互嵌套,構(gòu)成的嵌套結(jié)構(gòu)有以下幾種。#include<stdio.h>intmain(){inti,j;/*定義用到的變量*/for(i=1;i<=9;i++)/*外循環(huán)控制輸出9行*/{for(j=1;j<=i;j++)/*內(nèi)循環(huán)控制每行輸出i列*/printf("%d*%d=%d\t",j,i,j*i);/*輸出格式控制*/printf("\n");/*控制換行*/}return0;}例09編寫程序,輸出乘法口訣表運(yùn)行結(jié)果:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81例10求100以內(nèi)的素數(shù)。要求每行輸出10個。#include<stdio.h>#include<math.h>intmain(){inti,n,k,count=0;n=2;/*外循環(huán)控制變量賦初值*/while(n<100)/*外循環(huán)控制*/{k=sqrt(n);/*內(nèi)循環(huán)中的變量賦初值*/for(i=2;i<=k;i++)/*內(nèi)循環(huán)控制*/if(n%i==0)break;/*不是素數(shù)則跳出內(nèi)循環(huán)*/if(i>k){printf("%4d",n);/*是素數(shù)則將其輸出*/if(++count%10==0)printf("\n");/*控制每行輸出10個*/}n++;}return0;}運(yùn)行結(jié)果:23571113171923293137414347535961677173798389971、break語句break語句通常用在循環(huán)語句和switch語句中。break語句在switch語句中的用法第4章已經(jīng)介紹,這里不再贅述。break語句的一般形式如下:

break;3.3.5改變循環(huán)結(jié)構(gòu)的跳轉(zhuǎn)語句【例11】分析下面程序的運(yùn)行結(jié)果。#include<stdio.h>intmain(){ inti=5; do {if(i%3==1) if(i%5==2) {printf("%d",i); break; } i++; }while(i!=0); return0;}運(yùn)行結(jié)果為72、continue語句continue語句的作用是跳過循環(huán)體中continue后面的語句,繼續(xù)下一次循環(huán)。continue語句只能用在循環(huán)語句中,常與if條件語句一起使用。continue語句的一般形式如下:

continue;【例12】把1~100之間能被7整除的數(shù),以每行5個的形式在屏幕上輸出。#include<stdio.h>intmain(){ inti,n=1; for(i=1;i<=100;i++) {if(i%7!=0) continue;/*若不能被7整除,繼續(xù)下一次循環(huán)*/ printf("%4d",i); if(n++%5==0)printf("\n");/*控制每行輸出5個*/ } return0;}運(yùn)行結(jié)果:

714212835424956637077849198除了for語句、while語句及do-while循環(huán)語句之外,在C語言中,還有一種可以實現(xiàn)循環(huán)控制的語句,即goto語句。goto語句的一般形式如下:

goto語句標(biāo)號;說明:語句標(biāo)號是一個有效的標(biāo)識符,使用時在語句標(biāo)號的后面跟一個“:”出現(xiàn)在函數(shù)中某語句的前面。程序執(zhí)行到goto語句時,會控制跳轉(zhuǎn)到該語句標(biāo)號處,達(dá)到控制循環(huán)的目的。3、goto語句#include<stdio.h>intmain(){ inti,sum; i=1;sum=0; loop:if(i<=100) /*loop為goto跳轉(zhuǎn)的語句標(biāo)號*/ { sum=sum+i; i=i+1; gotoloop; /*跳轉(zhuǎn)到語句標(biāo)號loop處繼續(xù)執(zhí)行*/ } printf("sum=%d\n",sum); /*輸出累加和*/ return0;}運(yùn)行結(jié)果:sum=5050【例06】3.3.6典型算法舉例在解決實際問題的過程中,經(jīng)常要用到一些典型的算法,熟悉并掌握這些算法,對提高程序設(shè)計的技能與技巧很有幫助。本節(jié)介紹常用的遞推法、迭代法及窮舉法。1.遞推法【例14】猴子吃桃問題:猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還覺得不過癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第十天早上時,只剩下一個桃子了。問第一天共摘了多少桃子。

分析:設(shè)前一天的桃子數(shù)用d1表示,后一天的桃子數(shù)用d2表示,則根據(jù)題意有d1=(d2+1)*2現(xiàn)已知第十天只剩下一個桃子,可根據(jù)上面的式子計算出第九天的數(shù)量為(1+1)*2=4。即已知第十天,可計算第九天的數(shù)量;再根據(jù)第九天的數(shù)量計算出第八天的數(shù)量,…,最后倒推出第一天的數(shù)量。#include<stdio.h>intmain(){ intday,d1,d2; day=9; d2=1; do {d1=(d2+1)*2; d2=d1; --day; } while(day>0); printf("thetotalis%d\n",d1); return0;}運(yùn)算結(jié)果:thetotalis15342.迭代法用迭代法求某數(shù)a的平方根,已知求平方根的迭代公式為:利用以上迭代公式求出a的平方根的算法步驟如下:可自定一個值作為x0的初值,這里取a/2作為x0

的初值,利用迭代公式x1=(x0+a/x0)/2求出一個x1的值。把新求得的x1的值賦給x0,準(zhǔn)備用此新的x0

再去求出一個新的x1。利用迭代公式再求出一個新的x1

值,也就是用新的x0再求出一個新的平方根值x1,此值將更趨近真正的平方根值。比較前后兩次所求得的平方根值x0

和x1,若它們之間的誤差小于或等于指定的值,則認(rèn)為x1

就是a的平方根值,執(zhí)行步驟(5);若它們之間的誤差大于指定的值,則再轉(zhuǎn)去執(zhí)行步驟(2),即繼續(xù)循環(huán)進(jìn)行迭代運(yùn)算。輸出a的平方根值01#include<stdio.h>02#include<math.h>03main()04 {floata,x0,x1;05 printf("Inputa:");scanf("%f",&a);06 if(a<0)07 printf("error!\n");/*不能求負(fù)數(shù)的平方根*/08 else09 {x0=a/2;/*先定義X0初值*/10 x1=(x0+a/x0)/2;11 do12 {x0=x1;x1=(x0+a/x0)/2;13 }while(fabs(x0-x1)>1e-6);/*fabs為求絕對值的函數(shù)*/14 printf("sqrt(%f)=%f標(biāo)準(zhǔn):sqrt(%f)=%f\n",a,x1,a,sqrt(a));15 }16 }Inputa:6Sqrt(6.000000)=2.449490標(biāo)準(zhǔn):

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論