⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc5.dat

📁 C++指令字典 一个方便的软件 用于C++指令的查询
💻 DAT
📖 第 1 页 / 共 2 页
字号:

  例如,[案例4.1]中的:

  if (num1>num2)  max=num1;

  else  max=num2;语句:

 if行后面的赋值语句“max=num1;”分号不能省略.但不要误认为if和else是2个独立的语句,它们都属于if语句中的一部分,else是if语句的子句.

     4.3.2  条件运算符

     1.一般格式: 表达式1?表达式2:表达式3

     条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同.

     2.运算规则                                                              

    如果“表达式1”的值为非0(即逻辑真), 则运算结果等于“表达式2”的值;否则,运算结果等于“表达式3”的值.如图4-2所示.

     3.运算符的优先级与结合性                                  

    条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符.其结合性为“从右到左”(即右结合性).

   [例4.4] 从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出.

/*案例文件名:AL4_4.C*/

main()

{ char ch;

 printf("Input a character: ");

 scanf("%c",&ch);

 ch=(ch>='A' && ch<='Z') ? (ch+32) : ch;

 printf("ch=%c\n",ch);

}                                        

4.4   switch语句

C语言提供了switch语句直接处理多分支选择.

[案例4.5] 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E.
/*案例代码文件名:AL4_5.C.*/
main()
{int  score, grade;
  printf(“Input a score(0~100): ”);
  scanf(“%d”, &score);
  grade = score/10;   /*将成绩整除10,转化成switch语句中的case标号*/
  switch (grade)

{case  10:

  case    9: printf(“grade=A\n”); break;        

  case    8: printf("grade=B\n"); break;

  case    7: printf("grade=C\n"); break;

  case    6: printf("grade=D\n"); break;

  case    5:

  case    4:

  case    3:

  case    2:

  case    1:

  case    0: printf(“grade=E\n”); break;

  default: printf(“The  score  is  out  of  range!\n”);         

}
}                                                      [程序演示]

程序运行情况如下:

Input a score(0~100): 85↙

grade=B

1.switch语句的一般形式

switch(表达式)

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

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

          ......

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

         [default:语句组;[break; ]]        

      }

   2.执行过程

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

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

 3.说明

(1)switch后面的“表达式”,可以是int、char和枚举型中的一种.

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

(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断.系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句.

思考题:如果去掉[案例4.5]程序中的所有break语句,且输入的成绩为75,输出会如何?

(4)各case及default子句的先后次序,不影响程序执行结果.

(5)多个case子句,可共用同一语句(组).

例如,在[案例4.5]中的“case  10: ”和“case  9: ”共用语句“printf("grade=A\n"); break;”,“case  5: ”~“case  0: ”共用语句“printf("grade=E\n"); break;”.

(6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现.

4.5   选择结构程序设计举例

[案例4.6] 求一元二次方程ax2+bx+c=0的解(a≠0).
/*案例代码文件名:AL4_6.C.*/
/*功能:求一元二次方程的解.*/
#include  "math.h"
main()
{float a,b,c,disc,x1,x2,p,q;
  scanf(“%f,%f,%f”, &a, &b, &c); 
  disc=b*b-4*a*c;


  if (fabs(disc)<=1e-6)                            /*fabs():求绝对值库函数*/
       printf(“x1=x2=%7.2f\n”, -b/(2*a));         /*输出两个相等的实根*/
  else
      { if (disc>1e-6)
           {x1=(-b+sqrt(disc))/(2*a);              /*求出两个不相等的实根*/
             x2=(-b-sqrt(disc))/(2*a);
             printf("x1=%7.2f,x2=%7.2f\n", x1, x2);
           }

   else
     {p=-b/(2*a);                                     /*求出两个共轭复根*/
      q=sqrt(fabs(disc))/(2*a);
      printf(“x1=%7.2f + %7.2f i\n“, p, q);         /*输出两个共轭复根*/
       printf(”x2=%7.2f - %7.2f i\n“, p, q);
     }
   }
}                                                      [程序演示]

       说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6).
       

思考题:如果将系数a、b、c定义成整数,能否直接判断disc是否等于0?

  [案例4.7] 已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):

     profit≤1000                   没有提成;

1000<profit≤2000           提成10%;

2000<profit≤5000           提成15%;

5000<profit≤10000                  提成20%;

10000<profit                        提成25%.

   算法设计要点:

  为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系.分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、……),如果将利润profit整除1000,则当:

      profit≤1000           对应0、1

1000<profit≤2000           对应1、2

2000<profit≤5000           对应2、3、4、5

5000<profit≤10000                  对应5、6、7、8、9、10

10000<profit                        对应10、11、12、……

       为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:

              profit≤1000                对应0

  1000<profit≤2000           对应1

  2000<profit≤5000           对应2、3、4

  5000<profit≤10000                  对应5、6、7、8、9

  10000<profit                    对应10、11、12、……

/*案例代码文件名:AL4_7.C.*/

 main()

   {long  profit;

     int  grade;

     float  salary=500;

     printf("Input  profit: ");

     scanf("%ld", &profit);

     grade= (profit - 1) / 1000;         /*将利润-1、再整除1000,转化成  switch语句中的case标号*/

switch(grade)

{ case  0:  break;                                     /*profit≤1000 */

   case  1: salary += profit*0.1; break;         /*1000<profit≤2000 */

   case  2: 

   case  3: 

   case  4: salary += profit*0.15; break;         /*2000<profit≤5000 */

   case  5: 

   case  6: 

   case  7: 

   case  8: 

   case  9: salary += profit*0.2; break;         /*5000<profit≤10000 */

   default: salary += profit*0.25;           /*10000<profit */

}

printf("salary=%.2f\n", salary);

}                                                              

良好的源程序书写风格──注释

必要的注释,可有效地提高程序的可读性,从而提高程序的可维护性.

在C语言源程序中,注释可分为三种情况:(1)在函数体内对语句的注释;(2)在函数之前对函数的注释;(3)在源程序文件开始处,对整个程序的总体说明.

函数体内的语句,是由顺序结构、选择结构和循环结构等三种基本结构构成的.在什么地方加以注释的原则是:如果不加注释,理解起来就会有困难,或者虽无困难、但浪费时间.
       (1)顺序结构

在每个顺序程序段(由若干条语句构成)之前,用注释说明其功能.除很复杂的处理外,一般没有必要每条语句都加以注释.

(2)选择结构

 在C语言中,选择结构是由if语句和switch语句来实现的.一般地说,要在前面说明其作用,在每个分支条件语句行的后面,说明该分支的含义,如下所示:

 1)if语句
        /*……(说明功能)*/

    if(条件表达式)             /*条件成立时的含义*/
              {……}
          else                     /*入口条件含义*/
              {……}

 2)switch语句
        /*……(说明功能) */

 switch(表达式) 


         { case  常量表达式1:    /*该入口值的含义*/
                语句组;
           ……
           case  常量表达式n:          /*该入口值的含义*/
                语句组;
           default:                             /*该入口值的含义*/
                语句组; 
         }
        

 如果条件成立时(或入口值)的含义,已经很明确了,也可不再加以注释.

上页        下页

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -