C语言的分支语句、循环语句,教你if、if-else、while、while-do、do-while、switch、goto如何使用

一、分支跳转语句

   if

        格式1 : 一条路

If (表达式语句)  //判断语句

{

    ...//执行语句;

}

        逻辑过程:会先来判断括号当中的表达式语句是真还是假,如果是真则执行花括号里面的内容,如果假则不执行;

        注      意:关键字后边的括号里的表达式是会被执行的,例如:如果你往里边放一个printf语句也会被执行并打印出来

if (printf("123"))//123  也会被打印出来
{
    printf("22");
}

        特     点:

                1、如果“执行表语句”只有一条,那我们可以不加花括号

                2、if语句里面可以嵌套自己

        格式2:二必选一

if(表达式语句/条件)

{

    //如果条件为真的表达式;

}

else

{
    
    //如果条件为假的表达式语句

}

        逻辑过程:会先来判断括号当中的表达式语句是真还是假,如果是真则执行if下面的花括号里面的内容,如果假则执行else下面的花括号的内容

        注       意:每个else总是从属于与其最近的上一个if

        多层嵌套范例

int a;
scanf("%d", &a);


if (a > 100)
{
    printf("A\n");
}
else
{
    if (a > 10)
    {
        printf("B\n");
    }
    else
    {
        if (a > 0)
        {
            printf("C\n");
        }
    }
}

 上边这段代码等价于下边这段代码:

int a;
scanf("%d", &a);


if (a > 100)
{
    printf("A\n");
}
else if(a > 10)
{
    printf("B\n");
}
else(a > 0)
{
    printf("C\n");
}
//一个容易犯的小思维误区:例如上边的例子里,现输入1000
//这时看起来是复合每一条判断语句的条件的,但,并不会执行每
//个判断语句下的内容;而是在第一条判断 if(a > 100) 处已经
//优先符合第一层条件,故马上执行第一个if下的内容printf("A\n");
//执行完后马上跳过其他if-else语句往下执行了

        逻辑过程:从第一个条件往下判断,一旦某个条件为真就马上执行这个条件下的中括号里的语句,执行完后马上跳出if-else语句部分,往下继续执行其他内容;

    switch:多路分支语句

        常用书写格式:

switch(整型变量)//只能放整型变量作为标签,其余类型都不可!或者放枚举类型,因枚举也属于整型

{
    case 值1: //值也只能是一个整型常量
        执行语句;
        break;
    case 值2:
        执行语句;
        break;
    case 最小值 ... 最大值://注意,这里的 ... 就是书写格式,例如:case:3 … 8 (表示3到8的区间)
        执行语句;
        break;
    default: 
        执行语句;
        break;
}

        逻辑过程:判断switch括号中的"整型变量"的值是多少,然后从下面的case中找到有没有相等的值或区间,有则直接进入对应语句运行,没有则运行default里面的语句

        注       意:

        1、switch当中的小括号的内容必须得是一个整型数据(int、 long、 short、 char、 enum),不能够是浮点型或者字符串等非整型数据

        2、default语句可以不加,default语句不管放在哪里都可以,但是所有的判断照旧,不会default的位置改变而改变

        3、break:在这里面叫做跳出switch语句,如果没有遇到break语句,程序会按照顺序从入口一直执行到遇到break或者是switch语句结束。

int a;  
scanf("%d", &a);//从键盘获取a的值

switch(a)
{
    case 1: printf("A\n");
    case 2: printf("B\n");
    defauit: printf("E\n");
    case 4: printf("C\n");
    case 5 ... 10: printf("D\n");
}
如果是这样,在每个case里都没有添加break来进行Switch语句的跳出
这个代码是这样执行的:
1、它会进入到该代码块里然后从第一个case语句开始往下执行,
直到找到一个符合它的语句便会开始从这条语句开始往下执行,而且!
是执行所有剩余的case和default语句,不管判断符不符合剩余的case
和default的条件,就算遇到default也不会停下来,而是一直执行到
最后一条语句结束。
2、并且若是输入的数字没有任何一个case符合,它会识别到default语句
并一路往下执行,直到Switch结束。

goto:跳转语句 

        作用:从程序的某处调用goto可以跳过去标签所在地的代码中运行。

        格式:

