一、循环
1、while循环,“当”循环
notice:循环体内要有改变条件的机会,否则是死循环。
有可能循环一次也没有执行。
tips:纸上模拟程序的运行,写出变量的变化,或在程序适当的地方插入printf
exam:x n
10 0
1 1
0 2
pro1:数位数
调试
2、do-while循环
循环至少做一遍
输入0调试
最终结果n=1正确
tips:若要进行循环计算,计算之前先保存原始的值,后面可能用
pro2:猜数游戏
每次召唤rand()就得到一个随机的整数
pro3:算平均数
pro4:整数逆序
整数的分解
3、for循环(初始动作;循环继续的条件;循环每轮要做的动作)
for(;条件;) ==while(条件)
pro5:阶乘
ques1:什么时候选什么循环?
tips:有固定次数for,必须执行一次do-while,其他情况用while
二、循环控制
pro1:判断一个数是否为素数
break:跳出循环
continue:跳过循环这一轮剩下的语句进入下一轮
只能对它所在的那层循环做
gram2:输出100以内的素数
三、循环的嵌套
gram3:输出前50个素数
pro4:凑硬币,如何用1角、2角和5角的硬币凑出10元以下的金额
接力break:
goto:离开所有的循环跳到out所指的地方,适合嵌套循环的最内层跳到最外面,其他地方不建议使用
pro4:f(n)=1+1/2+1/3+1/4+...+1/n
起点:1,终点:n,都是明确的,所以用for合适
pro5:f(n)=1-1/2+1/3-1/4+...+1/n;
pro6:正序分解整数
输入一个非负整数,正序输出它的每一位数字。
输入:13245
输出:1 3 2 4 5
方案一:先逆序再逆序,只适合末尾没有0的数字。
看似完美,but!!!
方案二:
13425/10000-->1
13425%10000-->3425
10000/10-->1000
3425/1000-->3
3425%1000-->425
1000/10-->100
425/100-->4
425%100-->25
100/10-->10
25/10-->2
25%10-->5
10/10-->1
5/1-->5
5%1-->0
1/10-->0
but!!!
pro7:求最大公约数
算法1:枚举
算法2:辗转相除法
变量表格法分析:
a b t
12 18 12
18 12 6
12 6 0
6 0