C笔记(七)——选择结构if,switch,条件运算符

一、if语句

    if表达式的形式:

    1、if(表达式)

            语句1;

        else

            语句2;

    2、if(表达式1) 

            语句1;

        else if (表达式2)

            语句2;

        else if (表达式3)

            语句3;

             ...

            else 语句n;

    如下面程序,当x<1时,y=-1;当x=0时,y=0;当x>1时,y=1;

#include <stdio.h>

int main(void)
{
    int x;
    int y;

    printf("Please input x:");
    scanf("%d",&x);

  if(x == 0)
    {
       y = 0;
       printf("x = %d,y = %d\n",x,y);
    }
    else
      {
        y = x > 0 ? 1 : -1;
        printf("x = %d,y = %d\n",x,y);
      }
    return 0;
}

    注:if后面的表达式有两种,一般为逻辑表达式关系表达式

    eg:if(a ==b && x == y)  //if语句后没标点符号

           printf(“a = b,x = y”);

           在if语句中,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值时, 可以用一个条件运算符来处理。

二、条件运算符   

    条件表达式的一般形式为

        表达式1 ? 表达式2 : 表达式3;

    执行顺序:先求解表达式1,若其为1(真),则求解表达式2,解得的结果作为整个条件表达式的值。若其为0(假),则求解表达式3,解得的结果作为整个条件表达式的值。

    eg:max = (a > b) ? a : b;  //当a>b时,将a赋给max。当a<b时,将b赋给max。

           a > b ? (a = 10): (b = 2);  // a>b时,输出a = 10;a<b时,输出a = 2;

    表达式2、3不仅可以是数值表达式,还可以是赋值表达式函数表达式

    上面的if程序可以用如下程序代替:

#include <stdio.h>

int main(void)
{
    int x;
    int y;

    printf("Please input x:");
    scanf("%d",&x);

    y = x > 0 ? 1 : (x < 0 ? -1 : 0);//若x>0,y=1;否则y=x < 0 ? -1 : 0;后面这个还是条件语句,当x<0,y=-1;否则y=0;
    printf("x = %d,y = %d\n",x,y);

    return 0;
}

三、switch语句

    switch语句为多分支选择语句,可直接处理多分支选择。

    一般形式:

switch (表达式)
  {
    case常量表达式1: 语句1;
    case常量表达式2: 语句2;
      ...
    case常量表达式n: 语句n;
    default:       语句n+1;
  }

    eg:

#include <stdio.h>
int main(void)
{
    int a;
    int b;
    char c;


    printf("please input a:");
    scanf("%d",&a);
    getchar();


    printf("please input operator:");
    scanf("%c",&c);


    printf("please input b:");
    scanf("%d",&b);
    switch (c)
      {
        case '+':
            printf("a + b = %d\n",a + b ); break;
        case '-':
            printf("a - b = %d\n",a - b ); break;
        case '*':
            printf("a * b = %d\n",a * b ); break;
        case '/':
            switch (b)
            {
              case 0:
                printf("error\n"); break;
              default:
                printf("a / b = %d\n",a / b );
            } break;  //switch中可以嵌套switch语句,要注意在最后加break。
        default:
            printf("error\n");
       }
    return 0;
}

    说明:

    (1)switch后面括号里的“表达式”,ANSI标准允许它可以是任何类型。

    (2)当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句。若所有case后面的值没有与switch表达式里的值相匹配,就执行default后面的语句。

     (3)每个case常量表达式的值必须互不相同。

     (4)各case与default的出现顺序对执行结果没有影响

     (5)case后面如果没有“break;”的话,执行完一个case后面的语句后,流程控制会顺序执行下面的case,不再进行判断。加上break 后,程序执行完该case后,会跳出switch的复合语句块。

注:什么时候用if什么时候用switch?

    当条件很复杂,一个条件中有&&、||、!等存在时,用if语句。

    若条件简单,分支多时,可以用switch语句。

    

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/79772152