C语言语句总结
1.空语句
C语言最简单的就是空语句,本身只包含一个分号,空语句本身不执行任何任务
2.表达式语句
c并不存在专门的“赋值语句“,那么它的赋值就是一种操作,和加法减法一样,在表达式内部进行
x = y + 3;
ch = getchar()
这实际上是表达式语句,不是赋值语句
请考虑下面这条语句:
printf("hello world");
printf是一个函数,函数将会返回一个值,但是printf函数的返回值(它实际打印的字符数),我们通常并不关心,所谓语句没有效果,只是表达式的值被忽略。
printf函数所执行的是有用的工作,这类作用称为”副作用“。
3.代码块
代码块就是位于一对花括号之内的可选的声明和语句列表
{
declatations;
statements;
}
代码块可以用于要求出现语句的地方,它允许你在语法要求只出现一条语句的地方使用多条语句。代码块还允许你把
数据的声明非常靠近它所使用的地方
4.if语句
if(expression)
statement;
else
statement;
括号是if语句的一部分,因此必须出现。
如果expression的值为真,那么就执行第一个statement,否则就跳过它,如果存在else子句,它后面的statement只有当expression为假的时候才会执行
C并不具备布尔类型,而是用整型代替——0表示假,非0值表示真
注:else子句从属于最靠近它的不完整的if语句。
5.while语句
while(expression)
statement
循环的测试在循环体开始执行之前进行,所以如果测试的结果一开始就是假,循环体就不会执行。当循环体需要多条语句来完成任务的时候,可以使用代码块来实现
5.1break和continue语句
在while循环中可以使用break语句,用于终止循环,直接结束循环。
在while循环中可以使用continue语句,用于永久终止当前的那次循环,在执行完continue语句之后,执行流接下来就是重新开始while循环
在嵌套的循环内部,这两条语句只对最内层的循环起作用
5.2while循环示意图
6.for语句
C的for语句是while循环的一种极为常用的语句组合形式的简写法,语法如下所示:
for(experssion1; experssion2; experssion3)
statement;
statement语句称为循环体,
experssion1是初始化部分,它只在循环开始执行时执行一次,
experssion2语句成为条件部分,它在循环体每次执行前都要执行一次,都像while语句中的表达式一样,
experssion3成为调整部分,它在循环体每次执行完毕,在条件部分即将执行之前执行。所有三个表达式都是可选的,都可以省略。
如果省略条件部分,那么表示测试的值始终为真。
在for语句中也有continue和break语句
for语句的执行过程
for语句的执行过程几乎和下面的while循环一摸一样
experssion1;
while(experssion2) {
statement;
experssion3;
}
for语句和while语句执行过程的区别是在于出现continue语句时,在for语句中,循环直接会跳过循环体剩余部分,回到调整部分,在while语句中,如果有调整语句,它也是循环体的一部分,continue语句可能会直接跳过它
for循环有一个风格上的优势,它把所有用于操作循环的表达式收集在一起,放在同一个地方便于观察寻找,
当循环体比较庞大时,这个优点更为突出。
7.do语句
do语句很像while语句,只是它的测试在循环体之后执行,而不是先于循环体执行,这种循环的循环体至少执行一次,它的语法如下:
do
statements;
while(experssion)
如何在while循环和do语句之间进行选择呢?
当你需要循环体至少执行一次的时候,选择do语句
8.switch语句
switch(experssion)
statement
尽管switch语句体内只有一条单一的语句是合法的,但实际使用时的switch语句一般如下所示:
switch(experssion) {
statement-list
}
贯穿于语句列表之间的是一个或多个case标签,形式如下:
case constant-experssion:
每个case标签必须具有一个唯一的值,常量表达式是指在编译期间进行求值的表达式,不能是任何变量。
8.1switch中的break语句
如果在switch语句执行中遇到了break语句,执行流就会立即跳到语句列表的末尾。
break语句的实际效果是把语句列表划分为不同的部分;
在switch语句中,continue语句没有任何效果.
8.2default子句
在switch语句中,如果表达式的值与所有的case标签的值都不匹配的话,那么所有的语句都会被跳过,程序并不会终止,也不会提示
任何错误,因为这种情况在C中并不认为是个错误,所以:
我们在语句列表中增加一条default子句,写在任何一个case标签可以出现的位置,当switch表达式的值不匹配任何case语句的时候,
default子句后面的语句就会执行。每个switch语句中只能出现一条default语句.
9.goto语句
goto语句语法如下:
goto 语句标签
语句标签就是标识符后面加上个冒号,包含这些标签的goto语句可以出现在同一个函数的任意位置
goto语句是一种危险的语句,因为使用goto语句容易增加代码的复杂性
但是在一中情况下,即使是结构良好的程序,使用goto语句也非常合适——跳出多层嵌套的循环
while(condition1) {
while(condition2) {
while(condition3) {
if(some disaster)
goto quit;
}
}
}
quit:;
想要在这种情况下避免使用goto语句有两种方法,第一个方案是当你希望退出所有循环时设置一个状态标志,但这个标志必须在每个循环中进行测试
另一种方案是把所有的循环都放到一个单独的函数里,当你想离开最内层循环的时候,可以使用return语句离开这个函数