C语言基础知识----条件分支

发布于:2022-10-21 ⋅ 阅读:(305) ⋅ 点赞:(0)

C语言中提供了if语句和switch语句来实现选择结构,if语句用于两者选一的情况,而switch语句用于多分支选一的情形。

一、if 语句

1、简单的if语句形式

格式:if(表达式)

                语句;

功能如果表达式为真,则执行后面的语句,否则不执行该语句,而执行if语句后面的语句。

下面是输出两个整数,输出其中最大数。 

int a,b,max;
printf("please enter two numbers:");
scanf("%d%d",&a,&b);
max=a;   //将a的值赋值给max
if(a<b)
  max=b;
printf("%d",max);

 注意:C语言程序的一句话靠“ ; ”结束,以下例子参考:

if(美女)

     吃苹果;

     吃橘子;

意思就是说:美女吃苹果,所有人吃橘子。 

if(美女)

{     吃苹果;

      吃橘子;   

}

 意思是:美女吃苹果和橘子,其他人想要没有。

注意:(1)在if语句中,条件判断表达式必须用括号括起来;

(2)if后表达式通常是逻辑表达式或关系表达式,但也可以是其他任何表达式,如赋值表达式,甚至也可以是一个变量。只要表达式非零,表达式的值为真,否则为假。以下表达式为合法的:

if(a=2);  //表达式为非0,后面的语句总是执行
if(b);    //等价于if(b=!0);

(3)if不仅可以单个语句也可多个语句,但必须用{}括起来组成一个复合语句 。

if(a>b)
{
   a++;
   b++;
}
else
{
   a=0;
   b=1;
}

if和else之间如果只有一条语句,则不用{}括起来,但如果多于一条语句则必须用{}括起来。 

(4)if语句中,相等是“==”,赋值是“=”。 

2.if嵌套

一般形式为:     

    if (表达式)                                     if (表达式)                   if (表达式1)

        if语句;                                           if语句;                 if (表达式2)

                                      或                else                或                 语句1;

                                                            if语句;                    else

                                                                                                     语句2;

 那么多个if和多个else重叠应该如何配对呢?

        C语言规定,在省略{}时,else总是和它上面离他最近的未配对的if配对。

如果希望else与第一个if配对,则必须在else前加{},即:

        if (表达式1)

        {

            if (表达式2)

               语句1;

         }

         else

                语句2; 

二、switch 语句 

1.一般格式: 

switch ( 表达式 ) 

{

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

                                   break;

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

                                   break;

                    ...

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

                                   break; 

     [default:                    语句组;

                                    break; ]

执行过程:当switch后面“表达式”的值与某个case后面的“常量表达式”的值相同时,就执行case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条语句。

如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组),然后在执行switch语句的下一条语句。

注意:(1)switch后的“表达式”必须是一个整型表达式,而case后的类型与switch后的“表达式”类型一致。

float a,b=4.0;
scanf("%f",&a);
switch(a)  //错了,不可为浮点型表达式
{
  case 1:b=b+1; break;
  case 2:b=b-1; break;
}
printf("b=%f\n",b);

(2)case后面的语句(组)可加{}也可以不加{},但一般不加{}。 

(3)每个case后面 常量表达式 的值必须各不相同,否则会出现相互矛盾(即对表达式的同一值,不允许有两种或两种以上的执行方案)。

int a,b=4;
scanf("%d",&a);
switch(a)
{
  case 1: b=b+1;  break;
  case 2: b=b*2;  break;
  case 1: b=b+2;  break; //此处错误,case 1在前面已经使用,可改为case 3
}
  printf("%d\n",b);

(4)每个case后面必须是“常量表达式”,表达式不能包含变量。

( 5)case 常量表达式 后必须加上break语句,以便结束switch语句

 case  'N': printf("No\n");  break;                     case  'N':printf("No\n");  

运行结果(假设输入N):                             case  ‘A’:printf("All\n);  break;  //跳出switch语句

No                                                                   运行结果(假设输入N):

                                                                        No

                                                                        All

 (6)多个case 子句共用一语句(组)。

 

int a,b=4;
scanf("%d",&a);
switch(a)
{
  case 1:
  case 2:
  case 3: b+=2; break;
  case 4:
  case 5:
  case 6: b-=2; break;
  default: b*=2; break;
}
printf("b=%d\n");

(7)case 子句和default子句如果都带有break子句,那么他们之间顺序的变化不会影响switch语句的功能。

(8)case子句和default子句如果有的带break子句,而有的没有带break子句,那么它们之间顺序的变化可能影响输出的结果。 

#include<stdio.h>

int main()
{
  char ch;
  ch=getch();
  switch(ch)
  {
    case 'Y': printf("Yes\n"); break;
    case 'N': printf("No\n");  break;
    case 'A': printf("All\n"); break;
    default:  printf("Yes,No or All");
  }
return 0;
}

运行结果(假设输入B):

Yes,No or All 

#include<stdio.h>

int main()
{
  char ch;
  ch=getch();
  switch(ch)
  {
    case 'Y': printf("Yes\n"); break;
    default:  printf("Yes,No or All");
    case 'N': printf("No\n");  break;
    case 'A': printf("All\n"); break;
    
  }
return 0;
}

运行结果(假设输入B):

Yes,No or All

No 

 2.switch语句嵌套

 

int main()
{
   int x=1,y=0,a=0,b=0;
   switch(x)
   {
     case 1: switch(y)
             {
               case 0:a++; break;
               case 1:b++; break;
             }
     case 2: a++; b++; break;
     case 3: a++; b++; 
    }
    printf("\n%d,b=%d",a,b);
    return 0;
}
  

运行结果:

a=2,b=1

 

 

 

 

 

 

 

    

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到