C语言 “企业发放的奖金根据利润提成” 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 “企业发放的奖金根据利润提成” 的问题相关的知识,希望对你有一定的参考价值。

#includeint main() float i,J,a,b,c,d,e; printf("请输入利润:I="); scanf("&d",&i); a=10000; b=7500; c=10000; d=6000; e=6000; if(i<=100000) J=i*0.1; else if(i<=200000) J=a+(i-100000)*0.075; else if(i<=400000) J=a+b+(i-200000)*0.05; else if(i<=600000) J=a+b+c+(i-400000)*0.03; else if(i<=1000000) J=a+b+c+d+(i-600000)*0.015; else J=a+b+c+d+e+(i-1000000)*0.01; printf("奖金总数:%f\n",J); return 0; 结果却永远都是-10737418.000000请大神帮忙解释啊哪里出了问题。。。

“企业发放的奖金根据利润提成” 的问题,用C语言表示应该为:
// 企业发放的奖金根据利润提成。
// i <= 100000 --- 10%
// 100000 < i <= 200000 --- 低于100000的10%,高于100000的7.5%
// 200000 < i <= 400000 --- 低于200000同上,高于200000的5%
// 400000 < i <= 600000 --- 高于400000的3%,
// 600000 < i <= 1000000 --- 高于600000的1.5%
// i > 1000000 --- 超过1000000按1%。
// 从键盘输入当月利润i,求应发奖金总数
// if语句

#include

int main()

int i,j;
printf("请输入当月利润:");
scanf("%d",&i);
if(i <= 100000)
j = i * 0.1;
else if( i > 100000 && i <= 200000 )
j = 100000 * 0.1 + ( i - 100000 ) * 0.075;
else if( i > 200000 && i <= 400000 )
j = 200000 * 0.1 + (i - 200000) * 0.05;
else if( i > 400000 && i <= 600000 )
j = 400000 * 0.1 + (i - 400000) * 0.03;
else if( i > 600000 && i <= 1000000)
j = 600000 * 0.1 + (i - 600000) * 0.015;
else
j = 1000000 * 0.1 + (i - 1000000) * 0.01;
printf("应得的奖金是:%d\\n",j);
return 0;
C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:
switch(表达式)
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;

case 常量表达式n: 语句n;
default: 语句n+1;

其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
C语言的概念
C语言是一种通用的、面向过程式的计算机程序设计语言。1972 年,为了移植与开发UNIX操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了C语言。
C语言是一种广泛使用的计算机语言,它与Java编程语言一样普及,二者在现代软件程序员之间都得到广泛使用。当前最新的C语言标准为C18,在它之前的C语言标准有C17、C11C99 等。
参考技术A 你scanf("&d",&i); 改为scanf("%f",&i); 就行,最后面的输出用%g好一些,可以出去多余的0

#include<stdio.h>
int main()

float i,J,a,b,c,d,e;
printf("请输入利润:I=");
scanf("%f",&i);
a=10000;
b=7500;
c=10000;
d=6000;
e=6000;
if(i<=100000) J=i*0.1;
else if(i<=200000) J=a+(i-100000)*0.075;
else if(i<=400000) J=a+b+(i-200000)*0.05;
else if(i<=600000) J=a+b+c+(i-400000)*0.03;
else if(i<=1000000) J=a+b+c+d+(i-600000)*0.015;
else
J=a+b+c+d+e+(i-1000000)*0.01;
printf("奖金总数:%g\n",J);
return 0;
追问

按你说的改了之后数额还是不对啊。。。为什么一直是负的。。。附图

追答


我这边运行没有什么问题,你运行的截图给我看一下

追问

我也很奇怪。。。

追答

你第5条还是没有改回来啊,是scanf("%f",&i); ,双引号“”里面是%f,不是&f,符号搞错了,%f和&f很明显的吧 --

本回答被提问者采纳
参考技术B #include <stdio.h>
int main()

double i,b;
float br[]=0.1,0.075,0.05,0.03,0.015,0.01;//奖金率数组
int ad[]=0,2500,7500,15500,24500,29500,j;//速算增加数数组
while(scanf("%lf",&i)!=EOF)//^Z结束输入
b=(double)(i*br[0]+ad[0]);//初始化奖金
for(j=0;j<6;j++)

if(b>(double)(i*br[j]+ad[j]))//取最小值
b=(double)(i*br[j]+ad[j]);
printf("%.2lf*%.3f+%d=%.2lf\\n",i,br[j],ad[j],((double)(i*br[j]+ad[j])));//监视参数运行过程

printf("%.2lf\\n",b);//求得奖金

return 0;

