C程序使用循环计算税率括号,但没有数组

时间:2015-11-12 01:39:06

标签: c loops switch-statement

我有一项任务,它要求我拥有满足这些要求的功能:

  1. Tax_Bracket_Identification。此功能将识别税级。这个功能:
    • 的类型为int;
    • 有一个按值调用的参数(收入);
    • 使用嵌套的if-else语句。
  2. Tax_Calculation。将计算每笔扫描收入的税额,并且:
    • 属于void;
    • 有三个参数:
      • 收入(按价值调用);
      • 纳税括号(按值调用);
      • 税(按参考编号);
    • 使用switch case语句来计算所得税。
  3. PrintAll。此功能将打印纳税和所得税。它:
    • 属于void;
    • 有两个参数:
      • 纳税括号(按值调用);
      • 所得税(按价值调用)。
  4. 所以基本上,我已经开始了任务,我有几个问题。 到目前为止,这是我的代码:

    #include <stdio.h>
    int taxBracketIdentification(int);
    void taxCalculation(int income, int taxbracket, int *tax);
    void printAll(int, int);
    int taxbracket;
    
    void main() {
    int  incomenumber, income, *tax;
    
    printf("Please type in the number of incomes to be processed. \n");
    scanf("%d", &incomenumber);
    printf("Please type in the income \n");
    scanf("%d", &income);
    
    }
    
    int gradeone, gradetwo, gradethree, gradefour, gradefive, gradesix;
    int taxBracketIdentification(int income) {
    int taxbracket;
    
    if (income < 10000) {
       taxbracket = 1;
    }
    
        else if (income > 10000 && income < 20000)
        {
       taxbracket = 2;
        }
    
       else if (income > 20000 && income < 30000)
        {
       taxbracket = 3;
       // printf("your tax bracket is 3");
        }
       else if (income > 30000 && income < 40000)
        {
       taxbracket = 4;
    
        }
        else if (income > 40000 && income < 50000)
    
        {
       taxbracket = 5;
        }
    
        else if (income > 100000)
        {
       taxbracket = 6;
        }
    
    }
    
    void taxCalculation(int income, int taxbracket, int *tax) {
    
    (taxBracketIdentification(income));
    switch(taxbracket) {
    case 1:
        *tax = (0.05 * income);
        break;
    case 2:
       *tax = 500 + 0.10*(income - 10000);
       break;
    case 3:
       *tax = 1500 + 0.15*(income-20000);
       break;
    case 4:
        *tax = 3000 + 0.20*(income-30000);
        break;
    case 5:
        *tax = 7000 + 0.25*(income-50000);
        break;
    case 6:
        *tax = 19500   + 0.30*(income-10000);
        break;
    
    }
    
    void printAll(int taxbracket, int tax)
    {
    
    printf("Your tax bracket is: \t %d \n", taxBracketIdentification(income));
    printf("Your tax is \t %d \n", );
    
    
    
    
    }
    
    
    
    }
    

    现在我有几个问题......

    • 1)如何在不使用的情况下从用户接收多个输入 数组?这甚至是现实的吗?
    • 2)我的函数的先决条件表明我必须使用a printAll函数中的值参数调用,但是我是 在taxCalculate中使用reference参数调用。怎么会 这甚至工作?我可以在main中调用计算功能, 然后将其存储为值,以便可以通过调用此值 printAll功能?
    • 3)我是否正确地完成了这项任务,是否有任何错误 这是明显的蝙蝠。

    非常感谢。

1 个答案:

答案 0 :(得分:1)

针对您的具体问题:

1 /如果您收到用户的项目并且立即处理它们,则您不需要数组。如果您想存储信息供以后使用,则只需要数组。例如,即使没有用于存储值的数组,这个伪代码也会输出用户输入的多个项目的两倍:

val = get-input()
while val != -1:
    output(val * 2)
    val = get-input()

2 /变量本身不是按值调用或按引用调用,它是传递给指向该函数的函数的方式。例如,以下C代码使用两种方法传递它,首先将其设置为特定值然后输出它:

void setTo42 (int *pVal) {
    *pVal = 42;
}
void outputIt (int val) {
    printf ("%d\n", val);
}
:
int xyzzy = 7;
setTo42(&xyzzy);    // pass by reference (emulated).
outputIt(xyzzy);    // pass by value.

3 /你执行任务的方式似乎很好,但我会给你两条建议。首先,考虑一下您的代码将为您提供的收入为20000的税收范围。为了减少麻烦,您将不得不使用<= / >=,而不仅仅是< / >。其次,考虑如下构造:

if (xyzzy < 20000) {
    doLt20k();
} else if ((xyzzy >= 20000) && (xyzzy < 40000)) {
    doGe20kLt40k();
} else {
    doGe40k();
}

在该代码中,第二个if语句不必要复杂,因为在xyzzy < 20000时永远不会检查它。因此可以简化为:

if (xyzzy < 20000) {
    doLt20k();
} else if (xyzzy < 40000) {
    doGe20kLt40k();
} else {
    doGe40k();
}