所以我开始学习编码,也许是因为我不完全理解循环的本质。
所以我想要的输出是:
如果输入的值例如是6,程序应该产生:
但相反它是打印这个:
显然没有明确的要点。显然,第二个for循环不能正确打印出来。我不确定为什么。如果有人可以帮助我,我们将不胜感激!
编辑:我真的应该指明我正在寻找的东西。感谢您提供所有有用的回复。我意识到您的所有解决方案都可能有效,但我正在寻找一种不涉及创建新程序和功能的解决方案。 对于我使用除main()以外的其他函数/过程的赋值无效。我的代码中的问题似乎是第二个for循环没有完全运行,我不知道为什么。该程序应该正常输入一个输入值,但是我将这些值硬编码到变量中,这些变量会产生影响,但它并不存在。如果有任何方法可以实现这一点,只需使用if,for或while循环对我来说是最佳方式。#include <stdio.h>
int main( void )
{
int number1 = 4;
int number2;
int factorial = 1;
int factorialPrev = 1;
printf("0! = 1\n");
for (int i = 0; i < number1; i++)
{
factorial = factorial * (number1 - i);
}
for (int i = number1 - 1; i <= 0; i--)
{
number2 = number1 - i;
factorialPrev = factorialPrev * number2;
printf("%d! = %d\n", number2, factorialPrev);
}
return 0;
}
答案 0 :(得分:2)
你的代码有点......令人困惑,所以我只是重写它。这是绝对最低限度的功能:
user time condition
11 1:05 FALSE
11 1:10 TRUE
11 1:25 FALSE
11 1:25 TRUE
11 1:25 TRUE
11 1:25 TRUE
11 1:40 FALSE
22 2:20 FALSE
22 2:40 FALSE
22 2:40 TRUE
22 2:40 TRUE
让我们把它包装在一个函数中:
printf("0! = 1\n");
int factorial = 1;
for (int n = 1; n <= number; n++) {
factorial *= n;
printf("%d! = %d\n", n, factorial);
}
现在让我们为无效输入添加一些警卫:
void printFactorials(int number) {
printf("0! = 1\n");
int factorial = 1;
for (int n = 1; n <= number; n++) {
factorial *= n;
printf("%d! = %d\n", n, factorial);
}
}
最后,让我们使用它:
void printFactorials(int number) {
if (number < 0) {
printf("Input cannot be less than 0");
return;
}
if (number > 9) {
printf("Input cannot be greater than 9");
return;
}
printf("0! = 1\n");
int factorial = 1;
for (int n = 1; n <= number; n++) {
factorial *= n;
printf("%d! = %d\n", n, factorial);
}
}
答案 1 :(得分:2)
这应该是一个正确的答案:
void showfacto(int max) {
if (max< 0) {
printf("the max cannot be less than 0");
return;
}
printf("0! = 1\n");
int x=1;
for (int i= 1; n <= number; n++) {
{ for(int j=1;j<i)
x=x*j;
}
printf("%d! = %d\n",i, x);
}
如果你想限制最大数量,你只需要添加一个条件,如果数字大于9,例如,返回。
答案 2 :(得分:1)
您也可以通过重复调用递归函数来解决此问题,只需获取单个数字的阶乘。像这样:
int fact(int num) {
if(num > 1) {
return num * fact(num - 1);
}
else {
return 1;
}
}
因此对事实(5)的初始调用将一直到事实(1)返回1.然后控制返回到事实(2),其中你有2 *从事实(1)返回的数字,从那里开始,直到它回到事实(5)的初始调用,它应返回最终值。
fact(1) = 1
fact(2) = 2 * 1 = 2
fact(3) = 3 * 2 = 6
fact(4) = 4 * 6 = 24
fact(5) = 5 * 24 = 120
然后在main()中你有一个循环,它将递归函数从num调用到0,递减。或者如果你想,你可以从0开始,然后增加到num。
for(x = num; x >= 0; --x) {
factNum = fact(x);
printf("%d! = %d\n", x, factNum);
}