-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是错误的,除非你给它分配一个真正一半的值
  • 您的循环不使用之前的阶乘值
  • 你总是乘以inputinput-1从不改变input
  • 您没有初始化factorial1

PS 您的循环运行为空的事实是您最不麻烦的事情。

PPS 要做到这一点,请考虑如何在纸上做到这一点:从 开始1,然后继续将先前的结果乘以从2到的数字input。现在编写与 C 程序相同的算法:factorial用作中间结果,并x从循环中用作“和之间的当前1数字input

于 2013-02-14T21:50:11.423 回答
3

您不会input在循环中进行更改,因此您的代码归结为(对于您的示例输入 5):

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

阶乘 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

您的循环每次都使用相同的值(inputhalf

尝试

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

你实际上并没有改变状态,所以你应该只得到input * (input - 1). 为什么?嗯,half永远都是input - 1,永远不会input改变。同时,每次您单步执行循环时,都会将 的值factorial简单地分配给该产品。

我想你的意图是

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 回答