7、C程序的分支结构

7.C程序的流程控制
7.1.明确:C程序是一个结构化程序,就是以顺序,分支,循环三种基本结构构建的
    单入口单出口的程序
                 类比:C程序----->一栋楼
              顺序------->一居室
             分支-------->二居室
             循环-------->三居室
      顺序结构:就是CPU从上到下依次运行

7.2.分支结构
a)分支结构功能:实现多选一
   分支结构分两类:条件分支和开关分支
b)条件分支
   语法格式:
形式1:
   if(表达式1) {
            语句1;
   }
   语义:如果表达式1为真,那么就执行语句1
   例如:
   int a = 1;
   if(a == 1) { //中规中矩的程序员
          printf("a等于1\n");
   }
  //好程序员
  if(1 == a) {
      printf("a等于1\n");    
  }
  为了防止将"=="写成"="
  if(a =1) //成立,变成赋值
  if(1 = a) //gcc报错,帮你纠错
 
形式2:
  if(表达式1) {
      语句1;
  } 
  else {
     语句2;
  }  
  语义:如果表达式1为真,那么运行语句1,否则运行语句2
  例如:
  int a = 1;
  if(1 == a) {
      printf("a等于1\n");
  } 
  else {
      printf("a不等于1\n");
  }

形式3:
if(表达式1) {
  语句1;
}   
else if(表达式2) {
  语句2;
}
...
else if(表达式N) {
   语句N;
}
语义:如果表达式1为真,那么执行语句1,如果表达式1不为真,那么执行表达式2,如果表达式2
          为真,那么执行语句2,如果表达式2不为真,依次向下判断
例如:
int a = 1;
if(1 == a) {
    printf("a等于1\n");

else if(2 == a) {
   printf("a等于2\n");
}
else if(3 == a) {
   printf("a等于3\n");

 
形式4:
if(表达式1) {
  语句1;
}   
else if(表达式2) {
  语句2;
}
...
else if(表达式N) {
   语句N;
}
else {
   语句M;
}
语义:如果表达式1为真,那么执行语句1,如果表达式1不为真,那么执行表达式2,如果表达式2
          为真,那么执行语句2,如果表达式2不为真,依次向下判断,如果上面都不成立,最后
          运行语句M
例如:
int a = 1;
if(1 == a) {
    printf("a等于1\n");

else if(2 == a) {
   printf("a等于2\n");
}
else if(3 == a) {
   printf("a等于3\n");

else {
  printf("不知道是什么数,a = %d\n", a);
}

c)条件分支使用注意事项 
   1.if和else的配对原则:else或者else if和最近的if配对
   2.如果语句只有一条,{}是可以省略的(由衷建议加上)
      if(1 == a) {
    printf("a等于1.\n");
      } 
     等价于
     if (1 == a) 
               printf("a等于1.\n");
   3.{}是否独占一样问题:根据公司的编码规范来定
      原则:只要是linux系统软件开发,{}不会独占一行        
      //linux程序员
      if(1 == a) {
    printf("a等于1.\n");
      } 
      //公司编码规范
      if(1 == a) 
      {
    printf("a等于1.\n");
      }

案例:利用if..else来判断三个数中的最小数

c)开关分支结构特点
1.开关分支语法
   switch(控制表达式) {
         case 常量表达式1:
     语句1;
                  break;
         case 常量表达式2:
     语句2;
     break;
         ...
         case 常量表达式N:
     语句N;
    break;
         default:
    语句M;
    break;
   }  
   执行过程:控制表达式的值和下面case对应的常量表达式的值一样(相等)
       那么就会执行对应的语句,一旦遇到break,switch...case开关分支立刻结束
       如果case都不相等,最后只能执行default对应的语句

2.开关分支结构使用注意事项
a)控制表达式被当成一个整数处理(int),可以是字符,但是不能是浮点数和字符串(例如:"abc")
   例如:
   switch(5) //可以
   switch(5.5) //不可以
   switch("abc") //不可以
   switch('a') //可以

b)常量表达式必须是常量,例如:5,'A',2+5等,不允许有重复的分支case
    int cmd = 250;
    switch(cmd) {
    case 250:
    break;
    case 250: //gcc编译器报错,迷茫了
    break;
    }

c)如果其中某个case对应的break没有添加,当这个case成立时,并且运行其语句之后
   会继续执行下一个case
   所以建议如果代码需要break,写完case单子之后,先写一个break出来,防止忘掉!
   int cmd = 250;
   switch(cmd) {
    case 250:
        printf("1.\n");
    case 251: 
        printf("2\n");
        break;
    ...
    default:
        break;
    }
   结果:打印1和2

d)default关键字可以写在任意case的前面,但是需要添加break
   如果default关键字写在最后,break是可以省略的
   帅的人都是将default写在后面

e)分支case或者default中如果定义变量,记得加{}
    将来这个变量只能给对应的case使用!
    例如:
    int cmd = 250;
   switch(cmd) {
    case 250:
        printf("1.\n");
    case 251:  {
        char c = '2'; //定义字符变量
        printf("%c\n", c);
        break;
    }
    ...
    default:
        break;
    }
案例:输入一个0~100的整数来表示学生的考试成绩,打印等级:
           考分         等级
          90~100     A
          80~89       B
          70-79        C
          60-69        D
          其他都是E
          要求用switch..case实现

总结:if...else和switch..case对比:
1.switch...case能做的,if...else都能做
2.if...else能做的,switch...case不一定能做,比如处理浮点数或者字符串
3.switch...case某些场合极其繁琐
   例如:判断0~1000的范围,如果用switch...case,必须添加1000条case
   但是如果用if语句,一条拿下:if(xxx > 0 && xxx < 1000)
4.gcc编译器对switch...case生成的代码量要比if...else要少,所以switch代码执行效率高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暗里い着迷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值