【《C和指针》阅读笔记】Chapter4 Statements

文章目录空语句表达式语句代码块if语句while语句break和continue语句for语句do语句switch语句switch中的break语句default子句goto语句(**慎用!**)空语句  C最简单的渔具就是空语句,它本身只包含一个分号。空语句本身并不执行任何任务,但有时还是有用的。 表达式语句  只要在表达式后面加上一个分号,就可以把表达式转变为语句。pr...
摘要由CSDN通过智能技术生成

空语句

  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:   ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值