首页 > 代码库 > c语言100实例2 一个数据填写错误导致的问题 论校验的重要性
c语言100实例2 一个数据填写错误导致的问题 论校验的重要性
/** *题目:企业发放的奖金根据利润提成。 *利润(I)低于或等于10万元时,奖金可提10%; *利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; *20万到40万之间时,高于20万元的部分,可提成5%; *40万到60万之间时高于40万元的部分,可提成3%; *60万到100万之间时,高于60万元的部分,可提成1.5%; *高于100万元时,超过100万元的部分按1%提成。 *从键盘输入当月利润I,求应发放奖金总数? *程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 * ***/ double award(double a) { if (a < 0) { return 0; } //系统有默认的转化规则,就是从精度底的转化为精度高的,避免计算时精度的丢失 //char --> short --> int ---> unsigned --> long --> unsigned long --> float --> double double res = 0; double percent[6] = { 0.1, 0.075, 0.05, 0.03, 0.015, 0.01 }; double step[6] = { 100000, 100000, 200000, 200000, 4000000, 0 }; //倒数第二个元素填写成了400万 导致与答案给的结果不符合 //double step[6] = { 100000, 100000, 200000, 200000, 400000, 0 }; //先考虑溢出问题 /** if (0<a <= 100000) { res = a * 1 / 10; } else if (a<=200000) { res = 100000 * 1 / 10; res += (a - 100000) * 75 /1000; } else if (a<=400000) { res = a * 0.01; } else if (a<=600000) { res = a * 0.01; } else if (a<=1000000) { res = a * 0.01; } else { res = a * 0.01; } **/ /** 伪流程: 判断是否达到10以上 没有计算然后退出 减去10万的利润 减去10万计算得出的利润 假设200万 190万 10万算利润 180万 10万算利润 160万 20万算利润 140 万 20万算利润 100 万 40万算利润 100万剩余算利润 最后的不在计算 假设43万 33 万 10万算利润 23万 10万算利润 3 20万算利润 3万剩余利润 <0 **/ double money; printf("传入参数的数值:%lf\n",a); for (int i =0;i<6;i++) { money = a - step[i];//剩余的钱数 if (money <= 0) { res += a * percent[i]; printf("第%0.1d次:%lf\n", i + 1,res); break; } else { a = money;//剩余的钱数先赋值给a为下次循环准备 if (step[i] != 0) { res += step[i] * percent[i]; printf("第%0.1d次:%lf\n", i + 1, res); } else { res += a * percent[i]; printf("第%0.1d次:%lf\n", i + 1, res); break; } } } return res; } double award2(double i) { //面向过程 流程清晰 double bonus1, bonus2, bonus4, bonus6, bonus10, bonus; bonus1 = 100000 * 0.1; bonus2 = bonus1 + 100000 * 0.075; bonus4 = bonus2 + 200000 * 0.05; bonus6 = bonus4 + 200000 * 0.03; bonus10 = bonus6 + 400000 * 0.015; if (i <= 100000) { bonus = i*0.1; } else if (i <= 200000) { bonus = bonus1 + (i - 100000)*0.075; } else if (i <= 400000) { bonus = bonus2 + (i - 200000)*0.05; } else if (i <= 600000) { bonus = bonus4 + (i - 400000)*0.03; } else if (i <= 1000000) { bonus = bonus6 + (i - 600000)*0.015; } else if (i>1000000) { bonus = bonus10 + (i - 1000000)*0.01; } return bonus; }
输入输出:
int main() { printf("The number of bits in a byte %d\n", CHAR_BIT); printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN); printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX); printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX); printf("The minimum value of SHORT INT = %d\n", SHRT_MIN); printf("The maximum value of SHORT INT = %d\n", SHRT_MAX); printf("The minimum value of INT = %d\n", INT_MIN); printf("The maximum value of INT = %d\n", INT_MAX); printf("The minimum value of CHAR = %d\n", CHAR_MIN); printf("The maximum value of CHAR = %d\n", CHAR_MAX); printf("The minimum value of LONG = %ld\n", LONG_MIN); printf("The maximum value of LONG = %ld\n", LONG_MAX); printf("The maximum value of float = %f\n", FLT_MAX); printf("The minimum value of float = %f\n", FLT_MIN); printf("The maximum value of double = %f\n", DBL_MAX); printf("The minimum value of double = %f\n", DBL_MIN); double a; for (;;) { printf("你的净利润是:\n"); scanf("%lf", &a); printf("1函数利润提成%lf\n", award(a)); printf("2函数利润提成%lf\n", award2(a)); } return 0; }
c语言100实例2 一个数据填写错误导致的问题 论校验的重要性
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。