第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)習(xí)題及答案_第1頁
第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)習(xí)題及答案_第2頁
第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)習(xí)題及答案_第3頁
第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)習(xí)題及答案_第4頁
第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)習(xí)題及答案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)6-1.比較while語句、do–while語句和for語句的異同。答:(1)while語句、do-while語句用于條件循環(huán),for語句用于計(jì)數(shù)循環(huán)。(2)while語句、for語句是先判斷循環(huán)條件,后執(zhí)行循環(huán)體,如果循環(huán)條件一開始就不成立,則循環(huán)體一次也不被執(zhí)行;而do-while語句是是先執(zhí)行循環(huán)體,少被執(zhí)行一次。后判斷循環(huán)條件,所以循環(huán)體至(3)知道循環(huán)的次數(shù)可選用for語句實(shí)現(xiàn)循環(huán),不知道循環(huán)的次數(shù)可選用while語句或do-while語句實(shí)現(xiàn)循環(huán)(4)一般而言,三種循環(huán)語句可等價(jià)實(shí)現(xiàn)6-2仔細(xì)閱讀下面的程序,指出程序的運(yùn)行結(jié)果...#include<stdio.h>voidmain(){inti;for(i=0;++i;i<5){if(i==3){printf("%d\n",++i);break;}printf("%d\n",++i);}}答:24思考:語句“for(“i=0;++i;i<5”)在編譯時(shí)為何會(huì)給出語法警告錯(cuò)誤?當(dāng)將其改為“for(i=0;i<5;++i)”時(shí),運(yùn)行結(jié)果又將如何?6-3仔細(xì)閱讀下面的語的程序#include"stdio.h"voidmain(),指出程序的運(yùn)行結(jié)果。{inti,a=0;for(i=1;i<=5;i++){do{i++;a++;}while(i<3);}i++;printf("a=%d,i=%d",a,i);}答:a=3,i=7思考:在for循環(huán)中嵌套著do-while循環(huán),那么do-while循環(huán)中對(duì)i的修改會(huì)對(duì)6-4編寫程序,用個(gè).for循環(huán)產(chǎn)生影響嗎?1000個(gè)單詞”computer”填充屏幕,每行60解:#include<stdio.h>voidmain(){inti;for(i=1;i<=1000;i++){printf("computer.");if(i%60==0)printf("\n");}}思考:在for循環(huán)中,”if(i%60==0)printf(“\n”);”語句的作用是什么?沒有此語句將會(huì)是什么狀況?6-5輸入一行字符(以$結(jié)束),統(tǒng)計(jì)其中的數(shù)字字符、空格字符出現(xiàn)的次數(shù)。解:#include<stdio.h>voidmain(){charc;intd=0,s=0;printf("請(qǐng)輸入字符(當(dāng)輸入$時(shí)結(jié)束):");while((c=getchar())!='$'){if(c>='0'&&c<='9')s++;if(c=='')d++;}printf("數(shù)字字符出現(xiàn)的次數(shù)為printf("空格字符出現(xiàn)的次數(shù)為}%d\n",d);%d\n",s);若輸入字符:12345abcd678xyz$則運(yùn)行結(jié)果為:數(shù)字字符出現(xiàn)的次數(shù)為空格字符出現(xiàn)的次數(shù)為84思考:此題中的循環(huán)次數(shù)是如何控制的?有何特點(diǎn)?6-6編寫程序,求1000以內(nèi)的奇數(shù)之和及偶數(shù)之和。解:#include<stdio.h>voidmain(){longn=0,m=0;inti;for(i=1;i<1000;i++){if(i%2==0)n=n+i;elsem=m+i;}printf("奇數(shù)之和為%ld\n",m);printf("偶數(shù)之和為%ld\n",n);}運(yùn)行結(jié)果:奇數(shù)之和為250000偶數(shù)之和為249500思考:在此題中為何選用for循環(huán)進(jìn)行控制?用while循環(huán)或do-while循環(huán)是否也可以?6-7計(jì)算π,計(jì)算公式π/4=1-1/3+1/5-1/7+?直到最后一項(xiàng)的絕對(duì)值小于為止。106解:#include<stdio.h>#include<math.h>voidmain(){ints=1;floatn=1.0,t=1,pi=0;while(fabs(t)>1e-6){pi=pi+t*s;n=n+2;s=-s;t=1/n;}pi=pi*4;printf("pi=%f\n",pi);}運(yùn)行結(jié)果:pi=3.141594思考:在此題中為何不選用for循環(huán)進(jìn)行控制,而選用while循環(huán)呢?6-8編寫程序,求任意兩個(gè)整數(shù)之間的所有素?cái)?shù)。解:#include<stdio.h>#include<math.h>voidmain(){intn,m,i,j,k,p=0;printf("請(qǐng)輸入兩個(gè)整數(shù)m,n(m<n):");scanf("%d,%d",&m,&n);for(i=m;i<=n;i++);{k=sqrt(n);for(j=2;j<=k;j++)if(i%j==0)break;if(j>=k+1){printf("%d",i);p=p+1;}if(p%10==0)printf("\n");}printf("\n");}運(yùn)行結(jié)果:請(qǐng)輸入兩個(gè)整數(shù)m,n(m<n):10,2011131719思考:此題中若輸入的兩個(gè)整數(shù)m,n分別為13,100時(shí),13這個(gè)素?cái)?shù)是否被輸出,為什么?6-9編寫程序,求任意兩個(gè)整數(shù)之間的所有能被3、4、5同時(shí)整除的數(shù)。解:#include<stdio.h>voidmain(){intn,m,i;printf("請(qǐng)輸入兩個(gè)整數(shù)m,n(m<n):");scanf("%d,%d",&m,&n);for(i=m;i<=n;i++)if((i%3==0)&&(i%4==0)&&(i%5==0))//或?qū)憺閕f(i%60==0)printf("%d\n",i);思考:如果要分行輸出,6-10編寫程序,每行輸出5個(gè)數(shù),應(yīng)該怎么修改程序?求1000至9999之間的回文數(shù).回文數(shù)是指正1221.讀與反讀都一樣的數(shù),如解:#include<stdio.h>voidmain(){intn,i,j;for(i=1000;i<=9999;i=i+1000){for(j=0;j<=9;j++){n=i+j*100+j*10+i/1000;printf("%d",n);}printf("\n");}}運(yùn)行結(jié)果:100111111221133114411551166117711881199120022112222223322442255226622772288229923003311332233333344335533663377338833993400441144224433444444554466447744884499450055115522553355445555556655775588559956006611662266336644665566666677668866996700771177227733774477557766777777887799780088118822883388448855886688888888889989009911992299339944995599669999999999999思考:在此題中,內(nèi)、外循環(huán)各起什么作用?是否可以交換?如果用if語句設(shè)計(jì)程序,數(shù)據(jù)的各位數(shù)(個(gè)位、十位、百位、千位)應(yīng)該如何分離?6-11編寫程序,判斷某一個(gè)整數(shù)是否為完數(shù)。完數(shù)是指其因子之和等于自身的整數(shù),如6=1+2+3請(qǐng)進(jìn)一步考慮,求任意兩個(gè)整數(shù)之間的所有完數(shù)。解:#include<stdio.h>voidmain(){intn,i,k=0;printf("請(qǐng)輸入整數(shù):");scanf("%d",&n);for(i=1;i<=n;i++)if(n%i==0)k=k+i;if(n==k)printf("%d是完數(shù)\n",n);elseprintf("%d不是完數(shù)}\n",n);運(yùn)行結(jié)果:請(qǐng)輸入整數(shù):2828是完數(shù)思考:變量k在此題中起什么作用?初值為何要被賦句“for(i=1;i<=n;i++)”中的判斷式0?循環(huán)語”i<n”可否改為”i<=n/2”?注:1000以內(nèi)的完數(shù)有6=1+2+3,28=1+2+4+7+14,496=1+2+4+8+16+31+62+124+248.6-12編寫程序,以上三角形式輸出九九乘法表。解:#include<stdio.h>voidmain(){intj,i;printf("%4c",'*');for(i=1;i<=9;i++){for(j=1;j<=9;j++)printf("%4d",i*j);printf("\n");}}運(yùn)行結(jié)果:*12345678911234567892468101214161839121518212427416202428323652530354045636424854749566386472981思考:如果希望輸出下三角形式的九九乘法表,程序應(yīng)如何改動(dòng)?*12345678911224336944812165510152025661218243036

7714212835424988162432404856649918273645546372816-13編寫程序,計(jì)算1!+2!+3!+?+n!的值,n從鍵盤輸入。解:#include<stdio.h>voidmain(){longsum=0,t=1;intn,i;printf("請(qǐng)輸入整數(shù)n:");scanf("%d",&n);for(i=1;i<=n;i++){t=t*i;sum=sum+t;}printf("總和=%ld\n",sum);}6-14編寫程序,求1!+2!+?+n!小于1000的項(xiàng)數(shù)n。解:#include<stdio.h>voidmain(){intsum=0,t=1;intn=0;do{n=n+1;t=t*n;sum=sum+t;}while(sum<1000);printf(“項(xiàng)數(shù)為%d\n”,n-1);}運(yùn)行結(jié)果:項(xiàng)數(shù)為6思考:此題為何要選用do-while循環(huán)結(jié)構(gòu)?最后輸出變量的值為何要減1?另請(qǐng)改為while循環(huán)實(shí)現(xiàn)。6-15某門課程有n個(gè)同學(xué)參加考試,最高分、最低分及平均分。編寫程序計(jì)算這門課程的解:#include<stdio.h>voidmain(){floataver,max,min,a;intn,i;printf("請(qǐng)輸入學(xué)生的人數(shù)scanf("%d",&n);aver=max=0;n的值:");min=100;for(i=0;i<n;i++){printf("請(qǐng)輸入第%d位同學(xué)的成績:",i+1);scanf("%f",&a);aver+=a;//累加成績if(max<a)max=a;if(min>a)min=a;}aver/=n;//計(jì)算平均成績printf("aver=%f,max=%f,min=%f\n",aver,max,min);}思考:變量max為何賦初值為6-16編寫程序,求分?jǐn)?shù)序列0?而變量min為何賦初值為100?2/1,2/3,3/5,8/5,8/13,…的前二十項(xiàng)及它們之和。解:#include<stdio.h>voidmain(){inti,t;floatsum=0,a=2,b=1;

