第四章 选择结构

一.if语句

  1.单分支结构

      格式1:   if(<表达式>)语句1; //语句1,

      说明:只一条语句。 如果表达式为真, 执行语句1; 否则什么都不做;

     格式2: if(<表达式>)

         {

          语句块1;

        }

  2. 双分支结构 if… else语句  

      格式: if (<表达式>)

          语句1;

        else

          语句2;

      说明: 如果表达式为真, 执行语句1; 否则执行语句2

          else子句是if语句的一部分,它不能作为语句单独使用, 必须与if配对使用。

 

  3.多分支结构 if … else if 语句

      格式:

        if()

        {

          语句块1;

        }  

        else if()

        {

          语句块2;

        }

        …

        else 是不能跟条件的  

        {

          语句块n;

        } 

 

      

      格式说明

        1.表达式一般为逻辑表达式或关系表达式, 也可以是任意的数值类型。

        2.else子句不能脱离if子句而存在, 下面写法是错误的。

 

  4.if语句的嵌套

      else与if必须成对出现,  且else总是与最近的一个未配对的 if 配对

                         

      如果 if与else的数目不同, 为实现指定的操作, 可以加花括号来确定配对关系。

                         

      内层的选择结构必须完整地嵌套在外层的选择结构内, 两者不允许交叉。

                                    

 

      书写选择结构时:

          缩进  使程序层次分明

          花括号{}  逻辑明确 代码易读、

      例如  判断输入的字符是数字还是字母 

        #include <stdio.h>
        void main()
        {
          char a=0;
          printf("请输入一个字符\n");
          scanf("%c",&a);

          if (a>='0' && a<='9')
          {
            printf("你输入的是数字%c",a);
          }

          else if(( a>='A'&&a<='Z')||(a>='a'&&a<='z'))

          {
            printf("你输入的是字母%c",a);
          }

          else
          {
            printf("你输入的是其他字符");
          }


        }

  5.switch语句

      也称开关语句。多选一,同多分支类似  但是可读性比多分支强  一般做菜单程序等使用

    格式: switch(表达式)

      {

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

        break;

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

        break;

        ……

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

        break;

       default 语句n+1;

      }

    说明:各个case包括(default)的出现次序可以任意。在每个case分支都带有break的情况下, case次序不影响执行结果。

       case  default的 顺序 可以任意

        不能用浮点型是因为 浮点数不可以用来精确比较

    例如  写一个计算器的程序  方法一

        #include <stdio.h>
        #include <stdlib.h>
        #include <math.h>
        /加
        double get_sum( double num1, double num2)
        {
          return num1+num2;
        }
        //减
        double get_sub( double num1, double num2)
        {
          return num1-num2;
        }

        //乘
        double get_mul( double num1, double num2)
        {
          return num1*num2;
        }

        //除
        double get_div( double num1, double num2)
        {
          if (num2==0)
          {
            printf("语法错误");
            exit(0);
          }
          else
          {
            return num1/num2;
          }

        }
        //幂
        int get_aaa( int num1, int num2)
        {

          return pow(num1,num2);

        }

          //取余
        int get_xxx( int num1, int num2)
        {
          return num1%num2;
        }
        void main()
        {
          float num1=0;
          float num2=0;
          char ch=0;
          double m=0;
          double n=0;
          scanf("%f%c%f",&num1,&ch,&num2);
          switch (ch)
          {
            case '+': m=get_sum(num1,num2);
            break;
            case '-': m=get_sub(num1,num2);
            break;
            case '*': m=get_mul(num1,num2);
            break;
            case '/': m=get_div(num1,num2);
            break;
            case '%': m=get_xxx(num1,num2);
            break;
            case '$': m=get_aaa(num1,num2);
            break;
            default : printf("输入运算符错误");
          }
            printf("num1%cnum2=%.2lf",ch ,m);
        }


        //写一个计算器程序  方法二
          #include <stdio.h>
          #include <stdlib.h>
          #include <math.h>
          void main()
          {
            float num1=0;
            float num2=0;
            char ch=0;
            double m=0;
            double n=0;
            int flag=0;
            int x=0;
            int y=0;
            while(1)
            {
              printf("请输入要计算的运算符\n");
              scanf("%f%c%f",&num1,&ch,&num2);
              switch (ch)
              {
                case '+': m=num1+num2;
                break;
                case '-': m=num1-num2;
                break;
                case '*': m=num1*num2;
                break;
                case '/': x==0?(flag=1):(m=num1/num2);
                break;
                case '%': flag=2;
                break;
                case '$': y==0?(flag=3):(m=pow(num1,num2));
                break;
                default : flag=4;
              }
              switch (flag)
              {
                case '1': printf("除数不能为0\n");
                break;
                case '2': printf("取余不能是小数\n");
                break;
                case '3': printf("底数不能为0\n");
                break;
                case '4': printf("运算符错误\n");
                break;
                default: printf("num1%cnum2=%.2lf\n",ch ,m);
                }
              }

            }

 

posted @ 2020-02-18 20:23  直至成伤  阅读(279)  评论(0编辑  收藏  举报