語(yǔ)言程序設(shè)計(jì)第版何欽銘顏暉第章循環(huán)結(jié)構(gòu)_第1頁(yè)
語(yǔ)言程序設(shè)計(jì)第版何欽銘顏暉第章循環(huán)結(jié)構(gòu)_第2頁(yè)
語(yǔ)言程序設(shè)計(jì)第版何欽銘顏暉第章循環(huán)結(jié)構(gòu)_第3頁(yè)
語(yǔ)言程序設(shè)計(jì)第版何欽銘顏暉第章循環(huán)結(jié)構(gòu)_第4頁(yè)
語(yǔ)言程序設(shè)計(jì)第版何欽銘顏暉第章循環(huán)結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章循環(huán)結(jié)構(gòu)【練習(xí)4-1】在例4-1程序中,如果對(duì)item賦初值0,運(yùn)行結(jié)果是什么為什么如果將精度改為10-3,運(yùn)行結(jié)果有變化嗎為什么解答:如果對(duì)item賦初值0,則程序運(yùn)行結(jié)果是pi=0,因?yàn)閕tem為0時(shí)不滿足while循環(huán)的執(zhí)行條件,即不執(zhí)行循環(huán),故pi值為0。如果將精度改為10-3,運(yùn)行結(jié)果會(huì)有變化,因?yàn)榫雀淖円馕吨鴚hile循環(huán)的條件改變,精度變大使得while循環(huán)次數(shù)減少,必然影響到π的值?!揪毩?xí)4-2】運(yùn)行例4-2程序時(shí),如果將最后一個(gè)輸入數(shù)據(jù)改為-2,運(yùn)行結(jié)果有變化嗎如果第一個(gè)輸入數(shù)據(jù)是-1,運(yùn)行結(jié)果是什么為什么解答:如果將最后一個(gè)輸入數(shù)據(jù)改為 -2,運(yùn)行結(jié)果沒(méi)有變化,因?yàn)樽詈笠粋€(gè)負(fù)數(shù)是一結(jié)束標(biāo)志,不進(jìn)行統(tǒng)計(jì),故任意一個(gè)負(fù)數(shù)都可以。如果第一個(gè)輸入數(shù)據(jù)是-1,運(yùn)行結(jié)果是:Gradeaverageis0,因?yàn)榈谝粋€(gè)輸入就是-1,則while循環(huán)條件不成立,不執(zhí)行循環(huán)體?!揪毩?xí)4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+?):輸入一個(gè)正實(shí)數(shù)eps,計(jì)算序列1-1/4+1/7-1/10+1/13-1/16+?的值,精確到最后一項(xiàng)的絕對(duì)值小于eps(保留6位小數(shù))。試編寫相應(yīng)程序。解答:#include<>#include<>intmain(void){intdenominator,flag;doubleitem,s,eps;printf( “Inputeps: ”);scanf(“%lf”,&eps);flag=1;denominator=1;item=;s=0;while(fabs(item)>=eps){item=flag*/denominator;s=s+item;flag=-flag;denominator=denominator+3;}printf( “s=%f n”,s);return0;}【練習(xí)4-4】如果將例4-3程序中的do-while語(yǔ)句改為下列while語(yǔ)句,會(huì)影響程序的功能嗎為什么再增加一條什么語(yǔ)句,就可以實(shí)現(xiàn)同樣的功能while(number!=0){number=number/10;count++;}解答:會(huì)有影響,因?yàn)楫?dāng)輸入數(shù)據(jù) number為0 時(shí),上述while 循環(huán)將不執(zhí)行,count 值仍為0,故輸出為0,不符合題目要求。可增加一條if 語(yǔ)句來(lái)解決上面的問(wèn)題,在while 循環(huán)前加上語(yǔ)句“if(number==0)count=1; ”?!揪毩?xí)4-5】例4-4 程序中的第9~15行可以用下列for 語(yǔ)句替代嗎為什么for(i=2;i<=m/2;i++)if(m%i==0)printf("No!\n");elseprintf("%disprimenumber!\n",m);解答:不能代替,因?yàn)橹挥靡粋€(gè)數(shù)來(lái)除不足以判斷該數(shù)是否是素?cái)?shù)。【練習(xí)4-6】猜數(shù)字游戲:先輸入2個(gè)不超過(guò)100的正整數(shù),分別是被猜數(shù)mynumber和允許猜測(cè)的最大次數(shù)n,再輸入你所猜的數(shù)yournumber,與被猜數(shù)mynumber進(jìn)行比較,若相等,顯示猜中,;若不等,顯示與被猜數(shù)的大小關(guān)系,最多允許猜n次。如果1次就猜出該數(shù),提示“Bingo!”;如果3次以內(nèi)猜到該數(shù),則提示“LuckyYou!”;如果超過(guò)3次但不超過(guò)n次猜到該數(shù),則提示“GoodGuess!”;如果超過(guò)n次都沒(méi)有猜到,則提示“GameOver”;如果在到達(dá)n次之前,用戶輸入了一個(gè)負(fù)數(shù),也輸出“GameOver”,并結(jié)束程序。試編寫相應(yīng)程序。解答:#include<>intmain(void){intmynumber,n,yournumber,i;printf("Inputmynumber:");scanf("%d",&mynumber);printf("Inputn:");scanf("%d",&n);for(i=1;i<=n;i++){printf("Inputyournumber:");scanf("%d",&yournumber);if(i==1&&yournumber==mynumber){printf("Bingo!");break;}if((i==2||i==3)&&yournumber==mynumber){printf("Luckyyou!");break;}if((i>3&&i<=n)&&yournumber==mynumber){printf("GoodGuess!");break;}if((i==n&&mynumber!=yournumber)||mynumber<0||yournumber<0){printf("GameOver!");break;}}return0;}【練習(xí)4-7】求e的值:輸入1個(gè)正整數(shù)n,計(jì)算下式求出e的值(保留2位小數(shù)),要求使用嵌套循環(huán)。試編寫相應(yīng)程序。e= 1+1/1!+1/2!+1/3!+ ?+1/n!解答:#include<>intmain(void){inti,j,n;doublee,t;printf("Inputn:");scanf("%d",&n);e=1;for(i=1;i<=n;i++){t=1;for(j=1;j<=i;j++)t=t*j;e=e+t;}printf("e=%\n",e);return0;}【練習(xí)4-8】運(yùn)行例4-8的源程序1時(shí),如果先輸入0,即輸入數(shù)據(jù)個(gè)數(shù)n=0,表示不再輸入任何成績(jī),運(yùn)行結(jié)果是什么如何修改程序以應(yīng)對(duì)這種情況解答:當(dāng)輸入數(shù)據(jù)個(gè)數(shù)n=0時(shí),由于在for循環(huán)外首先得輸入一個(gè)成績(jī),故程序仍將等待輸入第一個(gè)人的成績(jī),這與輸入個(gè)數(shù)n=0矛盾,可修改如下:#include<>intmain(void){inti,mark,max,n;printf("Entern:");scanf("%d",&n);if(n>0){printf("Enter%dmarks:",n);scanf("%d",&mark); /*