goto  标签;

标签名:
    执行语句


例如:
    printf("aaa");
goto A;
    printf("bbb");
A:
    printf("ccc");
执行结果:aaaccc,因为第二个打印语句已被goto语句跳过,不会被执行到

        注意:

        1,慎用goto(不要乱来),因为它会破坏C语言的面向过程性;

        2,被其跳过的中间所有语句都不会被执行,,然后从标签处往下继续执行直到函数退出或者goto到别的地方

        3,它只能在本函数之内执行,不能跳转到其他函数体里去;而汇编里的b指令可以往任何地方跳;

        4,在C语言里,goto一般不往上跳转;

        应用场景:

        1、goto语句一般会直接跳转到函数的出口(一般都是出错处理),如下需马上跳出多个循环的情况:

int main(void)
{
    whlie(a--)
    {
        while(b--)
        {
            while(c--)
            {
                if (出错判断)
                {
                    goto err;//此时如果当前这个while(c--)循环里出错了,因为其外部还有两层循环
                         //不会马上把错误反馈出去,此时我们只要加一个goto语句进行条件判断
                         //若出现了对应的错误则马上跳出循环,跳到程序末尾结束程序并返回
                         //“代码出错”这个信息,如此提高了代码运行效率
                }
            }
        }
    }

    return 0;//代码正常运行的返回

err:
    return -1;//代码出错时的返回
}

(PS:这一个行业潜规则;因:若你使用了goto却不跳到函数出口return处,是会破坏C的面向过程性、打乱逻辑的)

        2、在出错退出的时候定义一套动作,多个接口,例如下:执行多个错误反馈

int mian(void)
{
    ...
    goto err1;
    ...
    goto err2;
    ...
    goto err3;
    ...
    ...


/*如此,在代码出现不同错误时会跳转到对应的出口处,进行不同出错反馈
这样能帮助我们及时发现错误*/
    return 1;//程序正常运转的退出
err1:
    return -1;//出错反馈1
err2:
    return 0;//出错反馈2
err3:
    return 2;//出错反馈3
}

  

二、循环控制:

    While(表达式)  —— 先判断再执行

        格式:

while(判断表达式)
{
    表达式;
}

        逻辑过程:

        1、先判断 “判断表达式” 是否为真,如果为真则执行花括号中“表达式”的内容,如果为假,则直接跳出循环往下执行;执行完“表达式”的内容后,会重新回去判断“判断表达式”是否成立;

        2、重复  1  的过程:判断>>执行或退出循环>>判断>>执行或退出循环>>判断.........\

        经典应用:死循环 while(1)

        注意:

        1、离开while循环的最后一个步是 while(判断表达式) 里的 “判断表达式”  ;

        2、同上边所说的if一样,while后边的括号里的语句也是会被执行的,例如往里边放一个printf语句,它也会打印出来;

do while —— 先执行再判断

        格式:

do{
    执行表达式;
}while(判断表达式);

        逻辑过程:

        先执行花括号里的“执行表达式”的内容,再回头判断“判断表达式”是否为真,如果为真则再次执行花括号中“执行表达式”的内容,如果为假,则直接跳出循环

for:—— 最优的循环体

        格式:

for(初始化表达式; 判断表达式; 补充表达式)
{
    执行语句;
}

        逻辑过程:

        1、一开始执行for会先执行“初始化表达式”,而且执行且只执行一次初始化表达式

        2、接下来去判断"判断表达式"的内容是否为真,为真则开始执行“执行语句”,否则退出循环

        3、当我们执行完“执行语句”,会先运行“补充表达式”的内容,再继续判断条件是否为真,如此循环

        PS

        1、For( ;;) 等价于  while(1)

        循环体的现实:首选for,其次while(1)

三、分支语句和循环语句的 搭配命令

   break:

        作用:立即跳出循环体往下执行;用于循环体或switch语句,一个break只能跳出一层循环;

        逻辑过程:一旦遇到break直接跳出,不会拖泥带水,且离开循环体的最后一步就是break本身

   continue(继续):

        作用:只作用于循环体,跳过循环体内continue下面的语句,直接进入下一次循环

        注意:程序离开循环体的最后一步是进行条件判断;

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿饕饕鬄的饕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值