文章目录
空语句
C最简单的渔具就是空语句,它本身只包含一个分号。空语句本身并不执行任何任务,但有时还是有用的。
表达式语句
只要在表达式后面加上一个分号,就可以把表达式转变为语句。
printf("Hello, world!\n");
printf
是一个函数,函数将会返回一个值,但printf
函数的返回值(它实际所打印的字符数)我们通常并不关心。所谓语句“没有效果”只是表示表达式的值被忽略。printf
函数所执行的是有用的工作,这类作用称为 “副作用(side effect)”。
代码块
代码块就是位于一对花括号之内的可选的声明和语句列表。
如:
{
declarations
statements
}
if语句
C的if语句语法如下:
if (expression)
statement
else
statement
如果expression的值为真,那么就执行第1个statement,否则就跳过它。如果存在else子句,它后面的statement只有当expression的值为假的时候才会执行。
在C的if语句和其他语言的if语句中,只存在一个差别——C不具备布尔类型,而是用整型来代替。这样,expression可以是任何能够产生整型结果的表达式——零值表示“假”,非零值表示“真”。
当if语句嵌套出现时,就会出现“悬空的else”问题。
例如如下语句:
if(i > 1)
if(j > 2)
printf("i > 1 and j > 2\n");
else
printf("no they're not\n")
这个问题的答案和其他绝大多数语言一样,就是 else子句从属于最靠近它的不完整的if语句。 如果你想让它从属于第1个if语句,你可以把第2个if语句补充完整,加上一条空的else子句,或者用花括号把它包围在一个代码块之内,如下所示:
if(i > 1){
if(j > 2)
printf("i > 1 and j > 2\n");
}
else
printf("no they're not\n")
while语句
while语句的语法如下:
while(expression)
statement
循环的测试在循环体开始之前进行。
break和continue语句
在while循环中可以使用break语句,用于永久终止循环。在执行完break语句之后,执行流下一条执行的语句就是循环正常结束后应该执行的那条语句。
在while循环中也可以使用continue语句,它用于永久终止当前的那次循环。在执行完continue语句之后,执行流接下来就是重新测试表达式的值,决定是否继续执行循环。
这两条语句的任何一条如果出现于嵌套的循环内部,它只对最内层的循环起作用,你无法使用break或continue语句影响外层循环的执行。
提示:
偶尔,while语句在表达式中就可以完成整个语句的任务,于是循环体就无事可做。在这种情况下,循环体就用空语句来表示。如:
while( (ch = getchar() ) != EOF && ch != '\n')
;
for语句
C的for语句是while循环的一种极为常用的语句组合形式的简写法。for语句的语法如下所示:
for(expression1; expression2; expression3)
statement
- 其中的statement称为循环体。
- expression1为初始化部分,它只在循环开始时执行一次。
- expression2称为条件部分,它在循环体每次执行前都要执行一次,进行判断。
- expression3称为调整部分,它在循环体每次执行完毕,在条件部分即将执行之前执行。
- 在for循环中也可以使用break语句和continue语句。
do语句
C语言的do语句很像while语句,只是它的测试在循环体执行之后才进行,而不是先于循环体执行。下面是它的语法:
do
statement
while( expression );
当你的循环体至少执行一次时,选择do。
switch语句
它的语法如下,其中expression的结果必须是整型值。
switch( expression ){
statement-list
}
贯穿于语句列表之间的是一个或多个case标签,形式如下:
case constant-expression:
switch语句首先计算expression的值;然后,执行流转到语句列表中其case标签值与expression的值匹配的语句。从这条语句起,知道语句列表的结束也就是switch语句的底部,它们之间所有的语句均被执行。
switch中的break语句
如果在switch语句的执行中遇到了break语句,执行流就会立即跳到语句列表的末尾。
在switch语句中,continue语句没有任何效果。只有当switch语句位于某个循环内部时,你才可以把continue语句放在switch语句内。
default子句
如果表达式的值与所有的case标签的值都不匹配,所有的语句都会被跳过,程序并不会终止,也不会提示任何错误。
你可以在语句列表中增加一条default子句,当switch表达式的值与所有case标签的值都不匹配时,这个default子句后面的语句就会执行。
default:
goto语句(慎用!)
它的语法如下:
goto 语句标签;
要使用goto,你必须在你希望跳转的语句前面加上语句标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。
在一种情况下,即使是结构良好的程序,使用goto语句也可能非常合适——就是跳出多层嵌套的循环。由于break语句只影响包围它的最内层循环,要想立即从深层嵌套循环中退出只有一个办法,就是使用goto语句。如下例所示:
while( condition1 ){
while( condition2 ){
while( condition 3){
if( some disaster )
goto quit;
}
}
}
quit: ;