




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章循環(huán)結(jié)構(gòu)【練習4-1】在例4-1程序中,如果對item賦初值0,運行結(jié)果就是什么?為 什么?如果將精度改為10-3運行結(jié)果有變化不?為什么? 解答:如果對item賦初值0,則程序運行結(jié)果就是pi=0,因為item為0時不 滿足while循環(huán)的執(zhí)行條件,即不執(zhí)行循環(huán),故pi值為0。如果將精度改為 10-3,運行結(jié)果會有變化,因為精度改變意味著while循環(huán)的條件改變,精度變 大使得while循環(huán)次數(shù)減少,必然影響到n的值。【練習4-2】 運行例4-2程序時,如果將最后一個輸入數(shù)據(jù)改為-2,運行結(jié)果 有變化不?如果第一個輸入數(shù)據(jù)就是-1,運行結(jié)果就是什么?為什么? 解答:如果將最后一個輸入數(shù)
2、據(jù)改為-2,運行結(jié)果沒有變化,因為最后一個負數(shù)就 是一結(jié)束標志,不進行統(tǒng)計,故任意一個負數(shù)都可以。如果第一個輸入數(shù)據(jù)就是-1, 運行結(jié)果就是:Grade averageis 0,因為第一個輸入就就是-1,則while循環(huán)條 件不成立,不執(zhí)行循環(huán)體。【練習4-3】序列求與(1-1/4+1/7-1/10+1/13-1/16+):輸入一個正實數(shù)eps, 計算序列1T/4+1/7T/10+1/13T/16+的值,精確到最后一項的絕對值小于 eps(保留6位小數(shù))。試編寫相應程序。解答:#include #include int main(void)(int denominator, flag;doub
3、le item, s,eps;printf( Input eps:);scanf(%lf,&eps);flag = 1;denominator = 1 ;item = 1、 0;s = 0;while(fabs (item) = eps) (item = flag * 1、0 / denominator;s = s + item;flag = -flag;denominator = denominator +3;printf ( s = %fn, s);return 0;【練習4-4】如果將例4-3程序中的do-while語句改為下列while語句,會 影響程序的功能不?為什么?再增加一條什么
4、語句,就可以實現(xiàn)同樣的功能? while(number != 0)(number = number / 10;count +;解答:會有影響,因為當輸入數(shù)據(jù)number為0時,上述while循環(huán)將不執(zhí) 行,count值仍為0,故輸出為0,不符合題目要求。可增加一條if語句來解決 上面的問題,在while循環(huán)前加上語句if ( number=0) count=1;。【練習4-5】例4-4程序中的第915行可以用下列for語句替代不?為什 么?for( i = 2; i = m/2; i+)if( m%i = 0 ) printf(No!n);else printf(%d is prime num
5、ber!n,m);解答:不能代替,因為只用一個數(shù)來除不足以判斷該數(shù)就是否就是素數(shù)。【練習4-6】猜數(shù)字游戲:先輸入2個不超過100的正整數(shù),分別就是被猜數(shù) mynumber與允許猜測的最大次數(shù)n,再輸入您所猜的數(shù)yournumber,與被猜數(shù) mynumber進行比較,若相等,顯示猜中,;若不等,顯示與被猜數(shù)的大小關(guān)系,最多 允許猜n次。如果1次就猜出該數(shù),提示“ Bingo!” ;如果3次以內(nèi)猜到該數(shù),則 提示“Lucky You!”;如果超過3次但不超過n次猜到該數(shù),則提示“Good Guess! ” 如果超過n次都沒有猜到,則提示“Game Over”;如果在到達n次之前,用戶輸入 了一
6、個負數(shù),也輸出“Game Over”,并結(jié)束程序。試編寫相應程序。解答:#includeint main(void)(int mynumber,n,yournumber,i;printf(Input mynumber:);scanf(d,&mynumber);printf(Input n:);scanf(%d”,&n);for(i=1;i3&i=n)&yournumber=mynumber)(printf(Good Guess!”);break;if(i=n&mynumber!二yournumber)|mynumber0|yournumber0) printf(Game Over!);brea
7、k;return 0;【練習4-7】求e的值:輸入1個正整數(shù)n,計算下式求出e的值(保留2位小 數(shù)),要求使用嵌套循環(huán)。試編寫相應程序。e = 1 + 1/1!+1/ 2!+1/ 3!+-+1/n!解答:#includeint main(void)(int i, j, n;double e, t;printf(Input n:);scanf(%d, &n);e = 1;for (i = 1; i = n; i+)(t=1;for(j=1;j=i;j+)t=t * j;e = e+ 1、 0/t;printf(e=%0、 2fn, e)return 0;【練習4-8】運行例4-8的源程序1時,如
8、果先輸入0,即輸入數(shù)據(jù)個數(shù)n=0, 表示不再輸入任何成績,運行結(jié)果就是什么?如何修改程序以應對這種情況? 解答:當輸入數(shù)據(jù)個數(shù)n = 0時,由于在for循環(huán)外首先得輸入一個成績,故程序 仍將等待輸入第一個人的成績,這與輸入個數(shù)n = 0矛盾,可修改如下: #include int main(void) (int i, mark, max, n;printf(Enter n:);scanf (%d, &n);if (n0) (printf(Enter %d marks: , n);scanf (%d, &mark);/* 讀入第一個成績 */max = mark;/*假設(shè)第一個成績就是最高分*/
9、for (i = 1; i n; i+ )(scanf (%d, &mark);if (max mark)max = mark;printf(Max = %dn, max);return 0;【練習4-9】運行例4-8的源程序2時,如果輸入的第一個數(shù)就就是負數(shù),表示 不再輸入任何成績,運行結(jié)果就是什么?如何修改程序以應對這種情況? 解答:當輸入的第一個數(shù)就就是負數(shù)時,將不執(zhí)行while循環(huán),程序運行結(jié)果就就 是輸出所輸入的負數(shù)。【練習4-10】找出最小的值:輸入一個正整數(shù)n,再輸入n個整數(shù),輸出最小 值。試編寫相應程序。解答:#include int main(void)(int i , mi
10、n, n, x;printf(inputr n:);scanf(%d, &n);printf(input numbers:);scanf(%d, &x);min = x;for (i = 1; i x)min = x;printf(min = %dn, min);return 0;【練習4-11】統(tǒng)計素數(shù)并求與:輸入2個正整數(shù)m與n(1WmWnW500),統(tǒng)計并 輸出m與n之間素數(shù)的個數(shù)以及這些素數(shù)的與。素數(shù)就就是只能被1與自身整 除的正整數(shù),1不就是素數(shù),2就是素數(shù)。試編寫相應程序。解答:#include#includeint main(void)(int i,m,n,j,count;dou
11、ble sum;printf(Enter m:);scanf(d,&m);printf(Enter n:);scanf(%d”,&n);count=0;sum=0;for(;m=n;m+)j=sqrt(m);for(i=2;ij&m!=1)sum=sum+m;count+;printf(count=%dnsum=%、0lf,count,sum);return 0;習題4選擇題C語言中while與do-while循環(huán)的主要區(qū)別就是A 。do-while的循環(huán)體至少無條件執(zhí)行一次while的循環(huán)控制條件比do-while的循環(huán)控制條件嚴格do-while允許從外部轉(zhuǎn)到循環(huán)體內(nèi)do-while的循環(huán)
12、體不能就是復合語句 下列敘述中正確的就是C 。break語句只能用于switch語句體中continue語句的作用就是使程序的執(zhí)行流程跳出包含它的所有循環(huán)break語句只能用在循環(huán)體內(nèi)與switch語句體內(nèi)在循環(huán)體內(nèi)使用break語句與continue語句的作用相同下列敘述中正確的就是Ddo-while語句構(gòu)成的循環(huán)不能用其它語句構(gòu)成的循環(huán)來代替。do-while語句構(gòu)成的循環(huán)只能用break語句退出。用do-while語句構(gòu)成的循環(huán),在while后的表達式為非零時結(jié)束循環(huán)。用do-while語句構(gòu)成的循環(huán),在while后的表達式為零時結(jié)束循環(huán)。執(zhí)行x=-1; do ( x=x*x; whil
13、e (!x); 循環(huán)時,下列說法正確的就是 A 。循環(huán)體將執(zhí)行一次循環(huán)體將執(zhí)行無限次循環(huán)體將執(zhí)行兩次系統(tǒng)將提示有語法錯誤假設(shè)變量s、a、b、c均已定義為整型變量,且a、c均已賦值(c大于0), 則與以下程序段s=a;for(b=1;b=c;b+)s=s+1;功能等價的賦值語句就是B 。A.s=a+b; B.s=a+c; C.s=s+c; D.s=b+c;以下程序段的輸出結(jié)果就是B 。int main(void)(int num=0,s=0;while(num,則輸出結(jié)果為C 。int main(void) (int m, n;printf(Enter m,n;);scanf(%d%d, &m,
14、&n):while (m!=n)( while (mn) m=m-n;while (nm) n=n-m;printf(m=%dn,m);return 0;A.m=3B.m=2C.m=1 D、m=0下列程序段的輸出結(jié)果就是A 。int main(viod)(int i;for(int i=1;i6;i+)(if(i%2!=0)(printf(#); continue;printf(*);printf(n);return 0;A.#*#*#B.#C.*D.*#*#*二、填空題若 s=0,執(zhí)行循環(huán)語句for(i=1; i=10; i=i+3) s=s+i;后,i 的值為13。 下列程序段的輸出結(jié)果就
15、是*。int x=2;do (printf(*);x-; while (!x=0);下列程序段的功能就是計算:s=1+12+123+1234+12345。則劃線處應填 t*10。int t=0,s=0,i;for(i=1;i=5;i+) (t=i+s=s+t;printf(s=%dn,s);以下程序的輸出結(jié)果就是12int main(void)( int num=0;while(num6) (num+;if(num=3) break;printf(d,num); return 0;閱讀下列程序并回答問題。int main(void)( int i, j, k=0, m=0;for(i=0; i
16、2; i+)(;/*第5行*/for(j=0; j3; j+)k+;m+;/*第 9 行*/printf(k=%d, m=%dn, k, m);程序的輸出就是k=6,m=2。將第8行改為m=m+k; ,程序的輸出就是k=6,m=9 。將第5行改為k=0;,將第8行改為 m=m+k; ,程序的輸出就是 k=3,m=6。6、下列程序運行時輸入62pay!,則結(jié)果就是62ufd!。int main(void)( char c;int i;for(i=1;i=a&c=v&c=z) c=a+c-v;putchar(c);return 0;程序設(shè)計題求奇數(shù)與:輸入一批正整數(shù)(以零或負數(shù)為結(jié)束標志),求其中
17、的奇數(shù)與。試編寫 相應程序。解答:#include int main(void)(int x, sum;printf(Input integers: );scanf(%d, &x);sum = 0;while(x0)(if(x%2! =0)sum = sum + x;scanf(%d, &x);printf(The sum of the odd numbers is %dn, sum);return 0;展開式求與:輸入1個實數(shù)x,計算并輸出下式的值,直到最后一項的絕對值小 于0、00001,計算結(jié)果保留2位小數(shù)。要求定義與調(diào)用函數(shù)fact(n)計算n的階 乘,可以調(diào)用pow()函數(shù)求幕。試編
18、寫相應程序。s=x+x2 /2!+x3 /3!+x4/4!+解答:#include#includedouble fact(int n);int main(void)(int i;double x,s,item;printf(Input x:);scanf(%lf,&x);s=0;item=1、0;i=1;while(fabs(item)=1e-5)(item二pow(x,i)/fact(i);s=s+item;i+;printf(s=%、2lf,s);return 0;double fact(int n)(int i;double result;for(result=1,i=1;i=n;i+)
19、 result二result*i;return result;3、求序列與:輸入一個正整數(shù)n,輸出2/1+3/2+5/3+8/5 +的前n項之與,保 留2位小數(shù)。該序列從第2項起,每一項的分子就是前一項分子與分母的與,分 母就是前一項的分子。試編寫相應程序。解答:#includeint main(void)(int n,i,s1=2,s2=3,s,p1=1,p2=2,p;double sum,item;printf(Input n:);scanf(%d,&n);if(n=3)(for(i=1;i=n-2;i+)s=s1+s2;p=p1+p2;item=1、 0*s/p;sum+=item;s1
20、=s2;s2=s;p1=p2;p2=p;else if(n=1)sum=2;else if(n=2)sum=3、5;printf(sum=%、2lfn,sum);return 0;4、求序列與:輸入2個正整數(shù)a與n,求a+aa+aaa+aaa(n個a)之與。例如, 輸入2與3,輸出246(2+22+222)。試編寫相應程序。解答:#includeint main(void)(int a,n,i;double sum,temp;printf(Input a,n:);scanf(%d%d”,&a,&n);sum=temp=0;for(i=1;i=n;i+)(temp=temp*10+a;sum=s
21、um+temp;printf(sum=%、0lf,sum);return 0;換硬幣。將一筆零錢(大于8分,小于1元,精確到分)換成5分、2分與1分的 硬幣,每種硬幣至少有一枚。輸入金額,問有哪幾種換法?針對每一種換法,輸出 各種面額硬幣的數(shù)量與硬幣的總數(shù)量。試編寫相應程序。解答:#includeint main(void)(int money,money1,money2,sum;printf(Input money:);scanf(d,&money);sum=0;for(money1=1;money1=8;money1+)for(money2=1;money2money1)printf(mo
22、ney5=1,money1=%d,money2=%dnsum=%dn”,m oney1,money2,sum);elseprintf(money5=1,money2=%d,money1=%dnsum=%dn”,m oney2,money1,sum);return 0;輸出水仙花數(shù)。輸入一個正整數(shù)n(3WnW7)輸出所有n位水仙花數(shù)。水仙花 數(shù)就是指一個n位正整數(shù),它各位數(shù)字的n次幕之與等于它本身。例如153的各 位數(shù)字的立方與就是:F+53 +33 =153。試編寫相應程序。解答:#include#includeint main(void)(int n,i,t,m,sum,j,k;printf
23、(Input n:);scanf(%d”,&n);for(j=0,i=1;i=n;i+)j=j*10+9;for(k=1,i=1;in;i+)k=k*10;for(;k=j;k+)(t=k;sum=0;while(k!=0)(m=k;k=k%10;sum=sum+pow(k,n);k=m/10;k=t;if(sum=t)printf(%dn,t);return 0;求最大公約數(shù)與最小公倍數(shù)。輸入兩個正整數(shù)m與n(mW 1000,nW 1000),求其 最大公約數(shù)與最小公倍數(shù)。試編寫相應程序。解答:#includeint main(void)(int m,n,j,k;do(printf(Inpu
24、t m:);scanf(d,&m);printf(Input n:);scanf(%d”,&n);while(m0|n0);j=m;while(j%n!=0)j=j+m;k=(m*n)/j;printf(最小公倍數(shù)就是%d,最大公約數(shù)就是%dn,j,k);return 0;高空墜球。皮球從height(米)高度自由落下,觸地后反彈到原高度的一半,再 落下,再反彈如此反復。問皮球在第n次落地時,在空中一共經(jīng)過多少距離? 第n次反彈的高度就是多少?輸出保留1位小數(shù)。試編寫相應程序。解答:#include int main(void)(double distance, height;int i, n
25、;printf(Input height:);scanf(lf,&height);printf(Input n:);scanf(%d”,&n);if(n = 0)distance = 0;else(for(int i = 1; i = n; i+)(height = height/2;distance += 3*height;printf(第d 次落地時,共經(jīng)過距離為 0、1lf、n, n, distance);printf(第d次落地后的反彈高度為0、1lf、n, n, height);return 0;9、打菱形星號*”圖案。輸入一個正整數(shù)n(n為奇數(shù)),打印一個高度為n的“ 菱形圖案。例如,當n為7時,打印出以下圖案。試編寫相應程序。* * * * * * * * * * * * * * *解答:#includeint main(void)(int i,j,n;printf(Input n:);scanf(%d,&n);for(i=1;i=n;i=i+2)(for(j=1;j=n-i;j+)printf();for(j=1;j=i;j+)printf(* );putchar(n);for(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 荊州歷史考試題及答案
- 入水救生考試題及答案
- offer面試題及答案
- 無痛胃鏡安全護理管理
- 勞動監(jiān)察面試題及答案
- 自主游戲講座培訓
- ftp考試題及答案
- 電工考試題填空及答案
- java開發(fā)阿里面試題及答案
- 腫瘤患者心理-社會支持與康復體系
- 外科病應急預案嵌頓疝病人應急預案
- JJF 1069-2012 法定計量檢定機構(gòu)考核規(guī)范(培訓講稿)
- 加油站有限空間安全警示牌
- 安全員的任職條件及職責
- 資產(chǎn)評估收費管理辦法(2023)2914
- 出師表標準注音版修正版
- 孤獨癥康復教育人員上崗培訓練習題庫及答案
- 籃球比賽記錄表A4版
- 機械設(shè)備投入計劃及保證措施
- 小兒清熱止咳口服液產(chǎn)品知識-課件
- 鋼 筋 檢 查 記 錄 表(鋼筋加工及安裝)
評論
0/150
提交評論