黑马程序员——C语言基础---分支结构

                                                                       ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

一、if语句介绍及基本格式

1、if语句实现分支控制 

一般形式(第一种形式):表示如果表达式为真,执行语句块1,否则不执行。 

if(表达式)

{

    语句块1

}

后续语句;

<span style="font-size:14px;">#include <stdio.h>
int main(int argc, const char * argv[]) {
    //先定义变量
    int num=0;
    //提示用户输入一个数
    printf("请输入一个数字:\n"); 
    //接收用户输入的数
    scanf("%d",&num);
    //判断这个数是否等于5
    if (num == 5) {
        printf("恭喜你!\n");
    }
    //如果等于5    提示    恭喜你
    printf("num = %d\n",num);
    //如果不等于 5   提示很可惜
    if (num != 5) {
        printf("很可惜!\n");
    }
    return 0;
}</span>

二、if ...else ...语句使用 

如果表达式为真,则执行语句块1,否则执行语句块2 

if(表达式)

{

    语句块1;

}

else

{

    语句块2;

}

2、if语句嵌套 

if(表达式1)

{

    ......

    if(表达式2)

    {

    }

    else

    {

    }

    ......}

else

{

}

<span style="font-size:14px;">#include <stdio.h>
void test(){
    //先定义变量
    int num=0;
    //提示用户输入一个数
    printf("请输入一个数字:\n");  
    //接收用户输入的数
    scanf("%d",&num); 
    //判断这个数是否等于5
    // num == 5 为假 可能是大于5,也可能是小于5
    if (num == 5) {
        //如果等于了5,提示 恭喜你
        printf("恭喜你!\n");
    }else{
        //否则提示 很可惜
        printf("很可惜!\n");
    }
}
int main(int argc, const char * argv[]) {
    //先定义变量
    int num=0;
    //提示用户输入一个数
    printf("请输入一个数字:\n");  
    //接收用户输入的数
    scanf("%d",&num);  
    //判断这个数是否等于5
    // num == 5 为假 可能是大于5,也可能是小于5
    if (num == 5) {
        printf("恭喜你\n");
    }else{
        //再判断,如果这个数大于5 提示 大于5
        if (num > 5) {
            printf("大于5了\n");
        }else{
            //否则提示  小于5
            printf("小于5了\n");
        }
    }
    return 0;
}</span>

三、if…else if语句

如果表达式1为真,则执行语句块1,否则判断表达式2,如果为真执行语句块2,否则再判断 表达式3,如果真执行语句块3, 当表达式1、2、3都不满足,会执行最后一个else语句。 

if(表达式1)

{

    语句块1

}

else if(表达式2)

{

    语句块2

}

else if(表达式3)

{

    语句块3

}

else

{

    语句块4

}

<span style="font-size:14px;">#include <stdio.h>
int main(int argc, const char * argv[]) {
    //定义变量,保存用户输入的分数
    int score=0;
    //提示用户输入一个分数
    printf("请输入一个分数:\n");
    //接收分数
    scanf("%d",&score);
    //校验分数是否合法( score<0||score>100)
    if (score<0 || score > 100) {
        printf("分数不合法!\n");
    }else{
        //当分数合法以后,再判断等级
        if (score<=59) {  //0-59 想反 60-100
            printf("E\n");
        }else if(score<=69){  //60-69     70-100 
            printf("D\n");
        }else if (score<=79){ //70-79     80-100      
            //C
            printf("C\n");
        }else if (score<=89){//80-89      90-100           
            //B
            printf("B\n");
        }else{                          //90-100      
            printf("A\n");
        }       
    }
    return 0;
}</span><span style="color: rgb(255, 255, 255); font-size: 14px; font-family: Menlo; background-color: rgb(255, 255, 255);">}</span>

四、if语句使用注意点

1、使用注意点 

1)if(条件) 可以直接写分号 “;” 表示什么也不干 “;” 空语句 

2)if(条件) return 0; 程序不会往下执行了,直接退出 

3)if(1)、if(-1) 表示永真 if(0) 表示为永假 

4)if语句的作用域问题 

if (age > 10) { printf("已经懂事了\n");

    int num = 1000; }

printf("num = %d\n",num);

5)if语句的作用域紊乱

6)遇到省略大括号的if 

if (age >= 0)

if(age < 5)

printf("小儿\n");

else if(age < 10)

printf("小孩\n");

if (age > 12)

printf("小破孩\n");

else 

printf("不知道\n");

 就近原则,从下往上找

