4. 流程控制语句
运算符补充:
tip 1:非0为真
例:m=-1&&-1 为1
tip 2:按位取反 --0变1,1变0
--默认是有符号数据 --cpu采用补码机制
--例:254按位取反是-255,但如果规定无符号,答案就是1。
tip 3: x%=(k-k%=5); 这个表达式是先算k-k,导致表达式无意义。
注:运算符只要和=一起,如%=,-=,+=,优先级就是最低的,最后算。
tip 4:在将小数强转为整数类型时,通常不会四舍五入,而是直接将小数部分舍弃,只保留整数部分。
程序的执行顺序
自上而下,自左向右 执行
tip:程序的构成:数据结构+算法
流程控制语句作用
--控制程序的执行顺序 --控制条件 --执行内容
流程控制语句分类
- 选择结构 --2条 --if/switch
- 循环结构 --3条 --for/while/do while
- 控制结构 --4条 --break/continue/return
选择结构
- if语句 语法:
(1)if(条件)
{
语句;
}
如果条件为真,则先执行大括号里边的语句,再顺序执行后边的程序,否则直接执行后边的程序
(2)if(条件)
{
语句1;
}
else
{
语句2;
}
如果条件为真,则执行语句1,再执行后边的程序;否则执行语句2,再执行后边的语句
(3)if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
.
.
else if(条件n)
{
语句n;
}
else
{
语句n+1;
}
先判断条件1,如果满足执行语句1,
如果不满足判断条件2,满足执行语句2,
不满足判断语句3.....
当所有条件都不满足时,执行else语句。
注:
(1)三种if选择结构,可以相互嵌套使用
(2)当if选择结构的{}内只有一句代码时,可以省略不写 --不建议
(3)if选择结构大多适合于区间范围的判断
- switch语句
语法:
switch(变量) 注:该变量目前仅支持int类型
{
case 值:
语句1;
break;--break,中途跳出switch,不再进行匹配。
case 常量2:
语句2;
break;
...
default: --所有case匹配不上后,会进入default --兜底匹配
语句n;
break;
}
变量等于常量1,执行语句1,等于常量2,执行语句2...都不相等执行default语句
注意事项:
switch选择结构大多适用于等值选择 -- 菜单选择
break 省略不写,switch 结构不会造成影响。但是运行结果有影响,不能中途退出,会把 switch 中的内容全输出。 会把语句全部按顺序执行,直到遇到break;
default 省略不写,switch 结构不会造成影响,但是没有兜底匹配,一级相应输出内容
default位置无关,switch优先匹配case值,case匹配没有,才会进入 default运行。
循环结构
- while循环
语法
while(条件)
{
循环体;
}
先判断条件,如果条件为真,执行循环体,再判断条件,再执行循环体,直到条件为假,跳出循环。
特点:先判断,后执行。循环操作可能一次都不会被执行。
使用场景:多用于循环次数未知的情况。
2. do while循环
语法:
do
{
循环体;
}
while(条件);
先执行循环体,再判断条件,如果条件为真,执行循环体,再判断条件,再执行循环体,直到条件为假,跳出循环。
特点:先执行,后判断;循环操作至少执行一次。
使用场景:多用于循环次数未知的情况。
tip:这里用getchar()的原因:
--getchar()是获取一个字符,且不开辟空间。
这里用getchar()的原因是,当用户输出值后,必须按回车才会执行,则输入在终端的数不仅仅是数值,还有\n,scanf()接收n值,如果不用getchar(),在下一次循环时,scanf()就会接收到\n,导致程序出错。所以让getchar()接收\n,这样下一次循环时,scanf()接收的就是用户输入的值。
3. for循环
语法:
for(初始化;条件;迭代)
{
循环体;
}
先执行初始化,再判断条件,如果条件为真,执行循环体,再执行迭代,再判断条件,再执行循环体,再执行迭代,直到条件为假,跳出循环。
注:
(1)1不写在for循环内,可以,不会造成影响。
(2)2省略不写,不可以 --死循环
(3)3省略不写,不可以,计数器不变化 --死循环
(4)“;”不写,结构出现问题,编译出错。
特点:先判断,后执行。循环操作一次都不会被执行。
使用场景:大多用于循环次数已知的情况。
4. 循环结构的注意事项
(1)循环结构只有一句或没有时,{}可以省略不写。
(2)所有的循环均可以相互嵌套 --不建议嵌套次数超过3层。
外层循环执行一次,内层循环执行一轮(也就是执行完)。
控制语句
- break语句
作用:结束当前整个循环。 --循环不能正常结束,会终止循环。
使用范围:只能在循环结构和switch中使用 - continue语句
作用:跳过本次循环,继续下一次循环。 --循环可以正常执行。
使用范围:只能用于循环结构 - return语句
作用:结束整个函数,返回值。
使用范围:整个函数中都可以使用 - goto语句
作用:跳转到标记位。--loop --慎用
使用范围:整个函数中都可以使用