黑马程序员---c语言中的分支语句 switch与if

来源:互联网 发布:java cms框架搭建 编辑:程序博客网 时间:2024/05/23 02:04
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
switch(表达式){
      case 常量表达式1: 语句1;
      case 常量表达式2: 语句2;
      case 常量表达式3: 语句3;
      case 常量表达式4: 语句4;
      case 常量表达式5: 语句5;
      case 常量表达式n: 语句n;
                      default: 语句n+1;
 }
首先计算“表达式”的值,然后从第一个 case 开始,与“常量表达式n”进行比较,如果值不相等,就不执行对应的语句n;值相等,它会执行后面所有的case对应的语句。如都不等,则执行 default 后的“语句 n+1”。


为了避免某个case语句执行完成后,并没有结束(case穿透),而直接向下执行其他的case语句
我们需要在每一个case语句结束之后,加上一句话:break;
break   作用 是结束switch语句

   switch语句的表达式类型
1)可以放一个整型的变量 int num = 10;switch (num)
2)可以放一个整形常量  switch (10)
3)可以放一个返回值是整型的表达式   switch (5+5),num = 5+5
4)还可以放可以转换为int类型的表达式 switch ('a'+'a')    a的ascii码为97  相当于97+97
5)break语句是可选的,可以加也可以不加

    case语句的注意事项
0) case语句格式: case  常量表达式: (空格和冒号不能省)
1) 可以是常量  case 10:
2) 如果放表达式,那么只可以是常量表达式 case 5+5:
3) default语句的位置可以任意放
4) case的穿透问题,同样适用于 default
5) 如果default语句放到 switch语句的最后,可以不加break
      如果不是放到最后,是必须加上break的
6) case 后面不能是实数
7) case 语句之后,默认的第一句话不能定义定义变量
       如果第一句话非要定义,应该加上大括号
        case 10:
        {         int num2=3;
                  printf|("num=%d",num);
                  break;        }
8) 编译器xcode的bug
        case 10:
             printf("num = %d\n",num);
             int num2 = 3;
             break;
        case 11:
            printf("num2  =  %d\n",num2);
            break;

        num2在case10中  但case11可以使用



 


   

   


   

1.基本形式:if

        if(表达式) 语句

其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。




如:if (max<b) max=b;
用if语句判别max和b的大小,如max小于b,则把b赋予max。

2.if-else

if(表达式) 

    语句1;

else 

    语句2;

其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。其执行过程可表示为下图。


如:
#include <stdio.h>
int main(void){
    int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b); if(a>b) printf("max=%d\n",a); else printf("max=%d\n",b); return 0;}
输入两个整数,输出其中的大数。改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。

3.if-else-if形式
前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:
     if(表达式1)
        语句1;
    else  if(表达式2) 
        语句2;
    else  if(表达式3) 
        语句3;
        … 
    else  if(表达式m) 
        语句m;
    else
        语句n;
其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。 if-else-if语句的执行过程如下图所示。


如:
int main(int argc, const char * argv[]) {
    int num=0;
    printf("请输入一个数字:\n");
     scanf("%d",&num);
     if (num == 5) {
            printf("恭喜你\n");
    }else{
          if (num > 5) {
             printf("大于5了\n");
          }else{
            printf("小于5了\n");
                }
          }
    return 0;
}
输入数字后先判断是否等于5,如不等于进去else条件中。在判断是否大于5,如不是则小于5


使用if语句的几个注意点:

1.空语句
    if (a==3);   没有可执行语句,什么都没干
2.if之后的代码块如果只有一句话,则可以省略大括号
    if (a>3)
        printf("a>2\n");  
    只会影响这一句话。
3.永真式和永假式
    if(1){   }  //大括号中永远执行
    if(0){   }  //大括号中永远不会执行
4.if语句结合return 语句
        if (a>3)
        return 0;   
    如果a>3为真,在这个函数中,return语句之后的语句都不会执行。
5.if作用域的问题
    if (a==3) {
        int num = 10;
    }
    printf("num = %d\n",num);
     并不能打印出num的值,超出代码块范围。
6.容易疑惑的地方 作用域的紊乱
    if(a==3)
    int num = 10;
    虽然大括号可以省略,但会报错。可以改成
    if(a==3)
    { int num = 10;}






   


   

   
0 0