讀入第一個(gè)成績(jī)

*/max=mark;/*假設(shè)第一個(gè)成績(jī)是最高分*/for(i=1;i<n;i++){scanf("%d",&mark);if(max<mark)max=mark;}printf("Max=%d\n",max);}return0;}【練習(xí)4-9】運(yùn)行例4-8的源程序2時(shí),如果輸入的第一個(gè)數(shù)就是負(fù)數(shù),表示不再輸入任何成績(jī),運(yùn)行結(jié)果是什么如何修改程序以應(yīng)對(duì)這種情況解答:當(dāng)輸入的第一個(gè)數(shù)就是負(fù)數(shù)時(shí),將不執(zhí)行while循環(huán),程序運(yùn)行結(jié)果就是輸出所輸入的負(fù)數(shù)?!揪毩?xí)4-10】找出最小的值:輸入一個(gè)正整數(shù)n,再輸入n個(gè)整數(shù),輸出最小值。試編寫相應(yīng)程序。解答:#include<>intmain(void){inti,min,n,x;printf("inputrn:");scanf("%d",&n);printf("inputnumbers:");scanf("%d",&x);min=x;for(i=1;i<n;i++){scanf("%d",&x);if(min>x)min=x;}printf("min=%d\n",min);return0;}【練習(xí)4-11】統(tǒng)計(jì)素?cái)?shù)并求和:輸入2個(gè)正整數(shù)m和n(1≤m≤n≤500),統(tǒng)計(jì)并輸出m和n之間素?cái)?shù)的個(gè)數(shù)以及這些素?cái)?shù)的和。素?cái)?shù)就是只能被1和自身整除的正整數(shù),1不是素?cái)?shù),2是素?cái)?shù)。試編寫相應(yīng)程序。解答:#include<>#include<>intmain(void){inti,m,n,j,count;doublesum;printf("Enterm:");scanf("%d",&m);printf("Entern:");scanf("%d",&n);count=0;sum=0;for(;m<=n;m++){j=sqrt(m);for(i=2;i<=j;i++)if(m%i==0)break;if(i>j&&m!=1){sum=sum+m;count++;}}printf("count=%d\nsum=%.0lf",count,sum);return0;}習(xí)題4一.選擇題1.C語(yǔ)言中

