税计算器问题

时间:2013-10-11 03:52:15

标签: c++ c

我制作了这个程序,根据用户输入计算一系列工资的税金。一切都工作正常,除了我似乎无法找到一种方法使应用程序忽略最后3个printf并且只是在用户输入负值时打印错误消息。如果用户输入负数,我不想显示最后3个printf,而是希望应用程序只显示“错误:您输入了负数”或类似的东西。我正在使用visual studio作为我的编译器,这是一个C应用程序。帮助PLZ。另外,请为我的编程课轻松一点,我们仍然在做基本的东西。

以下是代码:

#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();
} 

3 个答案:

答案 0 :(得分:5)

您已经向您展示了如何使用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);
}

在最后else if上,您实际上不需要if语句,只需要else。虽然可以肯定(并且为了清楚起见)包含它也没关系。但是,您绝对不需要** salary >=100000.01)如果>=已经评估为truesalary > 100000将仅评估为true。仅当双方评估为&&时,true才会评估为true。一个人可能是真的而另一个不真实的唯一方法是,如果有人输入一个奇怪的薪水(100000.005),但即使输入了这个薪水,他们仍然需要在这个税率范围内。

无论如何,您的printf语句现在包含在else块的if(salary<0) {}else{}块中,因此只有在工资为&gt; = 0时才会打印。

答案 1 :(得分:1)

这不是您的问题的答案,但最好让计算机在计算中所有工作。您的代码有一些必须手动计算的中间结果。为什么不让电脑去做呢?它还允许您通过编辑关键功能,括号和速率轻松更改费率结构,而不必担心中间结果。

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);

答案 2 :(得分:0)

我认为您的代码容易出错,并且可以简化很多:

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;
}