程序设计习题 第 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)