程序设计习题 第 3 章 做循环

 

3.1 单层循环

1. 输入一个正整数n,输出123……n-1n

2. 计算2+4+6+……+100的和

3. 输入一个正整数n,计算n的阶乘

4. 计算1,2,3,……,100中所有奇数和偶数的和?

5. 编写程序,输出1~100之间每位数的乘积大于每位数的和的数

6. 请打印出所有三位数的水仙花数?

提示:

(1) 水仙花数是指一个 n 位数 ( n3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153)

(2) for a,b,表示循环变量将从 a 变到 b

7. 求和 s= a + aa + aaa + + aaa 的值(最后一个数中 a 的个数为 n ),其中 a 是一个1~9的数字,例如: 2 + 22 + 222 + 2222 + 22222 (此时 a=2 n=5

输入:一行,包括两个整数,第1个为a,第2个为n1 a 91 n 9),以英文逗号分隔。

输出:一行,s的值。

输入例子:2,5 对应输出:24690

8. 输入一个大于1的正整数,并判断该正整数是否是素数。如果是素数,输出Yes;如果不是素数,输出其因子的个数

提示1:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数

提示2:因数是指如果整数a除以整数b(b0) 的商正好是整数而没有余数,则b就是a的因数

9. 计算级数:S=1+1/3+1/5+1/7+……的前100项之和

10. 编程计算表达式..

3.2 多层循环

1. 求数字2~50之间每个数的因数

2. 计算半径从110,且面积小于100的圆形面积

3. 编写程序,打印下列图形

提示:用output()output@s()来控制加不加回车

*********

********

*******

******

*****

****

***

**

*


4. 编写程序打印下列菱形图案。菱形的行数可输入,不同的行数,菱形的大小不同。

..

5. 使用forbreak语句编写程序,判断任意一个大于1的正整数是否为素数。是输出Yes,不是输出No

6. 100~200之间的全部素数

7. 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=123。编程找出1000以内的所有完数

8. 口袋中有红、黄、蓝、白、黑五种颜色的球若干。每次从口袋中取出3个不同颜色的球,问有多少种取法。

13个球有顺序,红、黄、蓝和蓝、黄、红为不同取法

23个球无顺序,红、黄、蓝和蓝、黄、红为相同取法

3.3 条件循环

1. 输入一个正整数,并将其逆序输出。例如:输入12345,则输出54321

2. 输入一个正整数,并判断其是否是对称数(回文数)。如果是输出Yes;如果不是输出No

提示:对称数是指将数字倒过来之后与原数相同。例如,12321是对称数,12345不是对称数

3. 输入一个正整数,将这个正整数中每一位上是奇数的数依次取出,后将取出的数字按原有的顺序排列构成一个新的正整数并输出

提示:若原数为1215348,则构成的新数为1153

4. 输出1000以内的素数

5. 公鸡每只值5钱,母鸡每只值3 钱,而3 只小鸡值1 钱。用100钱买100 只鸡,问:这100 只鸡中,公鸡、母鸡和小鸡各有多少只?

6. 下列程序的输出结果是什么?


A

B

C

D

1

for 5




2


for 2



3



if A1==2

next A1

4



if A1==4

break A1

5



>output(A1)


3.4 死循环

1. 计算圆的面积,半径取值123,……直到面积值大于1000为止

2. 用死循环的方式编写程序,计算的近似值,公式: ..,直至最后一项的绝对值不大于..为止。

3. 用泰勒公式..,计算自然对数底数 e 的近似值,直至最后一项的绝对值不大于..为止。

参考答案:

3.1 单层循环

1.


A

B

1

100


2

for A1

>output(A2)

2.


A

B

1

=0


2

for 50

>A1+=2*A2

计算结果存入A1

3.


A

B

1

10

1

2

for A1

>B1=B1*A2

计算结果存入B1

4.


A

B

C

1

0

0


2

for 100

if A2%2!=0

>A1+=A2

3


else

>B1+=A2

A1 奇数和

B1 偶数和

5.


A

B

C

1

for 100

=A1%10


2


=A1\10


3


if B1*B2>B1+B2

>output(A1)

6.


A

B

C

1

for 100,999

=A1\100

/百位

2


=A1\10%10

/十位

3


=A1%10

/个位

4


if B1*B1*B1+ B2*B2*B2+ B3*B3*B3==A1

>output(A1)

7.


A

B

1

2

5

2

