设为首页 加入收藏

TOP

C语言语句及流程控制(四)
2014-04-06 17:41:38 来源: 作者: 【 】 浏览:471
Tags:语言 语句 流程 控制

 

  通过刚刚的介绍,你应该很容易理解这段代码在干什么:如果我们输入的是一个偶数,那么条件判断为真,我们进入if语句块,在屏幕上输出这个数是偶数;否则,条件判断为假,我们就进入else,并且在屏幕上输出这个数是个奇数。

  多学一招:

  如果if或是else里只有一条语句,那么外面的花括号可以省略。比如刚刚的例子也可以写成:

  int number;

  scanf("%d", &number);

  if (number % 2 == 0)

  printf("%d是个偶数\n", number);

  else

  printf("%d是个奇数\n", number);

  当然你也可以一直把一对{}带着,这取决于你喜欢哪种代码风格。

  if…else if…else结构

  If加上else只能帮我们处理二选一的情况。然而,正如同在城市里开车还会遇到三岔路口和十字路口一样,有的时候我们还需要能够处理三选一,四选一乃至N选一的情况。比如在美剧《生活大爆炸》中,男主角谢耳朵有一张严格的日程表,精确到每星期几应该吃什么:

  表 52谢耳朵的菜单

  周一

  周二

  周三

  周四

  周五

  周六

  周日

  燕麦粥

  汉堡

  奶油土豆汤

  披萨

  法式面包

  中餐

  

  谢耳朵周日吃啥是个谜,笔者没有考证出来。我们就假定谢耳朵周日自己做饭吧。

  现在,如果你要给谢耳朵写一个日程管理程序,输入星期几,输出今天要吃什么。这是一个N选一的选择结构。由于N选一可以被拆成很多很多个二选一,利用手头已知的if和else语句,机智的读者可以写出如下的嵌套结构:

  if (今天是星期一)

  {

  我们吃燕麦粥;

  }

  else

  {

  if (今天是星期二)

  {

  我们吃汉堡;

  }

  else

  {

  if (今天是星期三)

  {

  我们吃奶油土豆汤;

  }

  else

  …

  }

  }

  这个程序当然是对的,但是这样的程序既难读又难写。幸好C语言中除了if和else之外还有专门为N选一设计的else if结构,它可以让我们不必写上面这种嵌套的if程序:

  if (今天是星期一)

  {

  我们吃燕麦粥;

  }

  else if (今天是星期二)

  {

  我们吃汉堡;

  }

  else if (今天是星期三)

  {

  我们吃奶油土豆汤;

  }

  else if (今天是星期四)

  {

  我们吃披萨;

  }

  else if (今天是星期五)

  {

  我们吃法式面包;

  }

  else if (今天是星期六)

  {

  我们吃中餐;

  }

  else

  {

  //今天是星期天

  谢耳朵要自己做饭!

  }

  结合这个例子,else if干了什么应该很好懂了。首先,判断if的条件是否成立,如果成立,意味着今天是星期一,进入if;如果不成立,我们就去看第一个else if的条件,如果第一个else if的条件为真(今天是星期二),就进入这个else if,否则就接着看第二个else if,第三个else if,直到最后一个else if.如果上面的else if统统都不成立,我们就进入最后一个else,执行"谢耳朵要自己做饭!"

  关于上面的else if结构,有几点需要留意的地方:首先,在语法上else if可以有多个(当然也可以有0个,这时候就退化成了之前的if else);其次,最后的else也是可有可无的。你可以只带着N个else if结束这段程序。这时候如果if和所有的else if中的条件判断统统为假,那么程序什么也不做。

  M脚下留心:

  正文中给出的都只是伪代码,仅用于讲解语法,不是可以在电脑上运行的程序!请不要试图直接复制粘贴"谢耳朵要自己做饭"然后编译运行程序!

  :动手体验:

  回到我们为怪兽大学写的程序上来(忘记题目设定的读者可以查阅5.1.2节):

  #include

  int main()

  {

  int voice;

  float score;

  //从控制台读入一个整数

  scanf("%d", &voice);

  //计算考生得分

  score = (float)voice / 40 + 2.5;

  //输出考生的得分

  printf("%f", score);

  return 0;

  }

  郝刻薄院长发现一个问题:不管婴儿的分贝数有多么低,考生们至少都能拿到2.5分保底。正如她的名字显示的那样,郝刻薄院长是一个严厉的老师,她觉得2.5分对于那些懒惰的学生来说太宽容了,因此她决定着手修改量化评分标准:

  如果婴儿的分贝低于60,小怪兽的得分为0;

  如果婴儿的分贝不低于60而低于80,小怪兽得分为2.5分;

  否则,按照原来的方法评分:得分=婴儿分贝/40+2.5.

  由于怪兽大学没有计算机系,请你再次帮助郝刻薄院长完成这个程序。

  switch判断结构

  我们之前用if和else if为谢耳朵写了一小段管理每天菜单的代码。作为一个Geek,谢耳朵觉得如此多的else if堆在一起还是不够优美,因此他把你的程序改动成了这个样子:

  int day;

  scanf("%d", &day);

  switch(day)

  {

  case 1:

  printf("燕麦粥\n");

  break;

  case 2:

  printf("汉堡\n");

  break;

  case 3:

  printf("奶油土豆汤\n");

  break;

  case 4:

  printf("披萨\n");

  break;

  case 5:

  printf("法式面包\n");

  break;

  case 6:

  printf("中餐\n");

  break;

  default:

  printf("谢耳朵要自己做饭\n");

  }

  在这里谢耳朵为我们介绍了新的语句--switch语句。这是一种升级版的if else语句,专门用于处理多种分支间的选择:

  switch(表达式)

  {

  case 值1:

  语句1;

  break;

  case 值2:

  语句2;

  break;

  …

  default:

  语句N;

  }

  switch是相对比较复杂的语句,我们来详细解释一下:

  首先,switch一开始会计算表达式的值。这个值可以是整型,可以是字符,可以是枚举,但是,不能是浮点数float或double.不严谨地说,只要这个值可以被解读成是一个整数,就可以用switch.

  接下来,根据表达式的值,选择进入合适的case.如果表达式的值恰好符合某一个case后面的值,就跳到那个case当中,开始执行case下面的语句。需要强调的是,这里的语句1,语句2,语句N等都不一定是一行语句,它们可以是多行语句,而且不需要用花括号{}括起来。如果,表达式的值不符合任何一个case,那么就跳转到default,去执行default下面的语句N.正如在if-else-if当中最后的else可以没有一样,在switch中,最后的default也可以不写,这时如果表达式不符合任何一个case,就直接跳过整个switch代码,相当于什么都不做。

  最后,也是switch当中最神奇最费解的,是每一个case内部都跟了一个break.我们将在循环结构中再次见到break语句。在这里,break语句表示当我们进入了某个case后,执行完了这个case下的语句之后,遇到了一句break,我们就跳出整个switch语句,这一段代码结束。如果,在某一个case下面没有break,那么当执行完了当前的case之后,程序会接着进入下一个case继续执行里面的代码,这个过程会一直持续到遇见第一个break为止。当然,如果接下来的case里面都没有break的话,那就一直执行到底,包括最后的default,然后跳出switch.

  上面这几段话是非常抽象的,如果你看了一遍之后就完全明白了switch的执行顺序,那么恭喜你,你很适合学习编程!如果你看得一头雾水,没有关系,我们还是用谢耳朵的程序来说明一下:

  int day;

  scanf("%d", &day);

  switch(day)

  {

  case 1:

  printf("燕麦粥\n");

  break;

  case 2:

  printf("汉堡\n");

  break;

  case 3:

  printf("奶油土豆汤\n");

  break;

  case 4:

  printf("披萨\n");

  break;

  case 5:

  printf("法式面包\n");

  break;

  case 6:

  printf("中餐\n");

  break;

  default:

  printf("谢耳朵要自己做饭\n");

  }

            

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言单元测试 下一篇C语言main函数生成可执行法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: