-3
int input;
int factorial;
int half;

printf("Enter the number you wish to calculate: ");
scanf("%d", &input);    

for(x=1; x<input; x++);
{
    half = input - 1;
    factorial = input * half;
}

printf("%d\n", factorial);

return 0;

一度実行され、入力番号 * (入力番号 - 1)、試験、入力が 5 で、20 が返されます。実行を継続できない原因は何ですか?

4

5 に答える 5

6

;forループの後にあります。それを削除すると、問題ありません。

for(x=1; x<input; x++) {
 // your stuff
}

他の回答で述べたように、ループ内の別のエラーを修正する必要があります。

于 2013-02-14T21:48:05.243 に答える
3

私は何を間違っていますか?

あなたが間違っていることはたくさんあります:

  • half真に何かの半分である値を代入しない限り、変数の名前付けは間違っています
  • あなたのループは factorial の以前の値を使用していません
  • あなたは常にを掛けinputinput-1input
  • factorialあなたはに初期化しません1

PSループが空で実行されるという事実は、あなたの問題の中で最も少ないものです。

PPS 正しく行うには、紙の上で行う方法を検討してください。 から始めて、前の結果に からまで1の数値を掛け続けます。ここで、C プログラムと同じアルゴリズムを作成します。中間結果として使用し、ループから「との間の現在の数」として使用します。2inputfactorialx1input

于 2013-02-14T21:50:11.423 に答える
3

ループ内で変更しないinputため、コードは次のようになります (サンプル入力 5 の場合):

for (i = 1; i < 5; i++) {
   half = 5 - 1;
   factorial = 5 * 4;
}

factorial 5 ( 5!) は 5 * 4 * 3 * 2 * 1 になり、次のようになります。

factorial = 1;
for (i = input; i > 1; i--) {
   factorial = factorial * i;
}
于 2013-02-14T21:48:35.953 に答える
1

ループは毎回同じ値を使用します (inputおよびhalf)

試す

factorial = 1;
for(x=2; x<=input; x++)
{
    factorial *= x;
}
于 2013-02-14T21:49:43.417 に答える
1

実際に状態を変更しているわけではないので、取得する必要があるのはinput * (input - 1). なんで?まあ、これからhalfもずっと変わらない。一方、値は、ループを通過するたびにその製品に単純に割り当てられます。input - 1inputfactorial

私はあなたが意図したものだと思います

factorial = 1;
// no sense in starting from 1, factorial already is 1
for(x = 2; 
    // using <= so as to *include* the original input value.
    x <= input; x++)
{
    // the same things a factorial = factorial * x
    factorial *= x;
}

ところで:ネガも補正したいかもしれません。

于 2013-02-14T21:50:48.783 に答える