while

do-while

循環(huán)的主要區(qū)別是

A

。A.do-while 的循環(huán)體至少無(wú)條件執(zhí)行一次B.while 的循環(huán)控制條件比 do-while 的循環(huán)控制條件嚴(yán)格C.do-while 允許從外部轉(zhuǎn)到循環(huán)體內(nèi)D.do-while 的循環(huán)體不能是復(fù)合語(yǔ)句2.下列敘述中正確的是

C

。A.break語(yǔ)句只能用于switch語(yǔ)句體中B.continue 語(yǔ)句的作用是使程序的執(zhí)行流程跳出包含它的所有循環(huán)C.break語(yǔ)句只能用在循環(huán)體內(nèi)和 switch語(yǔ)句體內(nèi)D.在循環(huán)體內(nèi)使用 break語(yǔ)句和continue 語(yǔ)句的作用相同3.下列敘述中正確的是 D 。A.do-while 語(yǔ)句構(gòu)成的循環(huán)不能用其它語(yǔ)句構(gòu)成的循環(huán)來(lái)代替。B.do-while 語(yǔ)句構(gòu)成的循環(huán)只能用 break 語(yǔ)句退出。C.用D.用

do-whiledo-while

語(yǔ)句構(gòu)成的循環(huán),在語(yǔ)句構(gòu)成的循環(huán),在

whilewhile

后的表達(dá)式為非零時(shí)結(jié)束循環(huán)。后的表達(dá)式為零時(shí)結(jié)束循環(huán)。4.執(zhí)行

x=-1;do{x=x*x;}while(!x);

循環(huán)時(shí),下列說(shuō)法正確的是A 。A.循環(huán)體將執(zhí)行一次C.循環(huán)體將執(zhí)行無(wú)限次B.循環(huán)體將執(zhí)行兩次D.系統(tǒng)將提示有語(yǔ)法錯(cuò)誤5.假設(shè)變量s、a、b、c均已定義為整型變量,且a、c均已賦值(c大于0),則與以下程序段s=a;for(b=1;b<=c;b++)s=s+1;B功能等價(jià)的賦值語(yǔ)句是。A.s=a+b;B.s=a+c;C.s=s+c;D.s=b+c;6.以下程序段的輸出結(jié)果是B。intmain(void){intnum=0,s=0;while(num<=2){num++;s+=num;}printf("%d\n",s);return0;}A.10B.6C.3D.17.運(yùn)行以下程序后,如果從鍵盤上輸入6514<回車>,則輸出結(jié)果為C。intmain(void){intm,n;printf("Enterm,n;");scanf("%d%d",&m,&n):while(m!=n){while(m>n)m=m-n;while(n>m)n=n-m;}printf("m=%d\n",m);return0;}A.m=3

