首页 百科知识 选择结构程序设计举例

选择结构程序设计举例

时间:2024-10-03 百科知识 版权反馈
【摘要】:说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数。已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下 :为了使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍 (1000,2000,5000,…

【例5.7】求一元二次方程ax2+bx+c=0的解(a≠0)。

#include "math.h"

main()

{floata,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.2fi\n",p,q);/*输出两个共轭复根*/

printf("x2=%7.2f-%7.2fi\n",p,q);

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

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

【例5.8】已知某公司员工的保底薪水为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,…

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);

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