两个单精度的数在相乘的时候,系统会自动先转换成double型的。BASIC*LIMIT+(hours-LIMIT)*ADD;得到的结果会自动转换成double型,而salary_sum是float型,所以会出现警告!
#include
#define BASIC 10.00 //正常10元/小时
#define LIMIT 40 //正常工作时间为40小时
#define ADD 1.5 //加班期 ADD倍
#define TAX 0.15 //300美元以内的税率
#define TAXM 0.20 //下150美金的税率
#define TAXL 0.25 //剩下的税率
int main()
{
float salary_sum,tax_m,salary_j,hours;
printf("input hours:");
scanf("%f",&hours);
if(hours>=40.0)
salary_sum=(float)(BASIC*LIMIT+(hours-LIMIT)*ADD);
salary_sum=BASIC*hours;
if(salary_sum<=300) tax_m=(float)(salary_sum*TAX);
else if(salary_sum<=450)
tax_m=(float)((salary_sum-300)*TAXM+300*TAX);
else if(salary_sum>450)
tax_m=(float)(300.0*TAX+150.0*TAXM+(salary_sum-450.0)*TAXL);
salary_j=salary_sum-tax_m;
printf("工资总额=%f,税金=%f,净工资=%f\n",salary_sum,tax_m,salary_j);
return 0;
}
#include
#define BASIC 10.00 //正常10元/小时
#define LIMIT 40 //正常工作时间为40小时
#define ADD 1.5 //加班期 ADD倍
#define TAX 0.15 //300美元以内的税率
#define TAXM 0.20 //下150美金的税率
#define TAXL 0.25 //剩下的税率
int main(void)
{
int hours;///声明hours变量
float salary_sum,tax_m,salary_j;
printf("input hours:");
scanf("%d",&hours);
if(hours>=40)
salary_sum=BASIC*LIMIT+(hours-LIMIT)*ADD;
else///如果不加上else会造成salary_sum=BASIC*LIMIT;语句每次都执行
salary_sum=BASIC*LIMIT;
if(salary_sum<=300)
tax_m=salary_sum*TAX;
else if(salary_sum<=450)
tax_m=(salary_sum-300)*TAXM+300*TAX;
else if(salary_sum>450)///要改成else if 因为else后面不接条件
tax_m=300*TAX+150*TAXM+(salary_sum-450)*TAXL;
salary_j=salary_sum-tax_m;
printf("工资总额=%lg,税金=%lg,净工资=%lg\n",salary_sum,tax_m,salary_j);///由于声明的是float类型 所以不能使用%d打印
return 0;
}
我的也有这种问题出现,把单精度的换成双精度的就不会了,hours需要定义下,输入输出控制符要与变量类型相匹配
修改后的代码:
#include
#define BASIC 10.00 //正常10元/小时
#define LIMIT 40 //正常工作时间为40小时
#define ADD 1.5 //加班期 ADD倍
#define TAX 0.15 //300美元以内的税率
#define TAXM 0.20 //下150美金的税率
#define TAXL 0.25 //剩下的税率
int main(void)
{
double salary_sum,tax_m,salary_j,hours;
printf("input hours:");
scanf("%lf",&hours);
if(hours>=40)
salary_sum=BASIC*LIMIT+(hours-LIMIT)*ADD;
//salary_sum=BASIC*LIMIT;
if (salary_sum<=300)
tax_m=salary_sum*TAX;
else if(salary_sum<=450)
tax_m=(salary_sum-300)*TAXM+300*TAX;
else
//(salary_sum>450)
tax_m=300*TAX+150*TAXM+(salary_sum-450)*TAXL;
salary_j=salary_sum-tax_m;
printf("工资总额=%lf,税金=%lf,净工资=%lf\n",salary_sum,tax_m,salary_j);
return 0;
}
实数默认为double型。BASIC*LIMIT+(hours-LIMIT)*ADD;他的结果是double型。
printf("工资总额=%d,税金=%d,净工资=%d\n",salary_sum,tax_m,salary_j);
改为
printf("工资总额=%g,税金=%g,净工资=%g\n",salary_sum,tax_m,salary_j);
找不到hours的定义语句,所以不知道scanf("%d",&hours);是否也需要修改