二:级联的嵌套和判断
2.级联的if else
有一个分段函数
用if else语句表现出来就是
流程图为
所以级联的if else if 为
上篇提到过,if , else后面加大括号{ } ,但为什么级联的if else if后面没有大括号呢{ },那我们来加个大括号试试
发现else语句一直向右偏移,若果条件足够多,而我们得屏幕有限,到最后语句会超出我们的屏幕范围,而去掉大括号后对此没有影响,并且能使语句看起来很整齐
这样的if else就叫做级联的if else
三:多路分支
1.switch 语句
switch语句可以看作是基于计算时的跳转,计算控制表达式的值后,程序会跳转到与之相匹配的case(分支标号)处,分支标号只是说明switch内部位置的路标,在执行完分支内部的最后一条语句后,如果后面没有break那么就会执行下一个case,直到遇到break或者switch结束为止。
type:表达式
如果下面有一个case与之匹配,那么就会输出与之相配的结果
如果type结果为1,那么就会与case1匹配,输出相应语句直到break停止,如果与case都不匹配,那么就会与default匹配
所以switch case 语句为
注意:控制表达式只能是整数型的结果,表达式只能是int类型的
常量可以是常数也可以是常数计算的表达式,也可以是直接计算出结果的
思考:这个分段函数能否用switch case?划算么?
答:可以,但是不划算。switch-case的控制表达式为整型,且case后接常量表达式,而本题中的x是范围,如果硬要实现需要先做一次判断转化为常量整型,这样就没必要再放到switch里再做一次分支了。
四:循环的例子
1.循环计算
例一:
计算结果
结果
可以发现结果为6,但是输出的X为1而不是输入的值64
所以计算之前可以先保存原始的值,后面再用
但这些值是怎么定的呢?
可以假设一下 ret=1,那么while(X>2),因为到X=2就停止循环了,而2是2的一次方,因此需要在计算出的结果的基础上+1也就是在ret上+1, 那么就给ret一个初始值1就可以达到目的了
例二:
计数循环
问:这个循环需要执行多少次?
循环停下来时,有没有最后输出的0?
循环结束后,count的值是多少?
小套路:如果要模拟运行一次很大的次数循环,可以模拟较少的循环次数,然后做出推断
模拟运行
可以发现当循环停止时,0是有输出的
当循环结束时n=-1
当n=3时循环次数为4
由此可以推出,n的循环次数为n+1
2.算平均数
变量->算法->流程图->程序
平均数要怎么算?
只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了。
一个变量记录累加的结果,一个变量记录读到的数的个数。
算法
1.初始化变量sum和count为0;
2.读入number;
3.如果number不是-1,则将number加入sum,并将count加1,回到2;
4.如果number是-1,则计算和打印出sum/count(注意换成浮点来计算)。
流程图
程序实现
可以发现要判断两次number,比较麻烦,这时可以将if换成while ,用while循环