0

0

3

for B1

>A2=A2+A1

4


>B2=B2+A2

5


>A1=A1*10

A2 每次循环要加的数值如22222

B2 求和结果

8.


A

B

C

1

97

0


2

for A1

if A1%A2==0

>B1+=1

3

=if(B1==2,output("Yes"),output(B1))



9.


A

B

1

0


2

for 100

>A1+=1/(2*A2-1)

10.


A

B

1

100


2

for A1

>B1+=A2*A2

3

>B1=1/A1*B1


A1 输入n的值

B1保存计算结果

3.2 多层循环

1.


A

B

C

D

1

for 2,50

>output("Factors of"/A1/":")



2


for A1

if A1%B2==0

>output(B2)

2.


A

B

C

1

for 1,10

=3.14*A1*A1


2


if B1>100

break

3


>output(A1,B1)


4

>output("When r="/A1/", S>100")



3.


A

B

C

1

9



2

for A1

for A1+1-A2

>output@s("*")

3


>output("")


4.


A

B

C

1

9



2

for A1\2+1

for A1\2+1-A2

>output@s(" ")

3


for 2*A2-1

>output@s("*")

4


for A1\2+1-A2

>output@s(" ")

5


>output("")


6

for A1\2

for A6

>output@s(" ")

7


for A1-2*A6

>output@s("*")

8


for A6

>output@s(" ")

9


>output("")


5.


A

B

C

1

173



2

for 2,A1-1

if A1%A2==0

break

3

=if(A2==A1,output("Yes"),output("No"))



6.


A

B

C

D

1

for 100,200




2


for 2,A1-1

if A1%B2==0

break

3


=if(B2==A1,output(A1))



7.


A

B

C

D

1

0




2

for 1000




3


for A2-1

if A2%B3==0

>A1+=B3

4


if A1==A2

>output(A2)


5


>A1=0



8.

1


A

B

C

D

E

F

1

0






2

for 5






3


for 5

if B3!=A2




4




for 5

if D4!=B3 && D4!=A2

>A1+=1

计算结果保存在A160种取法

2


A

B

C

D

1

0




2

for 5




3


for A2-1



4



for B3-1

>A1+=1

计算结果保存在A110种取法

3.3 条件循环

1.


A

B

1

12345


2

for A1!=0

>B1=B1*10+A1%10

3


>A1=A1\10

B1 存储输出结果

2.


A

B

1

12321


2

=A1


3

for A2!=0

>B1=B1*10+A2%10

4


>A2=A2\10

5

=if(A1==B1,output("Yes"),output("No"))


3.


A

B

C

1

1215348



2

1



3

for A1!=0

=A1%10


4


if B3%2!=0

>B1=B1+B3*A2

5



>A2=A2*10

6


>A1=A1\10


B1 存储输出结果

A2 用于存储每次循环后的数位

4.


A

B

C

D

1

for 1000

if A1==2

>output(A1)


2


for 2, A1-1

if A1%B2==0

next A1

3


>output(A1)



5.


A

B

C

D

1

for 100

if 5*A1>100

break


2


for 100-A1

=100-A1-B2

=5*A1+3*B2+C2/3

3



if D2>100

next A1

4



else if D2<100

next

5



>output(A1,B2,C2)


在代码中,A1循环公鸡的总数;在B1中判断,如果公鸡的总价已经超过100,说明公鸡的总数已经太多了,此时在C1中用break命令终止循环。B2中继续循环母鸡可能的总数。在D3中,如果发现当前鸡的总价已经超过了100,说明在当前母鸡总数已经太多了,可以用next A1,增加公鸡的总数,重新尝试。在D4中,当前鸡的总价还小于100,可以继续增加母鸡的总数来尝试,这里的next命令会跳过当前最内层的循环代码,即以B2为主格的循环。

3.4 死循环

1.


A

B

C

D

1

1




2

for

=3.14*A1*A1

if B2>1000

break

3


>output(A1,B2)



4


>A1+=1



2.


A

B

C

D

1

1

1



2

for

=A1/B1

if abs(B2)<=number("1E-8")

break

3


>C1+=B2



4


>A1*=-1



5


>B1+=2



6

>output(4*C1)




3.


A

B

C

1

=1

=1

1

2

for

>C1=C1*B1


3


if 1/C1<=number("1E-8")

break

4


>A1=A1+1/C1


5


>B1+=1


6

>output(A1)