1

私は C++ でのプログラミングの基礎を学んでおり、if/else ステートメント (減算、加算、乗算など) を使用していくつかの基本的な数学関数を実行するプログラムを作成する必要があります。コンパイル エラーや実行時エラーは発生しませんが、最終的に得られる値は常に正しくありません。

どこが間違っていたのかを確認しようとしていくつか変更しましたが、画面に表示されているものは、言葉が正しいだけで答えではありません。たとえば、-(減算記号) を入力としてスキャンすると、x と y の差がとてつもなく大きな数値であることがわかります。

とにかく、これが私のコードです。どんな助けでも大歓迎です!

 /*
 * This program performs some basic math calculations
 */

#include <stdio.h>
#include <math.h>

int main() {
    int x,y;
    float sum = x+ y;
    float difference = x-y;
    float product = x*y;
    float quotient = x/y;
    float exponent = x^y;
    float modulus = x%y;
    char symbol;


    printf("What is the value of x?\n");
    scanf("%d", &x);

    printf("What is the value of y?\n");
    scanf("%d", &y);

    printf("What is your operator?\n");
    scanf(" %c", &symbol);

    if (symbol== '+') 
       printf("The sum of x and y = %f\n", sum);
    else if (symbol=='-')
       printf("The difference between x and y = %f\n", difference);
    else if (symbol=='*')
       printf("The product of x and y = %f\n", product);
    else if (symbol=='/')
       printf("x divided by y = %f\n", quotient);
    else if (symbol=='^')
       printf("x multiplied exponentially by y = %f\n", exponent);
    else if (symbol=='%')
       printf("x is this much percent of y =%f\n", modulus);

    return 0;
}
4

2 に答える 2

2

これは C++ アプリケーションなので、必要に応じて変数を定義できます。ただし、C または C++ で作成されたプログラムや他のすべての言語のプログラムは上から下に実行されるため、x と y を宣言すると、ユーザーから値が読み取られないことに注意してください。常にコードを上から下にたどってください。ここでは、x と y を宣言し、最初にユーザーからそれらの値を読み取ります。次に、それらのさまざまな操作を計算します。除算以外のほとんどは、x や y のように再び整数になる可能性があると思いますが、コードを修正しようとします。

C または C++ でべき乗が必要な場合は、独自のコードを作成する必要があります。

    #include <stdio.h>
    #include <math.h>

    float power( int x , int y )
    {
        float ret = 1 ;
        for( int i = 1 ; i <= y ; i++ )
            ret *= x ;
        return ret ;
    }

    int main() {

    int x,y;

    printf("What is the value of x?\n");
    scanf("%d", &x);

    printf("What is the value of y?\n");
    scanf("%d", &y);

    printf("What is your operator?\n");
    scanf(" %c", &symbol);


    float sum = (float)x+ y;
    float difference = (float)x-y;
    float product = (float)x*y;
    float quotient = (float)x/y;
    //float exponent = (float)x^y; //Exponentiation should be implemented using multiplication and loops.

   float exponent = power( x , y ) ;
    float modulus = (float)x%y;
    char symbol;

    if (symbol== '+') 
       printf("The sum of x and y = %f\n", sum);
    else if (symbol=='-')
       printf("The difference between x and y = %f\n", difference);
    else if (symbol=='*')
       printf("The product of x and y = %f\n", product);
    else if (symbol=='/')
       printf("x divided by y = %f\n", quotient);
    else if (symbol=='^')
       printf("x multiplied exponentially by y = %f\n", exponent);
    else if (symbol=='%')
       printf("x is this much percent of y =%f\n", modulus);

    return 0;
    }
于 2012-06-10T00:18:24.047 に答える
1

xを初期化する前であっても、すべての計算を実行していますy。初期化されていない変数の内容は不定であるため、結果は不定です。一部のステートメントで未定義の動作を呼び出すリスクがあります (つまり、コードが何を行うかを確実に判断することは不可能です)。xとの値を読み込んだ後にのみ、操作を行ってくださいy

#include <math.h>

の関数を使用しないのに、なぜこのインクルードがあるのです<math.h>か?

float sum = x+ y;

2 つの整数の合計 (または差) は常に整数になります。なぜfloatここを使っているのですか?

float quotient = x/y;

これは整数除算を行い、結果は に変換されfloatます。そのため、意図した結果とは異なる場合があります。正しい結果を得るために、引数のいずれかをfloat/に変換してみてください。doubleまた、常にゼロ除算をチェックする必要があります。モジュラス計算についても同様です。

float exponent = x^y;

C には累乗演算子はありません。ライブラリ関数 ( などpow) を使用するか、独自にロールする必要があります。

scanf(" %c", &symbol);

前にスペースがあるのはなぜですか?

この巨大な if-else はしごも必要ありません。を使用してみてくださいswitch

C がどのように機能するかを理解するには、良い本を手に取って読み始める必要があります。

于 2012-06-10T00:24:25.700 に答える