B .m=2

C .m=1

=08.下列程序段的輸出結(jié)果是

A

。intmain(viod){inti;for(inti=1;i<6;i++){if(i%2!=0){printf("#");continue;}printf("*");}printf("\n");return0;}A.#*#*#

B

.#####

C .*****

D

.*#*#*二、填空題1.若s=0,執(zhí)行循環(huán)語(yǔ)句

"for(i=1;i<=10;i=i+3)s=s+i;"

后,i

的值為13 。2.下列程序段的輸出結(jié)果是

**

。intx=2;do{printf( “*”);x--;}while(!x==0);3.下列程序段的功能是計(jì)算:s=1+12+123+1234+12345。則劃線處應(yīng)填t*10 。intt=0,s=0,i;for(i=1;i<=5;i++){t=i+_____;s=s+t;}printf("s=%d\n",s);4.以下程序的輸出結(jié)果是 12 。intmain(void){intnum=0;while(num<6){num++;if(num==3)break;printf("%d,",num);}return0;}5.閱讀下列程序并回答問(wèn)題。intmain(void){inti,j,k=0,m=0;for(i=0;i<2;i++){;/*第5行*/for(j=0;j<3;j++)k++;m++;/*第9行*/}printf("k=%d,m=%d\n",k,m);}(1)程序的輸出是k=6,m=2。(2)將第8行改為"m=m+k;",程序的輸出是k=6,m=9。將第5行改為"k=0;",將第8行改為"m=m+k;",程序的輸出是k=3,m=6。6.下列程序運(yùn)行時(shí)輸入62pay!,則結(jié)果是62ufd!。intmain(void){charc;inti;for(i=1;i<=6;ii++){c=getchar();if(c>='a'&&c<= ’u’) c=c+5;elseif(c>='v'&&c<='z')c='a'+c-'v';putchar(c);}return0;}三.程序設(shè)計(jì)題1.求奇數(shù)和:輸入一批正整數(shù)(以零或負(fù)數(shù)為結(jié)束標(biāo)志),求其中的奇數(shù)和。試編寫相應(yīng)程序。解答:#include<>intmain(void){intx,sum;printf("Inputintegers:");scanf("%d",&x);sum=0;while(x>0){if(x%2!=0)sum=sum+x;scanf("%d",&x);}printf("Thesumoftheoddnumbersis%d\n",sum);return0;}2.展開(kāi)式求和:輸入 1個(gè)實(shí)數(shù)x,計(jì)算并輸出下式的值,直到最后一項(xiàng)的絕對(duì)值小于,計(jì)算結(jié)果保留 2位小數(shù)。要求定義和調(diào)用函數(shù)可以調(diào)用pow()函數(shù)求冪。試編寫相應(yīng)程序。4s=x+x 2/2!+x3/3!+x/4!+?

fact(n)

計(jì)算

