C语言分支与循环
前言:C语言作为一门结构化的程序设计语言,包含顺序,选择(if,switch),循环(for、while、do-while)三种结构
一、分支语句
1.if语句及关系,条件,逻辑操作符介绍
(1)语法形式:if(表达式) 语句
①表达式成立(结果为真):语句执行;表达式不成立(结果为假):语句不执行
②C语言中:0表示假,非0表示真
③注意:在if后面用{}将多条语句“封装起来”,程序逻辑上来讲是一条语句。即便if后面只有一条语句,也建议使用{},便于阅读。
(2)If语句的执行流程
(3)else语句:如果遇到多种情况需要进行判断,那么就需要用到else语句
①含义:如果if语句不执行,那么就执行else语句
②语法结构:if(表达式1) 语句1;
else(表达式2) 语句2;
if和else语句都默认只控制一条语句,在if后面用{}将多条语句“封装起来”,程序逻辑上来讲是一条语句。即便if后面只有一条语句,也建议使用{},便于阅读。
程序举例:输入一个年龄,如果≤18岁,则输出未成年;否则输出成年
③多分支判断:在if和else中间插入else if即可
④悬空else:else总是与和它最近的if语句进行配对。
程序举例:看看这个程序会输出啥?如果你觉得是hi,那就掉坑了,实际上是啥都不输出
原因解析:表面上看对齐的if和else是配对成一组的,但实际上else和第二个if配对,第二个if不执行,那else自然也就没有机会执行了。
(4)关系操作符:> < >= <= == !=
①关系表达式的返回值是0(假)和1(真),因此常用于if和while的条件判断
代码举例:
②多个关系运算符不宜连用,比如i<j<k,实际执行的是(i<j)<k,最终变成了是0或者1来和k比大小,显然不是写代码的最初意图。
(5)条件操作符:exp1?exp2:exp3
①计算逻辑:如果exp1为真,则计算exp2的值并将其作为整个表达式的值,否则计算exp3的值并将其作为整个表达式的值。
程序举例:年比较输入的a,b两个数的值,输出较大者
(6)逻辑操作符:与(&&),或(||),非(!)
①!:取反运算符(常用于改变单个表达式的真假)
②&&:与运算符(两边都为真才为真,否则为假)
③||:或运算符(两边都为假才为假,否则为真)
④逻辑运算符的短路操作:总是先对左边的表达式求值,如果单看左边的结果就能得出整个表达式的值,那么右侧的表达式就不会执行了。
2.switch语句
(1)基本格式:switch(整型表达式)
{
case 常量1:语句1;
break;
case 常量2:语句2;
break;
default:语句3;
}
(2)几点注意事项
①case和后面的数字之间要有空格
②加上break才能跳出switch,否则执行到底
③case和default无顺序要求,谁前谁后都可以
(3)如果没有break:那么在这个case语句后面的所有语句都会执行,可以看看下面这个例子:
二、循环语句
1.while循环
(1)基本格式:while(语句)
{
循环体
}
(2)while的执行流程:先判断表达式真假:若为真,执行完语句后又返回判断表达式真假;若为假,则直接不执行循环体
程序举例:在屏幕上打印1-10
while的本质:初始化(i=1),判断(i<=10),调整(i++)
但真正应用起来的时候,初始化,判断,调整可能会随代码量的增加而变得分散,为了集中这三步,for循环应运而生。
2.for循环
(1)基本格式:for(exp1;exp2;exp3)
{
循环体
}
(2)执行流程
程序举例:在屏幕上打印1-10
3.do-while循环
(1)基本格式:do
{
循环体
}while(表达式);
(2)执行流程:先执行一次表达式,再判断,也就是说,循环体至少被执行一次
程序举例:在屏幕上打印1-10
4.break和continue语句在循环中的应用
(1)Break:永久中止循环
(2)Continue:跳过本次循环continue之后的语句,直接来到下一次条件判断
这时候前面流程图break和continue的意思就明了了。