控制语句
程序的三种基本结构
复合语句
将若干个c语句使用花括号{ }包括起来形成复合语句。花括号内可以包含任何c语句,
其一般形式为:
{
语句1;
语句2;
……
语句n;
}
1.if条件分支语句
if语句有三种语法形式,构成三种分支结构。
1)流程(单选控制结构)
语句形式如下:
if (表达式)语句;
其中,表达式可以是任何种类的表达式。
执行过程中:若表达式的值为逻辑真(非0值),则执行if的内嵌语句;若表达式的逻辑值为假(0值),则跳过该语句,执行if语句的下一条语句。
单选控制结构只有1条语句可供选择:或者执行,或者不执行。
如:高考分数大于650分,则选择清华大学。
if (scores > 650) university=tsinghua university;
2)if…else流程(二选一控制结构)
语句形式如下:
if (表达式)
语句1;
else
语句2;
代表两路分支结构,即二选一控制结构。
执行过程:如果表达式的值为真,则执行语句1;否则,执行语句2.
如,求b的绝对值
if (b>=0)
a=b;
else
a=-b;
如果语句1、语句2不需要采用复合语句时,if语句可以用条件运算符?:简化。
如,求b的绝对值可以这么写
a=(b>=0)?b:-b;
3)else…if流程(多选一控制结构)
语句形式如下:
if ( 表达式1) 语句1;
else if(表达式2) 语句2;
else if(表达式3) 语句3;
……
else if(表达式n) 语句n;
else 语句n+1;
根据条件的判定,进行多路分支选择,即多选一控制结构。
执行过程:依次计算各表达式的值;若某个表达式的值为真,则执行相应的语句,然后执行if之后的后续语句。
if语句中的最后一条else语句用来处理所有条件均不成立的情况,即当所有表达式的值均为假时,执行最后一个else后的语句。如果所有条件均不成立时,不需要完成任何操作,则可省略else。
4)if语句嵌套
c语言允许if语句嵌套,if的内嵌语句可以是另一条三种形式之一的if语句。
如:在a>=b的条件下,判断a,c中的最大值:
if (a>=b) if(a>=c) printf("max=%d\n",a); else printf("max=%d\n",c);
在if流程中嵌套了if…else流程。
使用if语句嵌套时,应注意if与else的配套关系,以免发生二义性。
如:用if语句完成一个分段函数计算:
-a x<0 | |
y= | 0 x=0 |
a x>0 |
如果程序段为:
y=-a; if(x!=0) if(x>0) y=a; else y=0;
执行结果就时错误的,问题出在else和if的配对。c语言采用的是最邻近配对原则,else总是与它最近的if配对,尽管形式上写成了else与第一个if配对,但语法上else是与第二个if配对的,所以出现错误,这种情况出现,可采用复合语句的方法来解决。
程序段改写为:
y=-a; if(x!=0){ if(x>0) y=0; } else y=0;
采用复合语句,从语法上规定了程序段第3~5行已是第一个if语句的一条完整的内嵌语句,是一个if流程,因此不能再与else子句配对,从而使得else与第一个if语句配对。
4.switch多路开关语句
一般形式为:switch(表达式) { case常量1:语句1; break; case常量2:语句2; break; …… case常量n:语句n; break; default:语句n+1; }
其中,switch,case和default为关键字。switch后的表达式可以是整型或字符型表达式,但不能是关系表达式或逻辑表达式。常量1~n可以是整数、字符或常量 表达式。
执行过程:计算swicth语句中的表达式的值,再依次与case后面的1~n个常量比较,当表达式的值与某个case后的常量相等时,则执行该case对应的语句;break语句可以跳出switch结构。
如果n个常量都不等于switch中的表达式的值,则执行default后的语句。
每个case后的语句可以是单条语句或空语句,也可以是多条语句构成的一个程序段。
break语句的作用是结束switch语句,使流程跳出switch结构。缺少break语句不能实现多路分支。
5.for循环
一般形式:
for(表达式1;表达式2;表达式3)
循环体
表达式1——一般为赋值表达式,为循环控制变量赋初值
表达式2——一般为关系表达式或逻辑表达式,为控制循环结束的条件。
表达式3——一般为赋值表达式,对循环控制变量进行修改(增量或减量)
循环体——可以是单语句,也可以是复合语句
6.while循环和do…while循环
1)while语句
while语句
一般形式:
while(表达式)
循环体
2)do…while语句
一般形式为:
do循环体while(表达式);
7.循环嵌套
1)for(…) { … while(…) {…} …… } 2)do { … for(…) {…} … }while; 3)while(…) { … do{ … }while(); … } 4)for(…) { … for(…) {…} … }
8.break,continue,goto语句
1)break语句
可用于switch语句中,使某个case子句执行完后,跳出switch结构,实现多路分支。
在for、while和do…while循环结构中,当需要循环在一定条件下提前终止时,break语句可以跳转出循环结构。
break语句提供了通过中间测试使循环结束的中间出口方法。
2)continue语句
continue语句只能用于循环结构,continue语句结束本次循环,直接进入本循环结构的下一次循环操作
3)goto语句
一般形式为
goto标号;
…
标号:语句
标号使用标识符表达
标号代表的语句可以是一个空语句
goto语句只能从循环嵌套内层转向外层,反之则不行。