2

ユーザーの入力に基づいて、給与の範囲の税金を計算するこのプログラムを作成しました。アプリケーションが最後の3つのprintfを無視し、ユーザーが負の値を入力した場合にエラーメッセージを出力する方法を見つけることができないという事実を除いて、すべてが正常に機能しています。ユーザーが負の数を入力した場合、最後の3つのprintfを表示したくありません。代わりに、アプリケーションに「エラー:負の数を入力しました」またはそのようなものを表示させます。Visual Studio をコンパイラとして使用しています。これは C アプリケーションです。助けてください。また、私がまだ非常に基本的なことを行っている私のプログラミングクラスのために、私に気楽に行ってください。

コードは次のとおりです。

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

3 に答える 3

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本当に必要ありません。確かに(そして明確にするために)それを含めても問題ありません。ただし、間違いなく必要はありません 。すでに評価されている場合にのみ評価されます。また、は、両側が と評価される場合にのみ と評価されます。一方が正しく、もう一方が正しくない唯一の方法は、誰かが奇数の給与 (100000.005) を入力した場合ですが、この給与が入力されたとしても、この税額区分に含まれている必要があります。ifelse** salary >=100000.01)>=truesalary > 100000true&&truetrue

とにかく、printfステートメントはelseブロックのブロックに含まれるif(salary<0) {}else{}ようになったため、給与が >= 0 の場合にのみ出力されます。

于 2013-10-11T03:55:39.077 に答える
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);
于 2013-10-11T07:05:30.447 に答える