0

3,000,000,000 (コンマなし) のような大きな数字を入力すると、正しい結果が得られません。どんなに大きな数字を入力しても、表示される数字は 9 桁以下です。

質問は次のとおりです。

0次の計算を実行します。ここで、システムはから(つまり) までの正の整数のみを受け入れ、結果を VDU 出力として表示します。3x1093,000,000,000y = 3x2 - 2x + 6

数値が整数または範囲内である場合、アルゴリズムをチェックインする必要はありません。常に正しく入力されていると仮定します。ただし、正しいデータ型を使用してコーディングを試みる必要があります。定義された範囲内の正の整数を使用するための本のデータ型を確認してください

ここにコードがあります

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned x=0, y=0;

    printf("Enter a positive number between 0 to 300000000\n");
    scanf("%u",&x);

    y=(3*x*x)-(2*x)+6;
    
    printf("\n\nThe value of y is %u",y);

    return 0;
}
4

3 に答える 3

1

scanf/に間違ったフォーマット コードを使用していますprintf%d符号付き整数です。%u符号なし整数に使用します。

何が起こっているかというscanfと、 a%dはユーザー入力を符号付き整数として読み取り、負の数をスキャンします。 scanfは、渡された変数のデータ型をチェックしないため、符号なし変数に格納されますが、変数は符号なしであるため、-10 として格納されません。代わりに、負の数がどのように格納されるか ( 2 の補数) により、非常に大きな正の数になります。

正しい入力検証には多少の作業が必要です。そのため、指示がそれを無視するように指示されています。

于 2013-10-27T18:28:30.860 に答える
0

値が最大値よりも大きいためです。整数データ型の制限があるため、整数の範囲を超える値を入力するとロールオーバーされ、正しい値が得られませんでした。したがって、この問題を回避したい場合は、正しい値を取得するよりも long long integer を使用する必要があります

于 2015-12-24T11:00:01.643 に答える
0

x は値 -10 を取ることはできません。質問で述べたように、値は常に正しく入力されていると想定されるため、値を確認する必要はありません。-10 を使用すると、仮定が無効になります。チェックでは正の数のみを使用してください。

編集:さらに、unsignedあなたを使用することで、 unsigned int. 使用する c-int が 16 ビット int ではなく 32 ビット int である場合、最大数は int にのみ適合します。

EDIT2: scanf 関数で %u を使用する必要があることに加えて、指定された形式を使用して出力する必要もあります。つまり、画面上で計算ラインを視覚化する必要があります。

与えられた情報は、答えを理解するのに十分なはずです。これは課題で、自分で何かをすることになっていますよね?

于 2013-10-27T18:22:35.890 に答える