zoukankan      html  css  js  c++  java
  • 通过goto语句学习if...else、switch语句并简单优化

    goto语句在C语言中实现的就是无条件跳转,第二章一上来就介绍goto语句就是要通过goto语句来更加清楚直观的了解控制结构。

    我理解的goto语句其实跟switch语句有相似之处,都是进行跳转。不同的是goto语句是进行无条件的跳转,执行到这一句的时候直接就跳转了,而switch语句是要进行一个判断之后才能进行跳转。例如:

    下面是用switch语句写的一个程序

     1 #include <stdio.h>
     2  int main(void)
     3  {
     4  char score;
     5  scanf("%c",&score);
     6  switch(score){
     7  case 'A':
     8  printf("excellent
    ");
     9  break;
    10  case 'B':
    11 printf("good
    ");
    12  break;
    13  case 'C':
    14  printf("pass
    ");
    15  break;
    16  default:
    17 printf("fail
    ");
    18 }
    19  return 0;
    20  }

    下面是用伪代码写的用goto语句实现上面switch语句的功能。

     

     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     code * lab[] = { lab_a,lab_b,lab_c };
     5     char score;
     6     scanf("%c", &score);
     7     if (score>'C')
     8         goto lab_default;
     9     score -= ’A’;/*score减去A的值为目的标号在跳转表数组中的下标*/
    10     goto_lab[score];
    11 lab_a:
    12     printf("excellent
    ");
    13     goto done;
    14 lab_b:
    15     printf("good
    ");
    16     goto done;
    17 lab_c:
    18     printf("pass
    ");
    19     goto done;
    20 lab_default:
    21     printf("fail
    ");
    22 done:
    23     return 0;
    24 }

     

    从上面两个程序中我们可以看出来switch语句是要与()内的score进行判断来进行跳转的,如果是’A’,跳转到printf(“”excellent );等等,而goto语句是执行到lab[score]这一句的时候,直接跳转去执行lab[score]:。从这就可以看出来goto语句是无条件的跳转。switch语句和if…else语句都属于分支结构,但是两者之间是有差别的,如下用goto语句写的if…else循环。

     1 #include <stdio.h>
     2 int main(void)
     3 {
     4 int a,b;
     5 int t;
     6 scanf(“%d%d”,&a,&b);
     7 t=a>b;
     8 if(t==1)
     9 goto true;
    10 printf(“a is lower than b
    ”);
    11 goto done;
    12 true:
    13 printf(“a is higher than b
    ”);
    14 done:
    15 return 0;
    16 }

     

    if…else语句和switch语句记性对比会发现,switch语句需要提前定义一个数组,这就是一个标号数组,也就是switch语句的跳转表,根据case后边的标号直接去执行标号对应的程序,而if…else语句需要多次比较才会找到要执行的程序。这样对比就会发现switch语句的执行速度要比if…else快,但是通过对比也发现switch语句需要额外的存储空间去存储标号数组。不同的控制结构对于执行程序的效率影响很大,因此需要注意对于控制结构的优化。

    if…else语句是要先判断再执行,需要进行对比之后才能进行执行。根据它的这个特点我们可以进行优化,尽量少进行判断就执行,比如统计一篇英文文章字母的个数和标点符号的个数。如果先判断是不是标点符号,再判断是否是英文字母的话,每统计一个英文字母都要进行两次判断,英文文章中出现英文字母的概率最大,因此先判断是否是英文字母就能提高这个程序的效率。

    对于条件分支比较多的程序,一般来说switch语句的效率会高一点,但是在有些情况下if..else语句会更合适一点,特别是在与数字进行比较的时候,比如判断是否10~100之间时,用if…else语句会好一点。也就是说在一个区间范围内进行对比的时候,if…else语句会更方便一点。

    总的来说了解了if…else语句和switch语句的本质,注意对分支结构的优化,在以后的编程中对于提高程序的效率有很大的帮助。

  • 相关阅读:
    URL的JavaScript解决之道
    JavaScript中Date对象的几个扩展方法
    taobao open
    Linux操作系统的日志说明
    DG常用运维命令及常见问题解决
    oracle系统视图
    oracle 自动备份、恢复功能
    oracle队列
    spring学习笔记
    sql语句拾遗
  • 原文地址:https://www.cnblogs.com/Mr--Yang/p/6104857.html
Copyright © 2011-2022 走看看