《實驗4循環(huán)控制 答案》由會員分享,可在線閱讀,更多相關(guān)《實驗4循環(huán)控制 答案(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、實驗4循環(huán)控制
班級:
學(xué)號:
姓名:
日期:
一、實驗?zāi)康?
(1) 熟悉掌握用wlule語句、do—while語句和for語句實現(xiàn)循環(huán)的方法。
(2) 掌握在程序設(shè)計中用循環(huán)的方法實現(xiàn)一些常用算法(如窮舉、迭代、遞推等)。
(3) 進一步學(xué)習(xí)調(diào)試程序。
二、實驗內(nèi)容
1. while 語句
wlule語句的一般形式為:
while(表達式)語句;
while語句的語義是:計算表達式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句。
編程:求1-100的奇數(shù)和。
提示:循環(huán)變量的步長值為2。
^include
void inai
2、ii()
f
i
mt i=l,sum=0;
while(i<=100)
(
sum=sum+i;
i=i+2;
)
piiiitf("sum=%d\ii,'.sum);
)
sun=2500
Ppess any key to continue.
2. do-while ?句
do-wlule語句的一?般形式為:
do
f
I
語句;
}wlule(表達式);
do-wlule語句的語義是:先執(zhí)行循環(huán)體語句一次,再判別表達式的值,若為真(非0) 則繼續(xù)循環(huán),否則終止循環(huán)。
編程:求1一100的偶數(shù)和。
^include
void
3、 main。
mt i=0.sum=0:
do
(
i=i+2;
sum=sum-ri;
}while(i<100);
prmt^Hsum=%d\nH.sum);
)
sum=2550
Press any key to continue
3. for語句
其一般形式為:
for(表達式1;表達式2;表達3)
語句;
for語句的語義是:
⑴首先計算表達式1的值。
⑵再計算表達式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,否則結(jié)束循環(huán)。
⑶執(zhí)行循環(huán)體后再計算表達式3的值,轉(zhuǎn)回第2步重復(fù)執(zhí)行。
下列程序用于輸出fibnocci數(shù)列的前20項,每行輸出5個。請?zhí)羁?/p>
4、。
說明:fibnocci數(shù)列的前兩項均為1,以后各項等于其前兩項之和。
^include
void inaui()
f
I
int
fl=l;f2=l;
printf(H\n%d %d
n=2;
fbr(i=l; i<=18 ;i++)
if(n%5=0) pnnt 町 \1T);
f3=fl+f2 :
pnntff%d ”,f3);n++;'
fl=f2;f2=f3;
}
}
112 3 5
? 13 21 34 55
89 144 233 377 610
987 159? 2584 4181 6765 Press any key
5、 to continue
4. break/continue 語句:
說明以下各程序的功能及運行結(jié)果并總結(jié)Break和contmue語句的不同用法。
#include
void mam()
(
int i,sum=0;
foi (i=l;i<=10;i++)
{if (i>5) break;
sum=sum+i;}
p tinrfV' su m=% 5 d W, sum);
}
sim= 15
Press ans? key to continue
^include
void mam()
(
int i,sum=0;
f
6、or (i=l;i<=10;i++)
{if (i<=5) continue;
sum=sum+i;}
pHnrfV'suni=%5d\iT,suni);
}
sum= 40
Press any key to continue
編程:輸出100以內(nèi)能被7整除的數(shù)。
提示:對7?100的每一個數(shù)進行測試,如該數(shù)不能被7整除,即模運算不為0,則由 continue語句轉(zhuǎn)去下一■次循環(huán)。只有模運算為0時,才能執(zhí)行后面的piintf語句,輸出能被 7整除的數(shù)。
#mclude
void niaiii()
mt i;
for(i=7 ;i v= 10 0; i
7、++)
(
if(i % 7 !=0)
contmue;
pnntf(”%6d”,i);
}
pnntR偵');
7
14
21
28
35
42
49
56
63
70
77
84
91
98
Press any
key
to continue
5. 循環(huán)嵌套
三種循環(huán)控制語句可■以互相嵌套,即在一個循環(huán)體內(nèi)部又可■以出現(xiàn)另一循環(huán)。輸出100 以內(nèi)的素數(shù)。
素數(shù)是只能被1和它本身整除的數(shù)。判斷素數(shù)的方法:用一個數(shù)分別去除2到這個數(shù) 減1 (或2到sqrt
8、(這個數(shù))),如果能被整除,則表明此數(shù)不是素數(shù),反之是素數(shù)。
^include
^include
void main()
int nj;
fbr(n=2 ;n<=l 00;n++)
fbr(i=2;i=n)
}
}
本程序中,第一層循環(huán)表示對2-100的數(shù)逐個判斷是否是素數(shù),在第二層循環(huán)中則對 數(shù)n用2-11-1逐個去除,若某次除盡則跳出該層循環(huán),說明不是素數(shù)。如果在所有的數(shù) 都是未除盡的情況下結(jié)束循環(huán),則為素數(shù),此時有i>=n,故可經(jīng)此判斷后輸出素數(shù)。然后 轉(zhuǎn)入下一次大循環(huán)
9、。
5
3
5
7
11
13
17 19 23
29
81
37
41
43
47
53
59 61 67
71
|73
79
83
89
97
Ppess
any key to continue.
編程:輸出9*9「I訣表。
提示:分行與列考慮,共9行9列,外循環(huán)控制行,內(nèi)循環(huán)控制列。
^include
void main()
int ij;
fbr(i=l;i<=9;i++)
(
fbr(j=lj<=iJ++)
printf(,,%ld*%ld=%3d ”,認i*j);
pnntf(”\n”);
10、
1*1 = 2*1 = 3*1 = 4*1 = 5*1 = 6*1 = 7*1 = 8*1 = 9*1 = Press
3*3= ?
4*3= 12 4*4= 16
5*3= 15 5*4= 20 5*5= 25
6?3= 18 6M= 24 6*5= 30 6商=36
?3= 21 7M= 28 ??5= 35 7%= 42 7*?=
8*3= 24 8*4= 32 8*5= 40 8*6= 48 8*7=
9*3= 27 9M= 36 9?5= 45 9商=54 9*7=
49
56 8*8= 64
63 9*8= 72 81
46802468
1 i 4^
11、 1 1 ======== *2*2*2*2*2*2*2*2 3 i 今 3 3 3 3 23456789 123456789
any key to continue
6. 編寫程序并上機調(diào)試。
(1) 輸入兩個正整數(shù)m和n,求它們的最大公約數(shù)和最小公倍數(shù)。 在運行時,輸入的值m>n,觀察結(jié)果是否正確。
再輸入時,使觀察結(jié)果是否正確。
修改程序,不論m和n為何值(包括負數(shù)),都能得到正確的結(jié)果。
#mclude
void main()
f
int pj,naiLtemp;
printff'please mput 2 number:n);
scanf
12、f%d%d”,&n,&m);
f
temp=n;
n=m:
m=temp;
}
p=n*m;
while(m!=0)
f
r=n%m;
n=m:
m=i;
}
printff'theii common divisor is %d\n'\n);
printff'their common multiple is %d\n”,p/n);
)
plea.se input 2 number;24 52 their comnon diuisor is 4 their comnon multiple is 312 Press any key to continue
(2)
13、輸入一行字符,分別統(tǒng)計出其中的英文字母、空格、數(shù)字和其他字符的個數(shù)。
得到正確答案后,請修改程序使之能分別統(tǒng)計大小寫字母、空格、數(shù)字和其他字符的個 數(shù)。
^include void niam()
clw c;
int letter=0.space=0jigit=0,othei-0;
printff'please input:");
while((c=getchai()) !=,\n,)
{
iRc>='a‘ && cv=N || c>='A' && cv=Z)
letter++;
else iRc==,')
space++;
else iRc>='0
14、' && cv=9)
digit++;
else
other++;
}
pnntf(Mlettei-%d,space=%d.digit=%d,othei-%dHJettei;space,digit,other);
}
please input : 849654kj$fiurer rturtir J f £$jerl23#? P4
le t te r =18, s pac e =2dig it =10^ o t her=6Pres s any key to continue
(3) 求100-200之間的素數(shù),把它們按每行5個素數(shù)全部顯示出來,并給出素數(shù)的個 數(shù)。
#mclu
15、de
#mclude
void main()
{
mt i,n=0,k;
for(i=100; i<=200; i++)
(
fbr(k=2 ;kv=int(sqrt(i)) ;k++)
if(i % k==0) break;
if(k>mt(sqrt ⑴))
(
n++;
pnntR”%4d”,i);
if(n % 5 ==0) printRf);
)
)
}
101 103 127 131 151 157 179 181
10?
137
163
19±
109 113
139 149
16? 173
1
16、93 197
199Press any hey to continue
(4)用牛頓迭代法求方程2F — 4/ +3x —6 = 0在1.5附近的根。
在得到正確答案后,請修改程序使所設(shè)的x初始值由1.5改變?yōu)?00、1000、10000,再 運行,觀察結(jié)果,分析不同的X初值對結(jié)果有沒有影響,為什么?
修改程序,使之能輸出迭代的次數(shù)和每次迭代的結(jié)果,分析不同的X初始值對迭代的次 數(shù)有無影響。
#iiiclude
#iiiclude
void main()
{
float xl,xO,f.fl;
xl=L5;
do
{
x0=
17、xl;
f=2 *x0 *x0 *x0-4*x0*x0+3 *x0-6:
fl=6*x0*x0-8 *x0+3;
xl=xO-ffl;
} wliile(fabs(x 1 -x0)>= 1 e-5);
printf(MThe root of equation is %5.2fuT,xl);
}
I he root o£ equation is 2-80 Press any key to continue^
(5) 猴子吃桃問題。猴子第一天摘下若干個桃子,當(dāng)即吃了一半,還不過癮,又多吃 了一個,第二天早上又將剩下的桃子吃掉一半,又多吃一個。以后每天早上都吃了前一天剩 下的一半零一
18、個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少個 桃子?
#iiiclude
void main()
{
mt day=9.xl,x2=l;
wliile(day>0)
{
xl=2*(x2+l);
x2=xl;
day-;
}
printf(Mtotal peaches=%d ii*\x 1);
}
total peaches =1534
Press any key to continue
(6) 打印出以下圖形
大
大大大
火*火大大
*******
大大大大大
大大大
大
分析:先把圖形分成兩部分來看待
19、,前四行一個規(guī)律,后三行一個規(guī)律。每一部分利用 雙重for循環(huán),外循環(huán)控制行,內(nèi)循環(huán)控制列。內(nèi)循環(huán)又由兩個并列的for循環(huán),一*個控制 空格的輸出,一個控制星號的輸出。
#mclude
void niaiii()
Hit 1,J;
fbr(i=l;i<=4;i++)
(
for(j=lj<=4-iJ++)
pnntff ");
fbr(j=lj<=2*i-l J++)
pnntff*”);
pnntf(”\n”);
)
fbr(i=l;i<4;i++)
(
fbr(j=lj<=i;j++)
pnntff ");
fbr(j=l j<=7-2*i J++)
pnntff*”);
pnntf(”\n”);
)
)
w v w w V K K
?/v
*■
Press any key to continue
三、預(yù)習(xí)內(nèi)容
預(yù)習(xí)第5章內(nèi)容。