参考技术C 程序已调试好。你的问题出在,整型数据a和浮点型数据相乘时,结果会以浮点型数据存放。你用长整型格式输出,结果程序就判定出错,就以0表示输出。所以,我把格式输出改成浮点型输出了。最后一个用.2f输出,没有表明数据长度,是因为超过了一百万,就有更大的数据,这样做会减少错误。 #include<stdio.h> void main() long int a; scanf("%ld",&a); if(a<=100000) printf("%f\n",0.1*a); else if(a<=200000) printf("%8.2f\n",0.075*(a-100000)+10000); else if(a<=400000) printf("%8.2f\n",0.05*(a-200000)+17500); else if(a<=600000) printf("%8.2f\n",0.03*(a-400000)+27500); else if(a<=1000000) printf("%8.2f\n",0.015*(a-600000)+39500); else printf("%.2f\n",0.01*(a-1000000)+39500); 补充: 我用你编的程序试着运行了一下,结果输出是0。我上面的对结果为0的解释是错的,不好意思。我也不太清楚是什么原因. 补充: 我这里的输出也是0.我上面已有修改的方法了,至于结果为什么是0,应该是 电脑 读取的问题吧。具体怎么读取,我也不大清楚。。 参考技术D #include <stdio.h>
main()
float l,j;
printf("请输入利润:");
scanf("%f",&l);
if(l<=100000)
j=l*0.1;
printf("奖金:%f",j);

else if(l>100000||l<=200000)
j=(l-100000)*0.075+100000*0.1;
printf("奖金:%f",j);

else if(l>200000||l<=400000)
j=(l-200000)*0.05+100000*0.1+100000*0.075;
printf("奖金:%f",j);

else if(l>400000||l<=600000)
j=(l-400000)*0.03+100000*0.1+100000*0.075+200000*0.05;
printf("奖金:%f",j);

else if(l>600000||l<=1000000)
j=(l-600000)*0.015+100000*0.1+100000*0.075+200000*0.05+200000*0.03;
printf("奖金:%f",j);

else if(l>1000000)
j=(l-1000000)*0.01+100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015;
printf("奖金:%f",j);


java 企业发放的奖金根据利润提成

企业发放的奖金根据利润提成。利润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,然后计算出应发放奖金总数并输出显示。

参考技术A public class class_2 /**
* @param args
*/

static void chek(String money)

BigDecimal bg = new BigDecimal(money);

BigDecimal mon = new BigDecimal("0");
if(bg.doubleValue()<=100000)

mon = bg.multiply(new BigDecimal("0.1"));
System.out.println(mon);

else if(bg.doubleValue()>100000&&bg.doubleValue()<=200000)

mon = mon.add(new BigDecimal("100000").multiply(new BigDecimal("0.1")));
bg = bg.subtract(new BigDecimal("100000"));
bg=bg.multiply(new BigDecimal("0.075"));
mon = mon.add(bg);
System.out.println(bg);
System.out.println(mon);

else if(bg.doubleValue()>200000&&bg.doubleValue()<=400000)

mon = mon.add(new BigDecimal("100000").multiply(new BigDecimal("0.1")));
System.out.println(mon);
mon = mon.add((new BigDecimal("100000").multiply(new BigDecimal("0.075"))));
System.out.println(mon);
bg = bg.subtract(new BigDecimal("200000"));
bg=bg.multiply(new BigDecimal("0.05"));
mon = mon.add(bg);
System.out.println(mon);


else if(bg.doubleValue()>400000&&bg.doubleValue()<=600000)

mon = mon.add(new BigDecimal("100000").multiply(new BigDecimal("0.1")));
System.out.println(mon);
mon = mon.add((new BigDecimal("100000").multiply(new BigDecimal("0.075"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.05"))));
System.out.println(mon);
bg = bg.subtract(new BigDecimal("400000"));
bg=bg.multiply(new BigDecimal("0.03"));
mon = mon.add(bg);
System.out.println(mon);


else if(bg.doubleValue()>600000&&bg.doubleValue()<=1000000)

mon = mon.add(new BigDecimal("100000").multiply(new BigDecimal("0.1")));
System.out.println(mon);
mon = mon.add((new BigDecimal("100000").multiply(new BigDecimal("0.075"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.05"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.03"))));
System.out.println(mon);
bg = bg.subtract(new BigDecimal("600000"));
bg=bg.multiply(new BigDecimal("0.015"));
mon = mon.add(bg);
System.out.println(mon);


else if(bg.doubleValue()>1000000)

mon = mon.add(new BigDecimal("100000").multiply(new BigDecimal("0.1")));
System.out.println(mon);
mon = mon.add((new BigDecimal("100000").multiply(new BigDecimal("0.075"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.05"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.03"))));
System.out.println(mon);
mon = mon.add((new BigDecimal("200000").multiply(new BigDecimal("0.015"))));
System.out.println(mon);
bg = bg.subtract(new BigDecimal("1000000"));
bg=bg.multiply(new BigDecimal("0.01"));
mon = mon.add(bg);
System.out.println(mon);




public static void main(String[] args)

chek("1000000");

测试结果39500.000不知道正确不 自己修改下

以上是关于C语言 “企业发放的奖金根据利润提成” 的问题的主要内容,如果未能解决你的问题,请参考以下文章

企业发放的奖金根据利润提成。利润(1)低于或等于10万元的,奖金可提10%;利润高于10万元,低于

C语言 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于

C语言九十八之实现企业发放的奖金根据利润提成。利润(I)低于或等于 10 万元时,奖金可提 10%;利润高 于 10 万元,低于 20 万元时,低于 10 万元的部分按 10%提成,高于 10 万元的

java 企业发放的奖金根据利润提成

java 企业发放的奖金根据利润提成

企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%; 利润高于100000元