for(i=1;i<=20;i++){sum=sum+a/b;t=a;a=a+b;b=t;}printf("sum=%f\n",sum);}運(yùn)行結(jié)果:sum=32.660259思考:此題中沒有輸出各項(xiàng)的值,請(qǐng)問如何實(shí)現(xiàn)這一要求?6-17編寫程序,求滿足下式的數(shù)字A,B,C的值。ABC+BCC ̄ ̄ ̄ ̄ ̄234解:#include<stdio.h>voidmain(){inta,b,c,e,i,j,k,t,bw,jw,jw1,jw2;printf("請(qǐng)輸入計(jì)算式的期望結(jié)果值(scanf("%d",&e);c=e%10;e/=10;b=e%10;e/=10;a=e%10;e/=10;for(i=0;i<10;i++){<1xxx):");t=i+i;bw=t%10;jw1=t/10;if(bw==c){for(j=0;j<10;j++){t=j+i+jw1;bw=t%10;jw2=t/10;if(bw==b){for(k=0;k<10;k++){t=k+j+jw2;bw=t%10;jw=t/10;if(bw==a&&e==jw)printf("所求的A,B,C可以是:%d,%d,%d\n",k,j,i);}}}}}}方法二(沒考慮有進(jìn)位的情況):#include"stdio.h"voidmain(){inti,j,k,a,b,c;inte;printf("請(qǐng)輸入計(jì)算式的期望結(jié)果值(scanf("%d",&e);1xxx):");c=e%10;e=e/10;//各位b=e%10;e=e/10;//十位a=e%10;e=e/10;//百位

