C语言是结构化的程序设计语言。这里结构指的是顺序结构,选择结构,循环结构。我们可以使用if,switch语句实现选择结构;for,while,do...while语句实现循环结构。
一、if语句
if语句有三种形式:
1、if(表达式)
语句;
2、if(表达式)
语句1;
else
语句2;
3、if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
下面是代码示例:
1.
注:在写else if中的条件时,要用&&操作符(逻辑与),假设使用(18 < age <30)的形式,此时程序先执行18<age,左边为真,18<age的结果为真,运算结果就为1,然后再执行1<30这个语句。
默认在if和else语句中只控制一条语句,如果要控制多个语句,应使用大括号。例: 添上大括号之后的代码可以控制下面两条printf语句:
嵌套if语句:输入一个整数,如果是整数,再判断是奇数还是偶数,并输出;如果不是正数则输出:非正数。悬空else问题:如果有多个if和else,else总是和最接近的if匹配。
如上代码,上面的代码排版让我们误认为它是与第一个if匹配的,当if语句不成立的时候,自然能想到的就是执行else子句。事实上else是和第二个if进行匹配,后面的if...else语句是嵌套在第一个if语句中的。第一个if语句条件不成立。自然无法执行if...else语句,故什么都不打印。如果换成如下代码则更容易理解。
如果我们确实想要else与第一个if进行匹配,可以这样修改代码:
可以看到,只要带上适当的大括号,代码的逻辑就会变得清晰。
二、switch语句
除了if语句之外,switch语句也可以实现分支结构。
switch语句是一种特殊的if...else结构,用于判断条件有多个结果的情况。相较if...else结构,switch语句更简单,可读性更好。
形式如下:
switch(expression){
case value1:statement
case value2:statement
default:statement
}
注:expression必须是整型表达式;case后的值必须是整型常量表达式。
例:输入任意一个整数值,计算除3之后的余数。
我们要注意的点有:(1)case和后面的数字之间必须要有空格;(2)每一个case语句中的代码执行完成后,需要加上break,才能跳出这个switch语句。
如果没有break语句,代码执行结果如下:
3除7的余数原本是1,但是程序下面又多了一行“余数是2”的打印。原因是break语句是用于跳出switch语句。如果没有break语句,代码会继续向下执行,有可能执行其他case语句中的代码。因此break语句在switch语句中非常重要,有它才能实现真正意义上的分支。
default子句:当switch语句后的表达式中的值无法匹配代码中的case语句时,要么不予以处理,要么加入default子句。基本形式如下:
switch(expression){
case value1:statement
case value2:statement
default:statement
}
当switch后面的expression的结果不是value1,也不是value2时,就会执行default子句。
例:打印星期,如果day的输入不是1-7,则提示错误。
default子句没有顺序要求,但通常把它放到最后处理。
三、while语句
while语句是实现循环结构的语句。
基本形式:while(表达式)
语句;//想要包含更多语句,可以加上大括号
若表达式的值为0.则循环直接结束;若表达式的值不为零,则执行语句,执行完之后再判断,是否进行下一次循环。
例:在屏幕上打印1-10的值。
四、for循环
for是三种循环中使用最多的,其基本形式如下:
for(表达式1;表达式2;表达式3)
语句;//如果执行更多语句,可以加上大括号
表达式1用于循环变量的初始化;
表达式2用于循环结束条件的判断;
表达式3用于循环变量的调整。
首先执行表达式1初始化循环变量,接下来就是执行表达式2的判断部分。表达式2的结果如果==0则循环结束;表达式2的结果如果!=0则执行循环语句,循环语句执行完之后,再去执行表达式3,调整循环变量,然后再回到表达式2的地方执行判断,表达式2的结果是否为零,决定循环是否继续执行。
例:在屏幕上打印1-10的值。
五、do...while循环
在循环语句中,do...while的使用最少,它的语法如下:
do
语句;
while(表达式);
while和for这两种循环都是先判断,满足条件进入循环,不满足条件跳出循环;而do...while则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式。表达式为真就会进行下一次,表达式为假则不再循环。
例:在屏幕上打印1-10的值。
do...while语句中循环体至少执行1次,这是do...while比较特殊的地方。