分支结构 if和switch-case

来源:互联网 发布:知乎怎么看题主 编辑:程序博客网 时间:2024/05/25 20:01
分支结构
    在程序开发过程中我们会用到3种结构,顺序、分支以及循环结构,顺序结构指的是程序从上往下一行一行的代码执行,直到执行完毕全部代码,它是程序执行的基础。分支结构则是根据表达式是否为真,有选择的执行一部分代码,并非全部代码。循环结构则是另外一种结构,它会把有限的代码执行N次,直到循环结束。分支和循环程序开发中非常重要的组成部分,可以说分支和循环在程序中随处可见,包括它们之间的潜逃使用。

一、分支
1.1 if语句
      用if语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序的代码。C语言的if语句有三种基本形式。
      第一种形式为基本形式      if(表达式) 语句;其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。其过程表示如下图:

int main(int argc,const char * argv[])

{

int myAge =19;


  int a,b,max;

        printf("\n input two numbers:   ");

        scanf("%d%d",&a,&b);

        max=a;

        if (max<b) {

            max=b;

}

        printf("max=%d",max);

 return 0;

}

    

       本例程序中,输入两个数ab。把a先赋予变量max,再用if语句判别maxb的大小,如max小于b,则把b赋予max。因此max中总是大数,最后输出max的值。 


   第二种形式为: if-else

        if(表达式)

            语句1;

        else

            语句2;

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


int main(int argc, const char * argv[])

{

    int myAge =19;

    printf("请输入你的年龄:\n");

    scanf("%d", &myAge);

    if (myAge >= 18) {

        printf("成年了\n");

    } else {

        printf("未成年\n");

    }

return 0;

}

    输入一个个整数,判断是否比18大,如果大于18则输出成年了,如果小于18则输出未成年。

    第三种形式为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 myAge =0;


 

    printf("请输入你的年龄:");

 

        char c ;

       printf("请输入一个字符。");

        c =getchar();

       if (c < 32) {

           printf("这是一个控制字符。");

        }

    

       else if (c >='0' && c <= '9')

        {

           printf("这是一个数字。");

        }

    

       else if(c >='A' && c <= 'Z')

        {

           printf("这是一个大写字母。");

        }

       else if (c >='a' && c <= 'z')

        {

           printf("这是一个小写字母。");

        }

       else

        {

           printf("这是一个其他字符。");

        }


 

 return 0;

}

   

        本例要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于30的为控制字符。在“0和“9”之间的为数字,在“A”“Z”之间为大写字母,“a”“z”之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,用if-else-if语句编程,判断输入字符ASCII码所在的范围,分别给出不同的输出。例如输入为“g”,输出显示它为小写字符。


在使用if语句中还应注意以下问题:

   在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:

    if(a=5) 语句;

    if(b) 语句;

    都是允许的。只要表达式的值为非0,即为。如在:

    if(a=5)…;

    中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。

       在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。

   if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

1.2 switch...case语句 

      switch...case为另一种多分支选择语句,其一般形式为:

    switch(表达式){

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

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

        …

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

    default: 语句n+1;

    }

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

例:

int main(int argc, const char * argv[])

{

        int a;

        printf("input integer number:      ");

        scanf("%d",&a);

       switch (a){

           case 1:printf("Monday\n");

           case 2:printf("Tuesday\n");

           case 3:printf("Wednesday\n");

           case 4:printf("Thursday\n");

           case 5:printf("Friday\n");

           case 6:printf("Saturday\n");

           case 7:printf("Sunday\n");

           default:printf("error\n");

        }

       return 0;

    }

    本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,case常量表达式只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有后面case语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。

        

   为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。


      

int main(int argc, const char * argv[])

{

           int a;

            printf("input integer number:    ");

            scanf("%d",&a);

           switch (a){

               case 1:

printf("Monday\n");  

break;

               case 2:

printf("Tuesday\n");   

break;

               case 3:

printf("Wednesday\n");  

break;

               case 4:

printf("Thursday\n"); 

break;

               case 5:

printf("Friday\n");  

break;

               case 6:

printf("Saturday\n");  

break;

               case 7:

printf("Sunday\n"); 

 break;

               default:

printf("error\n");

            }

           return 0;

        }

    

    在使用switch语句时还应注意以下几点:

    case后的各常量表达式的值不能相同,否则会出现错误。

    case后,允许有多个语句,可以不用{}括起来。

    casedefault子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。










0 0
原创粉丝点击