n的階乘,解答:#include<>#include<>doublefact(intn);intmain(void){inti;doublex,s,item;printf("Inputx:");scanf("%lf",&x);s=0;item=;i=1;while(fabs(item)>=1e-5){item=pow(x,i)/fact(i);s=s+item;i++;}printf("s=%.2lf",s);return0;}doublefact(intn){inti;doubleresult;for(result=1,i=1;i<=n;i++)result=result*i;returnresult;}3.求序列和:輸入一個(gè)正整數(shù) n,輸出 2/1+3/2+5/3+8/5+ ?的前n 項(xiàng)之和,保留2 位小數(shù)。該序列從第 2項(xiàng)起,每一項(xiàng)的分子是前一項(xiàng)分子與分母的和,分母是前一項(xiàng)的分子。試編寫相應(yīng)程序。解答:#include<>intmain(void){intn,i,s1=2,s2=3,s,p1=1,p2=2,p;doublesum,item;printf("Inputn:");scanf("%d",&n);if(n>=3){for(i=1;i<=n-2;i++){s=s1+s2;p=p1+p2;item=*s/p;sum+=item;s1=s2;s2=s;p1=p2;p2=p;}}elseif(n==1)sum=2;elseif(n==2)sum=;printf("sum=%.2lf\n",sum);return0;}求序列和:輸入2個(gè)正整數(shù)a和n,求a+aa+aaa+aa?a(n個(gè)a)之和。例如,輸入2和3,輸出246(2+22+222)。試編寫相應(yīng)程序。解答:#include<>intmain(void){inta,n,i;doublesum,temp;printf("Inputa,n:");scanf("%d%d",&a,&n);sum=temp=0;for(i=1;i<=n;i++){temp=temp*10+a;sum=sum+temp;}printf("sum=%.0lf",sum);return0;}5.換硬幣。將一筆零錢(大于8分,小于1元,精確到分)換成5分、2分和1分的硬幣,每種硬幣至少有一枚。輸入金額,問(wèn)有哪幾種換法針對(duì)每一種換法,輸出各種面額硬幣的數(shù)量和硬幣的總數(shù)量。試編寫相應(yīng)程序。解答:#include<>intmain(void){intmoney,money1,money2,sum;printf("Inputmoney:");scanf("%d",&money);sum=0;for(money1=1;money1<=8;money1++)for(money2=1;money2<=3;money2++)if(money1+money2*2+5==money){sum=money1+money2+1;if(money2>money1)printf("money5=1,money1=%d,money2=%d\nsum=%d\n",money1,money2,sum);elseprintf("money5=1,money2=%d,money1=%d\nsum=%d\n",money2,money1,sum);}return0;}6.輸出水仙花數(shù)。輸入一個(gè)正整數(shù)n(3≤n≤7)輸出所有n位水仙花數(shù)。水仙花數(shù)是指一個(gè)n位正整數(shù),它各位數(shù)字的n次冪之和等于它本身。例如153的各位數(shù)字的立方和是:13+53+33=153。試編寫相應(yīng)程序。解答:#include<>#include<>intmain(void){intn,i,t,m,sum,j,k;printf("Inputn:");scanf("%d",&n);for(j=0,i=1;i<=n;i++)j=j*10+9;for(k=1,i=1;i<n;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("%d\n",t);}return0;}7.求最大公約數(shù)和最小公倍數(shù)。輸入兩個(gè)正整數(shù)m和n(m≤1000,n≤1000),求其最大公約數(shù)和最小公倍數(shù)。試編寫相應(yīng)程序。解答:#include<>intmain(void){intm,n,j,k;do{printf("Inputm:");scanf("%d",&m);printf("Inputn:");scanf("%d",&n);}while(m<0||n<0);j=m;while(j%n!=0)j=j+m;k=(m*n)/j;printf("最小公倍數(shù)是%d,最大公約數(shù)是%d\n",j,k);return0;}8.高空墜球。皮球從height(米)高度自由落下,觸地后反彈到原高度的一半,再落下,再反彈??如此反復(fù)。問(wèn)皮球在第n次落地時(shí),在空中一共經(jīng)過(guò)多少距離第n次反彈的高度是多少輸出保留1位小數(shù)。試編寫相應(yīng)程序。解答:#include<>intmain(void){doubledistance,height;inti,n;printf("Inputheight:");scanf("%lf",&height);printf("Inputn:");scanf("%d",&n);if(n==0)distance=0;else{for(inti=1;i<=n;i++){height=height/2;distance+=3*height;}}printf("第%d次落地時(shí),共經(jīng)過(guò)距離為%.\n",n,distance);printf("第%d次落地后的反彈高度為%.\n",n,height);return0;}打菱形星號(hào)“*”圖案。輸入一個(gè)正整數(shù)n(n為奇數(shù)),打印一個(gè)高度為n的“*”菱形圖案。例如,當(dāng)n為7時(shí),打印出以下圖案。試編寫相應(yīng)程序。**********************/

溫馨提示

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

評(píng)論

0/150

提交評(píng)論