C++ 税务计算器问题
我制作了这个程序,根据用户输入计算一系列工资的税收。一切正常,除了我似乎找不到一种方法让应用程序忽略最后3个printf,并且在用户输入负值时只打印一条错误消息。如果用户输入负数,我不想显示最后3个printf,而是希望应用程序只显示“错误:您输入了负数”或类似的内容。我使用visual studio作为编译器,这是一个C应用程序。请帮忙。另外,请对我放轻松,这是我的编程课,我们仍然在做非常基本的东西 代码如下:C++ 税务计算器问题,c++,c,C++,C,我制作了这个程序,根据用户输入计算一系列工资的税收。一切正常,除了我似乎找不到一种方法让应用程序忽略最后3个printf,并且在用户输入负值时只打印一条错误消息。如果用户输入负数,我不想显示最后3个printf,而是希望应用程序只显示“错误:您输入了负数”或类似的内容。我使用visual studio作为编译器,这是一个C应用程序。请帮忙。另外,请对我放轻松,这是我的编程课,我们仍然在做非常基本的东西 代码如下: #include <stdio.h> #include <std
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float salary, tax = 0;
printf("\n\n\tEnter the salary ammount per year: \t\t$");
scanf("%f", &salary);
if (salary <= 10000){
tax=0;
}
else if (salary > 10000 && salary <= 40000){
tax = (salary - 10000)*0.2;
} else if (salary > 40000 && salary <= 50000){
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary > 50000 && salary <= 75000){
tax = 9000 + (salary - 50000)*0.4;
} else if (salary > 75000.01 && salary <= 100000){
tax = 19000 + (salary - 75000)*0.5;
} else if (salary > 100000 && salary >=100000.01){
tax = 31500 + (salary - 100000)*0.6;
}
printf("\nSalary per year:\t\t $ %.2f\n\n", salary);
printf("Tax ammount per year:\t\t $ %.2f\n\n", tax);
printf("Salary after tax:\t\t $ %.2f\n", salary-tax);
getchar();getchar();
}
#包括
#包括
内部主(空)
{
浮动工资,税=0;
printf(“\n\n\t请输入每年的工资金额:\t\t$”;
scanf(“%f”和工资);
如果(工资10000和40000和50000和75000.01和100000和>=100000.01){
税金=31500+(工资-100000)*0.6;
}
printf(“\n每年工资:\t\t$%.2f\n\n”,工资);
printf(“每年纳税金额:\t\t$%.2f\n\n”,税);
printf(“税后工资:\t\t$%.2f\n”,工资税);
getchar();getchar();
}
您已经演示了如何使用if
语句检查int
是否在给定范围内。只需对输出应用相同的逻辑。负数是<0
例如:
if(salary < 0) {
//print error
} else {
if (salary <= 10000) {
tax=0;
} else if (salary > 10000 && salary <= 40000) {
tax = (salary - 10000)*0.2;
} else if (salary > 40000 && salary <= 50000) {
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary > 50000 && salary <= 75000) {
tax = 9000 + (salary - 50000)*0.4;
} else if (salary > 75000/*.01*/ && salary <= 100000) {
tax = 19000 + (salary - 75000)*0.5;
} else /*if (salary > 100000 && salary >=100000.01)*/ {
tax = 31500 + (salary - 100000)*0.6;
}
printf("\nSalary per year:\t\t $ %.2f\n\n", salary);
printf("Tax ammount per year:\t\t $ %.2f\n\n", tax);
printf("Salary after tax:\t\t $ %.2f\n", salary-tax);
}
if(工资<0){
//打印错误
}否则{
如果(工资10000和40000和50000和75000/*.01*/&&100000和>=100000.01)*/{
税金=31500+(工资-100000)*0.6;
}
printf(“\n每年工资:\t\t$%.2f\n\n”,工资);
printf(“每年纳税金额:\t\t$%.2f\n\n”,税);
printf(“税后工资:\t\t$%.2f\n”,工资税);
}
在最后一个else if
语句中,实际上不需要if
语句,只需要else
。虽然可以肯定(为了清楚起见),但也可以将其包括在内。但是,您肯定不需要**salary>=100000.01)
如果salary>100000
已经评估为true
,则=
将只评估为true
。只有当双方的计算结果均为true
时,&&
才会计算为true
。一个为真,另一个为假的唯一方法是,如果有人输入了奇数工资(100000.005),但即使输入了该工资,他们仍然需要在该纳税等级中
无论如何,您的
printf
语句现在包含在if(salary的else
块中,我认为您的代码容易出错,可以简化很多:
if (salary <= 10000){
tax=0;
} else if (salary <= 40000){
tax = (salary - 10000)*0.2;
} else if (salary <= 50000){
tax = 6000 + (salary - 40000)*0.3 ;
} else if (salary <= 75000){
tax = 9000 + (salary - 50000)*0.4;
} else if (salary <= 100000){
tax = 19000 + (salary - 75000)*0.5;
} else {
tax = 31500 + (salary - 100000)*0.6;
}
if(工资这不是你问题的答案,但最好让计算机完成计算中的所有工作。你的代码中有一些中间结果,你必须手工计算。为什么不让计算机来做呢?它还可以让你通过编辑关键功能、括号和费率来轻松更改费率结构,不必担心中间结果
float tax = 0;
struct {
float basis;
float rate;
} *ptr, rateStructure[] =
// list these from high to low brackets
{
{100000,0.6},
{ 75000,0.5},
{ 50000,0.4},
{ 40000,0.3},
{ 10000,0.2},
{ 0,0.1}
};
ptr = rateStructure;
do {
float bracket = salary - ptr->basis;
if (bracket > 0) {
tax += bracket * ptr->rate;
salary -= bracket;
}
ptr++;
} while (salary);
生活中只有两件事是确定无疑的:税收和分配税务计算器。一般来说,如果你用货币价值进行会计核算,不要使用float
甚至double
。最好使用long
或long
计算美分或厘米或任何最小的货币单位例如,float
无法准确存储$0.01。谢谢你的回答。我已经做了一段时间了,你知道当你做某件事的时候,你是如何变得如此专注,以至于忘记了其他事情。无论如何,再次感谢你的快速响应。salary==75.005
也出现了同样的错误。总的来说,你是错的在每个else
分支中,你都知道前面的条件是错误的。例如,如果你在else
分支中的if(salary Not pretty)。我建议使用`浮动括号[2][={{100000,0.6},{75000,0.5}因为宏是讨厌的,不是创建表的最好方法。@ MalSale-重构。看起来好多了。C++会更短一点,用<代码>(AutoPTR:RATESTREST)
。这种循环的优点是编译器对循环的时间有更好的了解,并可以在此基础上进行优化。auto
功能仅在C++11中可用。如果你有它,那就太酷了。我被IAR EWARM困住了,而IAR EWARM没有。