c中的阶乘程序
Factorial program in c
正在尝试编写一个代码来获取输入数字的阶乘。
int factorial(int number, int i)
{
int endval;
for(i = number - 1; i>0; i--){
endval = number * i;
}
if (endval == 0){
printf("1");
}
return endval;
}
int main()
{
int endvalue, numA, numB;
char userchoice[1];
printf("Enter a choice to make (f for factorial): \n");
scanf("%s", userchoice);
if(strcmp(userchoice, "f")== 0){
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA, numB);
printf("%d", endvalue);
return 0;}
getch();
return 0;
}
出于某种原因,当我设置答案 (number*i)= endval
时,整个 for 循环在函数中没有执行任何操作。它只是打印出我输入的相同数字,并给了我一个荒谬的答案0!
。
int factorial(int number, int i)
{
int endval;
for(i = number - 1; i>0; i--){
endval = number * i;
}
if (endval == 0){
printf("1");
}
return endval;
}
然而,当我完全删除 endval
变量时代码工作得很好(除了它得到 0!= 10)
int factorial(int number, int i)
{
for(i = number - 1; i>0; i--){
number = number * i;
}
if (number == 0) {printf("1");}
return number;
}
代码中是否遗漏了导致这些错误的任何内容?
可能需要更正的地方很少。请参阅附件代码。
int factorial(int number)
{
if (number == 0){ return 1; }
int endval=1, i;
for(i = 1; i<=number; i++) { endval *= i; }
return endval;
}
int main() {
int endvalue, numA;
char userchoice[1];
printf("Enter a choice to make (f for factorial): \n");
scanf("%s", userchoice);
if(strcmp(userchoice, "f")== 0) {
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA);
printf("%d", endvalue);
return 0;
}
getch();
return 0;
}
#include <stdio.h>
#include <string.h>
int factorial(int number)
{
int endval=1;
for(int i = number ; i>0; i--){
endval *= i;
}
return endval;
}
int main()
{
int endvalue=0;
int numA=0;
char userchoice[1];
printf("Enter a choice to make (f for factorial): ");
int ret=scanf("%s", userchoice);
if (!ret){
printf("Error in scanf: %d", ret);
}
if(strcmp(userchoice, "f")== 0){
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA);
printf("%d", endvalue);
return 0;
}
getchar();
return 0;
}
稍作修改的代码将有效
factorial()
函数只能获取一个参数。
- 作为一个好习惯,所有变量都必须初始化。
- 将 include 语句添加到源代码中并明确表示不依赖编译器。
当我们使用
strcmp()
时,我们必须包括 string.h
- 使用标准
getchar()
而不是 getch()
- 也可以检查return库函数
scanf()
的值,以确保读取正确。
- 您可以使用编译器的警告来获取上述大部分注释。在 gcc 中:
gcc -Wall code.c
- 使用调试器 运行 逐行编程并监控每个步骤中的变量值,或者使用尽可能多的
printf()
查看函数调用中发生的情况。
阶乘的定义是:
阶乘(0) = 1
阶乘(n) = n * 阶乘(n-1)
注意:阶乘仅对数字 >= 0
合法
在 C 中,这个定义是:
int factorial(int number)
{
if (number < 0)
return -1;
if (number == 0)
return (1);
/*else*/
return (number * factorial(number-1));
}
正在尝试编写一个代码来获取输入数字的阶乘。
int factorial(int number, int i)
{
int endval;
for(i = number - 1; i>0; i--){
endval = number * i;
}
if (endval == 0){
printf("1");
}
return endval;
}
int main()
{
int endvalue, numA, numB;
char userchoice[1];
printf("Enter a choice to make (f for factorial): \n");
scanf("%s", userchoice);
if(strcmp(userchoice, "f")== 0){
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA, numB);
printf("%d", endvalue);
return 0;}
getch();
return 0;
}
出于某种原因,当我设置答案 (number*i)= endval
时,整个 for 循环在函数中没有执行任何操作。它只是打印出我输入的相同数字,并给了我一个荒谬的答案0!
。
int factorial(int number, int i)
{
int endval;
for(i = number - 1; i>0; i--){
endval = number * i;
}
if (endval == 0){
printf("1");
}
return endval;
}
然而,当我完全删除 endval
变量时代码工作得很好(除了它得到 0!= 10)
int factorial(int number, int i)
{
for(i = number - 1; i>0; i--){
number = number * i;
}
if (number == 0) {printf("1");}
return number;
}
代码中是否遗漏了导致这些错误的任何内容?
可能需要更正的地方很少。请参阅附件代码。
int factorial(int number)
{
if (number == 0){ return 1; }
int endval=1, i;
for(i = 1; i<=number; i++) { endval *= i; }
return endval;
}
int main() {
int endvalue, numA;
char userchoice[1];
printf("Enter a choice to make (f for factorial): \n");
scanf("%s", userchoice);
if(strcmp(userchoice, "f")== 0) {
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA);
printf("%d", endvalue);
return 0;
}
getch();
return 0;
}
#include <stdio.h>
#include <string.h>
int factorial(int number)
{
int endval=1;
for(int i = number ; i>0; i--){
endval *= i;
}
return endval;
}
int main()
{
int endvalue=0;
int numA=0;
char userchoice[1];
printf("Enter a choice to make (f for factorial): ");
int ret=scanf("%s", userchoice);
if (!ret){
printf("Error in scanf: %d", ret);
}
if(strcmp(userchoice, "f")== 0){
printf("Enter a value to get it's factorial: ");
scanf("%d", &numA);
endvalue = factorial(numA);
printf("%d", endvalue);
return 0;
}
getchar();
return 0;
}
稍作修改的代码将有效
factorial()
函数只能获取一个参数。- 作为一个好习惯,所有变量都必须初始化。
- 将 include 语句添加到源代码中并明确表示不依赖编译器。
当我们使用
strcmp()
时,我们必须包括string.h
- 使用标准
getchar()
而不是getch()
- 也可以检查return库函数
scanf()
的值,以确保读取正确。 - 您可以使用编译器的警告来获取上述大部分注释。在 gcc 中:
gcc -Wall code.c
- 使用调试器 运行 逐行编程并监控每个步骤中的变量值,或者使用尽可能多的
printf()
查看函数调用中发生的情况。
阶乘的定义是:
阶乘(0) = 1
阶乘(n) = n * 阶乘(n-1)
注意:阶乘仅对数字 >= 0
在 C 中,这个定义是:
int factorial(int number)
{
if (number < 0)
return -1;
if (number == 0)
return (1);
/*else*/
return (number * factorial(number-1));
}