c编程企业利润编制,输入100W以上的数就出负数是怎么回事
#if(0)利润I低于或等于10万元时,奖金可提成10% ;
利润高于10万元,低于20万元(100000<I≤200000)时,其中10万元按10%提成,
高于10万元的部分,可提成7.5% ;200000<I≤400000时,其中20万元仍按上述
办法提成(下同),高于20万元的部分按5%提成;400000<I≤1000000时,高于40万的部分按1.5%提成;
I>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发放
奖金总数。
#endif
用的VC 6.0
#include<stdio.h>
void main()
{
int i,money;
printf("please input the i\n");
scanf("%d",&i);
switch(i<=100000)
{
case 1:money=i*0.1;
break;
case 0:switch(i>100000&&i<=200000)
{
case 1:money=100000*0.1+(i-100000)*0.075;
break;
case 0:switch(i>200000&&i<=400000)
{
case 1:money=100000*0.1+10000*0.075+(i-200000)*0.05;
break;
case 0:switch(i>400000&&i<=1000000)
{
case 1:money=100000*0.1+100000*0.075+200000*0.05+(i-400000)*0.015;
break;
case 0:switch(i>1000000)
{
money=100000*0.1+100000*0.075+200000*0.05+600000*0.015+(i-1000000)*0.01;
break;
}
}
}
}
}
printf("%d",money);
} 这写法。。算了不吐槽了。。。
你最后一个case 0后面跟的语句是switch(i>1000000)
{
money=100000*0.1+100000*0.075+200000*0.05+600000*0.015+(i-1000000)*0.01;
break;
}没有case语句大括号里的语句是不会执行的。。
Croper 发表于 2019-3-14 15:09
这写法。。算了不吐槽了。。。
你最后一个case 0后面跟的语句是没有case语句大括号里的语句是不会执行的。 ...
刚学C,在练习经典100题,谢谢, 明白了。 你为什么要用switch?
很明显是你结构错误导致的
#include<stdio.h>
void main()
{
double i, money;
printf("please input the i\n");
scanf_s("%lf", &i);
if (i <= 100000)
{
money = i*0.1;
}
else if (i > 100000 && i <= 200000)
{
money = 100000 * 0.1 + (i - 100000)*0.075;
}
else if (i > 200000 && i <= 400000)
{
money = 100000 * 0.1 + 10000 * 0.075 + (i - 200000)*0.05;
}
else if (i > 400000 && i <= 1000000)
{
money = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + (i - 400000)*0.015;
}
else if(i>1000000)
{
money = 100000 * 0.1 + 100000 * 0.075 + 200000 * 0.05 + 600000 * 0.015 + (i - 1000000)*0.01;
}
printf("%lf\n", money);
system("pause");
}
int 在vc6.0中的范围为4个字节,也就是可以表示到(2^32)-1位数据,因为有正负,所以只能表示到2^31的正数,20多亿,够用了
而且,你题目中涉及到小数,用int会降低精度,所以建议用double,double为8个字节,2^63位数,够用了 暗pluto 发表于 2019-3-14 15:40
你为什么要用switch?
很明显是你结构错误导致的
#include
谢谢啊,题目上非要我用switch,小鱼老师难为我。 本帖最后由 Croper 于 2019-3-14 17:34 编辑
论如何强行使用switch#include <stdio.h>
#ifndef min
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#define USE_SWITCH
const int INCOMESEG[] = {0,100000,200000,400000,1000000,0x7FFFFFFF };
const double RADIO[] = { 0.1,0.075,0.05,0.015,0.01 };
int GetIncomeSeg(int i) {
const int N = sizeof(INCOMESEG) / sizeof(int);
int p = 0, q = N;
while (p < q) {
int n = (p + q) / 2;
if (i >= INCOMESEG) p = n + 1;
else q = n;
}
return p;
}
int main() {
int i;
int money = 0;
printf("please input the i\n");
scanf("%d", &i);
#ifdef USE_SWITCH
int seg = GetIncomeSeg(i);
switch (seg) {
case 5:
money += (i - INCOMESEG)*RADIO;
i = INCOMESEG;
//no break;
case 4:
money += (i - INCOMESEG)*RADIO;
i = INCOMESEG;
//no break;
case 3:
money += (i - INCOMESEG)*RADIO;
i = INCOMESEG;
//no break;
case 2:
money += (i - INCOMESEG)*RADIO;
i = INCOMESEG;
//no break;
case 1:
money += i * RADIO;
}
#else
int j;
for (j = 0;; ++j) {
money += (min(i, INCOMESEG)-INCOMESEG)*RADIO;
if (i < INCOMESEG) break;
}
#endif
printf("%d", money);
}
页:
[1]