版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)六 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)(一),掌握while循環(huán)語句的結(jié)構(gòu)、執(zhí)行過程。 學(xué)會(huì)確定循環(huán)條件和循環(huán)體。理解死循環(huán)的概念。,? 實(shí)驗(yàn)要點(diǎn),,解析?:該題目與實(shí)驗(yàn)四中的【例4-1】相同。本題目用第二種循環(huán)格式:while循環(huán)來完成。while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu)。 一般形式:while(表達(dá)式) 循環(huán)體語句; 執(zhí)行過程: 當(dāng)表達(dá)式的值為“真”時(shí),執(zhí)行循環(huán)體語句,直到表達(dá)式的值為
2、“假”,循環(huán)終止,繼續(xù)執(zhí)行while的下一條語句。,一、程序設(shè)計(jì),,,【例6-1】求1+2+3+4+5的和。,,for語句和while語句的比較: (1)兩種語句都是先判斷表達(dá)式的值,表達(dá)式值為“真”才執(zhí)行循環(huán)體語句。 (2)for語句一般用來編寫循環(huán)次數(shù)固定的程序,而while語句一般用來編寫循環(huán)次數(shù)不固定的程序。 (3)兩種循環(huán)的循環(huán)體都只能是一條語句。,,,while語句執(zhí)行流程圖,循環(huán)體語句,表達(dá)式,,,,,
3、,,while的下一條語句,,,,,假,真,循環(huán)體語句,,,,,,,,while的下一條語句,,,,假,程序流程圖,sum=sum+ii=i+1,i<=5,,,,,,,,,,,N,Y,int i=1,sum=0,開始,,printf("%d",sum),,結(jié)束,#include "stdio.h"main(){ int i=1,sum=0; /*變量賦初值*/ while
4、(i<=5) /*循環(huán)的終止條件,每次進(jìn)入循環(huán)體先判斷*/ {sum+=i; /*等價(jià)于:sum=sum+i;*/ i++; /*循環(huán)變量增量*/ } printf("i=%d,sum=%d\n",i,sum);},源程序,i=6,sum=15,運(yùn)行結(jié)果:,,解析?:與實(shí)驗(yàn)四中的【例4-2】編程思路相同,用while循環(huán)編寫。,,,,舉一反三,【
5、6-1】求1-2+3-4+5的和。,#include "stdio.h"main(){ int i=1, sum=0,f=-1;/*變量f用來存放正負(fù)號(hào),此數(shù)賦值為-1*/ while(i<=5) { f=-f; /*先將符號(hào)處理為第一項(xiàng)需要的正號(hào)*/ sum=sum+i*f; /*i是正數(shù),變量i值乘以f,可以控制正負(fù)數(shù)*/
6、 i++; /*i變量的內(nèi)容增1*/ } printf("i=%d,sum=%d\n",i,sum);},源程序,i=6,sum=3,運(yùn)行結(jié)果:,【例6-2】輸入一個(gè)正實(shí)數(shù)eps,計(jì)算并輸出下式的值,,解析?:(1)編寫程序時(shí),不知道要計(jì)算多少項(xiàng),因此,用while循環(huán)來編寫,不用for循環(huán)。(2)eps代表特別小的數(shù),例,0.0001。由題中算
7、式可知,進(jìn)行計(jì)算的值越來越小,當(dāng)一個(gè)值小于變量eps的值時(shí),就不再進(jìn)行計(jì)算。即,只要大于或等于變量eps的值都計(jì)算。(3)由題目要求可知,分?jǐn)?shù)及它前面的正負(fù)號(hào)作為一項(xiàng),取絕對(duì)值作為循環(huán)終止條件。(4)只需定義一個(gè)控制分母的變量即可表示分?jǐn)?shù)。,,,,,(例如程序運(yùn)行后,eps被輸入0.0001)。,直到最后一項(xiàng)的絕對(duì)值小于eps。,#include "stdio.h"#include "math.h&q
8、uot;main(){double eps,sum=0,f=1,t=1; /*變量f定義為實(shí)型變量*/ int n=1;printf("Enter eps:");scanf("%lf",&eps); /*輸入一個(gè)特別小的數(shù)*/while(fabs(t)>=eps){sum=sum+t;f=-f;
9、 /*正負(fù)號(hào)轉(zhuǎn)變*/n=n+3; /*控制分母*/t=f/n; /*變量t用來存放每一項(xiàng)的值*/}printf("sum=%f\n",sum);},源程序,運(yùn)行結(jié)果:,sum=0.835599,輸入:1e-4,解析?: 本程序與【例6-2】相似。所不同的:(1)僅分?jǐn)?shù)部分作為循環(huán)
10、終止條件,不包括正負(fù)號(hào)。(2)定義兩個(gè)變量分別存放分子和分母。(3)在定義部分賦值號(hào)不能連寫。但在執(zhí)行部分賦值號(hào)可以連寫。例如: int m=n=1; 不合法 改為:int m=1,n=1; int m,n; m=n=1;,,,【6-2】輸入一個(gè)正實(shí)數(shù)eps,計(jì)算并輸出下式的值,直到最后一項(xiàng)小于eps。,舉一反三,,,,合法,#include &quo
11、t;stdio.h"main(){ double eps,sum=0,f=1,t,n=1,m=1; /*變量m和n定義實(shí)型變量*/ t=n/(m*(m+1)); /*m和n都是實(shí)型數(shù),相除結(jié)果必是實(shí)型數(shù)*/ printf("Enter eps:");scanf("%lf",&eps); while(t>=eps)
12、 /*變量t用來存放每一項(xiàng)的值*/{sum=sum+t*f;f=-f; n=n+2; /*n控制分子*/m++; /*m控制分母*/t=n/(m*(m+1)); /*分母必須用圓
13、括號(hào)括起來*/}printf("sum=%f\n",sum);},源程序,運(yùn)行結(jié)果:,sum=0.226911,輸入:0.001,【例6-3】從鍵盤輸入一批學(xué)生成績(jī)(以負(fù)數(shù)為結(jié)束標(biāo)志),計(jì)算平均分,并統(tǒng)計(jì)不及格成績(jī)的個(gè)數(shù)。,解析?: 由題意可知,在程序運(yùn)行過程中需要輸入若干個(gè)數(shù)據(jù),每輸入一個(gè)數(shù),需判斷是否是小于60的數(shù),因此,需要用循環(huán)結(jié)構(gòu)來編寫。輸入的數(shù)據(jù)為負(fù)數(shù)時(shí)循環(huán)終止。,,,,#include m
14、ain(){float grade,ave=0; /*變量ave用來存放總成績(jī)和平均分*/int n=0,m=0;printf("Enter grade:");scanf(“%f”,&grade);/*輸入第一個(gè)成績(jī),它是循環(huán)變量的初值*/while(grade>=0) /*輸入數(shù)據(jù)大于等于0時(shí),執(zhí)行循環(huán)體*/{ ave=ave+gra
15、de; /*成績(jī)累加*/ n++; /*統(tǒng)計(jì)學(xué)生人數(shù)*/ if(grade<60) m++; /*統(tǒng)計(jì)不及格人數(shù)*/ scanf("%f”,&grade); /*輸入新成績(jī)?yōu)橄乱淮窝h(huán)做準(zhǔn)備*/}ave=ave/n;
16、 /*計(jì)算平均值*/printf("平均分=%f,不及格人數(shù)=%d\n",ave,m);},源程序,運(yùn)行結(jié)果:,平均分=75.199997,不及格人數(shù)=1,輸入:67 89 77 98 45 -1,輸入:66 77 88 99 100 -5,運(yùn)行結(jié)果:,平均分=86.000000,不及格人數(shù)=0,注意:輸入項(xiàng)之間可以用空格或回車分隔開。,【6-3】讀入一批正整數(shù)(以零
17、或負(fù)數(shù)為結(jié)束標(biāo)志),求,解析?:該題目與【例6-3】相似。,,,,舉一反三,,其中的奇數(shù)和。,#include main(){ int x,n=0,sum=0; /*x用來存放正整數(shù)*/ scanf("%d",&x); /*x獲得第一個(gè)數(shù),也是循環(huán)變量初值*/ while(x>0) /*只要變量x的值大于0,都執(zhí)行循環(huán)體*/ {
18、if(x%2) /*等價(jià)于 if(x%2!=0)或if(x%2==1)*/ sum+=x; /*等價(jià)于sum=sum+x;*/ scanf("%d",&x); /*再一次給變量x賦值*/ } printf("奇數(shù)之和=%d\n",sum);},源程序,輸 入:1 2 3 4 5 6 7
19、 0,運(yùn)行結(jié)果:,奇數(shù)之和=16,1、下述程序按由大到小的順序輸出10以內(nèi)的正整數(shù)。,二、程序改錯(cuò),解析?:本程序需輸出10個(gè)數(shù)。既可以用for循環(huán)也可以用while循環(huán)來編寫。,main(){ int k=10; while(k>0) /********found********/ printf("%d, ",k);k=k-1;},源程序:,錯(cuò)誤解析:,found:變量k的初值為
20、10。只要k的值大于0,就執(zhí)行循環(huán)體。即, 輸出這個(gè)數(shù),輸出完畢,k的值減1,為下一次循環(huán)做準(zhǔn)備。 由此可見,循環(huán)體應(yīng)有兩條語句: printf("%d, ",k);和k=k-1; 所給源程序中循環(huán)體只有一條語句:
21、 printf("%d, ",k); 這種編程方式執(zhí)行的結(jié)果是死循環(huán)。 因?yàn)閗=k-1 ;這條語句只有退出循環(huán)體才能執(zhí)行,因此, 變量k的值永遠(yuǎn)都是10。變量k的值為10,永遠(yuǎn)都滿足循環(huán)條件,則循環(huán)體永遠(yuǎn)都執(zhí)行。這種循環(huán)方式稱為“死循環(huán)”。改正為:{printf("%d, ",k);k=k-1;},
22、2、修改下列程序,使之能夠正確輸出1~20之間的數(shù)的和(輸出一次和值)。,解析?:由題目可知,求1~20的累加和。即可以用for循環(huán),也可以 用while循環(huán)編寫程序。,main(){ int i=1,sum=0; /******found******/ while(i<=20); { sum+=i; i++; } printf("%d\n,
23、 ",sum);},源程序:,錯(cuò)誤解析:,found:while圓括號(hào)的后面有一個(gè)空語句“;”。在此源程序中 該空語句是while循環(huán)的循環(huán)體。而由題意可知,循環(huán) 體應(yīng)為: { sum+=i; i++;
24、 } 改正為:while(i<=20),1、從鍵盤上輸入若干學(xué)生的成績(jī),統(tǒng)計(jì)并輸出最高成績(jī)和最低成績(jī),當(dāng)輸入負(fù)數(shù)時(shí)結(jié)束輸入。,三、程序填空,解析?:將在鍵盤上截得的第一個(gè)數(shù)值,分別賦給用來存放最大值和最小值的變量作為初值。之后每截得一個(gè)數(shù)值就與存放最大值和最小值的變量?jī)?nèi)容進(jìn)行比較,根據(jù)條件是否滿足執(zhí)行不同的語句。,#include main(){ float x,amax,amin; scanf(&quo
25、t;%f",&x); amax=x; amin=x; while( 【1】 ) { if(x>amax) amax=x; if( 【2】 ) amin=x; scanf("%f",&x); } printf("\nmax=%f\nmin=%f\n",amax,amin);},源程序:,【
26、1】此處應(yīng)填寫循序的終止條件 填空為: x>=0【2】此處用變量x的值和存放最小值變量amin的值進(jìn)行比較。 填空為: x<amin,填空解析:,2、從鍵盤輸入多個(gè)字符,直到遇到回車換行符為止,分別統(tǒng)計(jì)其中字母、數(shù)字字符和其他字符個(gè)數(shù)。,解析?:此題與【例5-2】類似。所不同的,此題不知道循環(huán)多少次,最好用while循環(huán)編寫。循環(huán)的終止條件是:截取到的字符為回車換行符為止。,#include m
27、ain( ){ char ch; int letter=0,digit=0,other=0; while( 【1】 ) if((ch>='a'&&ch=‘A’&&ch='0'&&ch<='9') digit++; else other++; printf
28、("letter=%d,digit=%d,other=%d",letter,digit,other);},源程序:,輸 入:1a* T5& 9,運(yùn)行結(jié)果:,letter=2,digit=3,other=5,【1】此處應(yīng)填寫循序的終止條件 填空為: ch!='\n',填空解析:,3、輸入一個(gè)實(shí)數(shù)x,計(jì)算并輸出下式的值,直到最后一項(xiàng)的值小于10-5(保留兩位小數(shù))。,解
29、析?:此題與【例5-2】類似。所不同的,此題不知道循環(huán)多少次,最好用while循環(huán)編寫。循環(huán)的終止條件是:截取到的字符為回車換行符為止。,,#include "stdio.h"main(){float x,t,s=0;int i=1;scanf("%f",&x);t=x; /*t用來存放每一項(xiàng)*/while(【1】){ s=s+t;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 實(shí)驗(yàn)六 中斷系統(tǒng)實(shí)驗(yàn)
- 實(shí)驗(yàn)五、六
- 實(shí)驗(yàn)六實(shí)驗(yàn)六數(shù)據(jù)完整性的實(shí)現(xiàn)
- 實(shí)驗(yàn)六細(xì)菌生理生化實(shí)驗(yàn)
- jdbc實(shí)驗(yàn)六 游標(biāo)
- 實(shí)驗(yàn)六會(huì)話bean
- 網(wǎng)基實(shí)驗(yàn)六
- 實(shí)驗(yàn)六vlan配置-
- 實(shí)驗(yàn)六 存儲(chǔ)管理
- 實(shí)驗(yàn)六 電壓比較器
- 實(shí)驗(yàn)六、動(dòng)物去腦
- 實(shí)驗(yàn)六 觸發(fā)器
- 六、七章實(shí)驗(yàn)指導(dǎo)
- 莒縣第六實(shí)驗(yàn)小學(xué)
- 實(shí)驗(yàn)六 生成樹配置
- 實(shí)驗(yàn)六_分支限界法
- 六、七章實(shí)驗(yàn)指導(dǎo)
- 實(shí)驗(yàn)六 機(jī)電系統(tǒng)創(chuàng)意組裝實(shí)驗(yàn)報(bào)告
- 實(shí)驗(yàn)六--圓曲線測(cè)設(shè)
- 實(shí)驗(yàn)六 循環(huán)移位燈設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論