for(i=0;i<=5;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){if((i+i)==c&&(j+i)==b&&(k+j)==a)printf("所求的A,B,C可以是:%d,%d,%d\n",k,j,i);}}運(yùn)行結(jié)果:請(qǐng)輸入計(jì)算式的期望結(jié)果值(1xxx):234所求的A,B,C可以是:ABC1,1,2ABC思考:如果將計(jì)算式+BCC改為+ABC程序應(yīng)在 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄234234什么地方進(jìn)行修改?(提示:結(jié)果為6-18猴子吃桃問題1,1,7).猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,不過癮,還多吃了一個(gè)。以后每天如此,至第十天,只剩下一個(gè)桃子。編寫程序計(jì)算第一天猴子摘得桃子個(gè)數(shù)。解:#include<stdio.h>voidmain(){intday,n1,n2;day=9;n2=1;while(day>0){n1=(n2+1)*2;/*第一天的桃子數(shù)是第二天桃子數(shù)加1后的2倍*/n2=n1;day--;}printf("第一天摘的桃子數(shù)為%d\n",n1);

}運(yùn)行結(jié)果:第一天摘的桃子數(shù)為1534思考:此題可假設(shè)第一天共摘桃子x顆,可否用遞歸算法求解8元錢1只,母雞(只描述計(jì)算過程)?6-19百雞問題。百元買百雞,公雞6元錢1只,雞仔2元錢4只。編寫程序,計(jì)算百元所買的公雞,母雞,雞仔數(shù)。解:#include<stdio.h>voidmain(){intx,y,z,j;for(x=0;x<=12;x++)for(y=0;y<=16;y++){z=100-x-y;if(8*x+6*y+z*0.5==100)printf("%2d:cock=%-2dhen=%-2dchicken=%-2d\n",++j,x,y,z);}}運(yùn)行結(jié)果:1:cock=8hen=11chicken=812:cock=11hen=4chicken=84思考:如何理解條件式義。x<=12,y<=16與計(jì)算式z=100-x-y的含40枚,計(jì)6-20將十元錢兌換成一元,五角,一角的硬幣,共計(jì)算有多少種兌換方法。解:#include<stdio.h>voidmain(){intx,y,z,j=0;/*x表示一元的枚數(shù),y表示五角的*//*/*枚數(shù),z表示一角的枚數(shù)for(x=0;x<=10;x++)

for(y=0;y<=20;y++){z=40-x-y;if(10*x+5*y+z==100){j=j+1;printf("第%d種兌換方法:1元%d枚,5角%d枚,1角%d枚\n",j,x,y,z);}}printf("共有%d種兌換方法\n",j);}思考:對(duì)于任意數(shù)額的錢數(shù),有100元、50元、20元、10元、5元、2元、1元、5角、2角、1角、5分、2分、1分等面額,如何找出張錢最少的組合?6-21兩個(gè)乒乓球隊(duì)進(jìn)行比賽,隊(duì)為X,Y,Z三人。有人打聽比賽對(duì)陣安排,不和X,Z比。編寫程序,找出三隊(duì)賽手名單。解:#include<stdio.h>voidmain()各出三人。甲隊(duì)為A,B,C三人,乙X比,C說他A說他不和{chari,j,k;/*i是A的對(duì)手;for(i='X';i<='Z';i++)for(j='X';j<='Z';j++)if(i!=j)j是B對(duì)手;K是C的對(duì)手*/for(k='K';k<='Z';k++){if(i!=k&&j!=k){if(i!='X'&&k!='X'&&k!='Z')printf("順序?yàn)椋篭nA--%C\tB--%C\n",i,j,k);

}}}運(yùn)行結(jié)果:順序?yàn)椋篈—ZB—XC—Y思

溫馨提示

  • 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. 人人文庫網(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)論