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。我做错了什么阻止它继续运行?
答案 0 :(得分:6)
for循环之后你有一个;
。删除它,你会没事的:
for(x=1; x<input; x++) {
// your stuff
}
您还需要在循环中修复另一个错误,如其他答案中所述。
答案 1 :(得分: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;
}
答案 2 :(得分:3)
我做错了什么?
有很多事情你做错了:
half
是错误的,除非你指定一个真正属于它的一半的值input
乘以input-1
,永远不会更改input
factorial
初始化为1
P.S。你的循环空了这一事实是你遇到麻烦最少的。
P.P.S。要做得好,请考虑如何在纸上执行此操作:从1
开始,然后将之前的结果与2
到input
的数字相乘。现在编写与C程序相同的算法:使用factorial
作为中间结果,并使用循环中的x
作为1
和input
之间的当前数字
答案 3 :(得分:1)
您的循环每次使用相同的值(input
和half
)
试
factorial = 1;
for(x=2; x<=input; x++)
{
factorial *= x;
}
答案 4 :(得分: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;
}
顺便说一句:你也可以补偿负面因素。