C Primer Plus第七章

这篇博客详细介绍了C语言中的控制结构,包括if、if-else、else-if、嵌套if和switch-case的使用。强调了逻辑运算符的优先级和短路特性,并解释了如何利用continue和break在循环中控制流程。此外,还提到了条件运算符(三目运算符)作为if-else的简洁形式。文章通过实例展示了这些控制结构和逻辑运算在处理字符输入/输出及循环中的应用。
摘要由CSDN通过智能技术生成

        一、if语句

        通用形式

if(expression)
{
    statement; 
}

        expression为真,执行statement,否则跳过statement

         二、if-else

        通用形式

if(expression)
{
    statement1;
}
else
{
    statement2;
}

        双分支结构,若expression为真,执行statement1·,否则执行statement2。

        三、else-if

        通用形式

if(expression1)
{
    statement1;
}
else if(expression2)
{
    statement2;
}
else
{
    statement3;
}

        多分支结构,在第一个if和最后一个else之间,可以有多个else-if分支。

        四、else与if匹配

        在没有花括号约束的情况下,else与距离自己最近的if进行匹配

if(x > 10)                   //如果 x > 10,才会进行执行第一个输出    
{
    printf("I'm the first if\n");

    if(x < 20)                //如果 10 < x < 20,会执行第二个输出
    {
        printf(“I'm the second if\n”);
    }
}
else                         //如果 x <= 10,才会输出done!这个else是与第1个if配对的
{
    printf("done!\n");
}

        以上代码,如果缺少花括号,流程就会有所改变

if(x > 10)                   //如果 x > 10,才会进行执行第一个输出 
   
    printf("I'm the first if\n");

    if(x < 20)                //只要 x < 20,就执行第二个输出
    {
        printf(“I'm the second if\n”);
    }
else                         //如果 x >= 20,才会输出done!这个else是与第2个if配对的
{
    printf("done!\n");
}

        五、字符输入/输出函数:getchar()和putchar()

        getchar()不带任何参数,从输入中接收并返回下一个字符,返回值类型为int

int ch;

ch = getchar();   //将getchar()接收到的字符赋值给变量ch。

//变量ch设置位整型,确保能够准确接收getchar()的赋值。因为getchar()可以接收输入中的任意字符。
//若将ch设置位char类型,就属于将int类型的返回值赋值给char类型变量,是降级操作,可能导致输入的字符被截断,从而无法得到正确的字符。

        putchar()函数打印它的参数。

putchar(ch);        //ch是上面代码段声明的变量

printf("%d", ch);   //这两条语句等价

         六、逻辑运算符

逻辑运算符含义
&&
||

        优先级:

        (1)!运算符的优先级非常高,与递增运算符的优先级相同,只低于圆括号

        (2)&&运算符的优先级高于||运算符,但两者的优先级都低于关系运算符,高于赋值运算符

        (3)在一个表达式中使用多种运算符时,即便清楚优先级,最好也使用圆括号,方便阅读

        求值顺序

        除了两个运算符共享一个运算对象的情况外,C通常不保证先对复杂表达式中的哪一项进行求值。

        但是,对于逻辑运算符是一个例外!

        C保证,逻辑表达式的求值顺序是从左往右。&&和||都是序列点,所以程序在从一个运算对象执行到下一个运算对象之前,所有的副作用都会生效。

        C保证,一旦发现某个元素使整个表达式无效,立即停止求值

while((ch = getchar()) != ' ' && ch != '\n')  //逻辑表达式的求值顺序确保ch先被赋值

        七、条件运算符

        C提供条件表达式作为if-else的一种便捷方式,该表达式使用条件运算符,通用形式:

//如果expression为真,那么整个条件表达式的值与expression1的值相同,否则与expression2的值相同
expression ? sexpression1 : expression2;

        八、循环辅助:continue和break

        continue

        continue和bireak语句可以根据循环体中的测试结果来忽略一部分循环内容,甚至结束循环

        3种循环都可以使用continue语句。执行到该语句时,会跳过本次迭代的剩余部分,开始执行下一次迭代。

        如果continue语句在嵌套循环内,只会影响包含该语句的内层循环

        continue还可以作为占位符

while(getchar() != '\n')
{
    continue;                //如果输入的不是回车,则丢弃输入
}

//因为这个循环的循环体是一条空语句,什么都不用执行
//所以这里的continue只是作提醒作用,比起空语句,更能让人注意到这个循环的循环体,提高了程序的可读性

         对于whiledo-while循环,执行continue语句后的下一个动作是对循环的测试表达式求值

        对于for循环,执行continue的下一个动作是对更新表达式求值,然后再对测试表达式求值

         break

        程序执行到bireak语句时,会终止包含它的循环,并继续执行循环后面的语句。

        对于for循环,break和continue的情况不同,执行完break语句后,会直接执行循环后面的语句,不会对更新表达式求值

        与continue一样,在嵌套循环中的break只会影响包含它的当前循环

        九、switch和break

        多重选择:switch-case,通用形式

switch(整型表达式)
{
    case 常量1:                  //可以有多个case标签供选择
        statement1;               //可以使用break语句跳出switch
    case 常量2:
        statement2;               
    default:                      //default语句是可选的,但一般都会有
        sataement;
}

         switch在圆括号中的测试表达式应该是一个整数值(包括char类型)。

        case标签必须是整数类型(包括char类型)的常量或整型常量表达式。

       多重标签的switch语句:程序根据expression的值跳转至case标签处。然后,执行剩下的所有语句,非常执行到break语句进行重定向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值