<span style="font-size:14px;">#include <stdio.h>
int main(int argc, const char * argv[]) {
    int a = 3,b=4;
    //1、空语句
    if (a==3);  //空语句,什么都没有干   
    //2、如果if之后的代码块,如果只有一句话,则可以省略大括号
    if (a>3)
        printf("a>2\n");  //if条件如果没有大括号,只会影响一句话    
    //3、永真式和永假式
    if(1){   }  //大括号中永远执行
    if(0){   }  //大括号中永远不会执行    
    //4、if语句结合return 语句
    if (a>3)
        return 0;   //在一个函数中,return语句之后的语句都不会执行   
    //5、if作用域的问题
    if (a==3) {
        int num = 10;
    }
    //printf("num = %d\n",num);    
    //6、容易疑惑的地方 作用域的紊乱
    if(a==3)
    //int num = 10;    
    printf("a>3\n");   
    //7、省略大括号的分析
    int age = 13;
    
    if (age >= 0){
        
        if(age < 5){
                printf("小儿\n");
        }else{
            if(age < 10){
                printf("小孩\n");
                if (age > 12){
                    printf("小破孩\n");
                }else{
                    printf("不知道\n");
                }
            }
        }
    }   
    return 0;
}</span>

五、switch语句基本格式

1、Switch分支语句: 

switch(表达式)

{

    case 常量表达式1: 语句1;

    case 常量表达式2: 语句2; ...

    case 常量表达式n: 语句n;

    default: 语句n+1;

} 

2、使用格式 

其语义是:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

<span style="font-size:14px;">#include <stdio.h>
int main(int argc, const char * argv[]) {   
    //提示用户点菜,1-7
    printf("本店开张,请点菜,请输入序号1-7\n");
    //定义变量,接收用户输入的内容
    int no;
    //接收用户输入的内容
    scanf("%d",&no);    
    if (no<1 || no > 7) {
        printf("本店厨师还在写代码,还没时间更新菜谱\n");
        return 0;
    }    
    //判断(switch)
    // 1 2 3 4 5
    switch(no){            
        case 1: printf("玉米炒葡萄\n");
        case 2: printf("月饼炒辣椒\n");
        case 3: printf("爆炒妙脆角\n");
        case 4: printf("番茄炒卤蛋\n");
        case 5: printf("南瓜炒猪肝\n");
        case 6: printf("苹果炒西瓜\n");
        case 7: printf("天地无极\n");  
    }    
    return 0;
}</span>

六、case语句穿透问题

1、什么是case穿透?

     某个case语句执行完成后,并没有结束,而直接向下执行其他的case语句

     这种现象就称之为case穿透

2、如何防止case穿透?

     我们需要在每一个case语句结束之后,加上一句话:break;

     break   作用 是结束switch语句

<span style="font-size:14px;">#include <stdio.h>
void test(){
    //提示用户点菜,1-7
    printf("本店开张,请点菜,请输入序号1-7\n");
    //定义变量,接收用户输入的内容
    int no;
    //接收用户输入的内容
    scanf("%d",&no);    
    if (no<1 || no > 7) {
        printf("本店厨师还在写代码,还没时间更新菜谱\n");
        //return 0;
    }    
    //判断(switch)
    // 1 2 3 4 5
    switch(no){            
        case 1: printf("玉米炒葡萄\n");break;
        case 2: printf("月饼炒辣椒\n");break;
        case 3: printf("爆炒妙脆角\n");break; //break作用是结束switch语句
        case 4: printf("番茄炒卤蛋\n");break;
        case 5: printf("南瓜炒猪肝\n");break;
        case 6: printf("苹果炒西瓜\n");break;
        case 7: printf("天地无极\n");break;           
    }   
    printf("xxxxxxx\n");
}</span>

七、switch使用注意事项

1、case后面的大括号的问题 

1) 表达式的类型(case语句后的值)必须是整型或可以转变为整型的值 (byte、short、char和int类型)。 

2) 功能代码部分可以写任意多句。

3) case语句可以有任意多句,可以不用加括号“{}” 

4) break关键字的意思是中断,指结束switch语句,break语句为可选。 

2) 功能代码部分可以写任意多句。

3) case语句可以有任意多句,可以不用加括号“{}” 

4) break关键字的意思是中断,指结束switch语句,break语句为可选。

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int num = 10;
    //'a'  = 97
    switch ('a'+'a') {
        case 194:
        {
            printf("num = 10\n");
            printf("sb \n");
            printf("zbz \n");
            printf("cgx \n");
            break;
        }
        default:
            break;
    }   
    return 0;
}

2、case值的规定 

1)case的值1、值2...值n只能为常数或常量,不能为变量。 

2)case的值必须是整数,不能为浮点数。 

3)case后面不可以直接定义变量 

4)如果在case后面定义的变量必须加上大括号 

5) default语句可以写在switch语句中的任意位置,功能类似于if语句中的else。 

执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break 语句,则一直执行到switch语句的结束。

<span style="font-size:14px;">#include <stdio.h>
int main(int argc, const char * argv[]) {
    int a = 5;
    int num = 11;    
    switch (num) {   
        default:
            printf("other。。。。\n");
            //break;            
        case 10:
            printf("num = %d\n",num);
            int num2 = 3;            
            break;            
        case 11:
            printf("num2  =  %d\n",num2);
            break;       
    }
    return 0;
}</span>

                                                                -------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值