5.2.1 循环控制
判断素数
break vs continue
break:跳出循环
Continue:跳过循环剩下的语句进入下一轮
场景巧计:一排同学唱歌,第一个唱的很好听,坐下;第二个唱的一般,唱到一半领导说“continue”,则这个同学后面的就不用唱了,第三个同站起来唱,唱到一半太难听领导忍无可忍说“break”,第三个同学结束,后面的同学没机会再唱了
程序2
5.2.2 嵌套的循环
循环里面还是循环
列出0-100的素数:(for循环里面套for循环)
⚠️注意:两个循环中变量要不一样
输出前五十个素数:
Cnt:充当计数器的作用
5.2.3从嵌套的循环中跳出
题型:凑硬币
如何用一角、两角、五角的硬币凑出十元以下的金额
若只想要输出一种方法,则要跳出循环
But break和continue只能对一层循环做,没办法跳出三层循环
方法一:接力break
为什么不能直接打三个break而要加上判断语句?
加上exit和判断语句是为了避免无论以什么结果跳出第一轮循环(有可能中间的判断条件成立提前跳出循环,也有可能一直不成立跳出循环),第二轮第三轮循环也都break跳出循环了。
方法2:goto
out:是自己在程序中标记的标号(标号也可以是别的)
goto out:表示goto (跳到)所指的地方(out)去
⭕️建议只在跳出多重循环的情况下用goto语句
5.3.1 前n项求和
⭕️要把1改成浮点数否则计算出来结果为0(浮点数和整数放一块运算时,C会将整数转换成浮点数再进行浮点数运算)
变式:
法一:
法二:
5.3.2整数分解
先复习一下倒序分解:
如何正序分解?
像这样先把x逆序后再逆序分解? But……试试x=700
答案是7而不是7 0 0,所以该方法只适用于后面没有0 的整数,需要换一种方法:
8-23行的计算可得出我们想要的结果,如何用代码实现?
当x=70000时,依然输出错误,如何修改?
由于70000/10000=7 ,70000%10000=0 ,判断条件为x>0,所以只执行了一轮就结束了,而我们希望继续运行下去,所以可以将条件改为mask>0
如何让mask不是一个固定的数?
完整程序:
⭕️int t = x 是因为直接用x做运算会使x最后的值改变,所以用t做运算而不让x直接做运算
5.3.3 求最大公约数
方法一:枚举
方法二:辗转相除法
变量列表
写成代码