c语言 编程实现求n!要求用定义求阶乘的函数

不会做啊。。。谁会啊。。帮帮忙。。。谢谢了!!!!
2024-10-31 23:28:07
推荐回答(5个)
回答1:

1、打开vs2017软件,新建c语言的工程,首先开头引入头文件,然后调用先调用一下求阶乘的函数和空的主函数,最下方定义prime函数用来求阶乘:

2、主函数中用scanf函数接受用户输入的的数字,接着将输入的数传入处理阶乘的函数中完成计算,最后输出打印结果。prime函数有一个参数,首先判断是否为正数,然后用prime函数自身乘以参数s,最后返回值即可完成:

3、将程序编译运行,弹出窗口输入任意的数,计算阶乘;这里输入7,得到结果是5040。以上就是C语言求阶乘的方法:

回答2:

  #include
  long fac(unsigned n)
  {
  if (n == 0 || n == 1)
  {
  return 1;
  }
  else
  {
  return (n * fac(n - 1));
  }
  }
  int main()
  {
  unsigned ui;
  printf("输入计算的阶乘:");
  scanf("%u", &ui);
  printf("%u的阶乘为:%u\n", ui, fac(ui));
  return 0;
  
  }

注意:

 0的阶乘是1,不是0,因为阶乘表示的是全排列,是从n个中取出n个的所有的取法总数。所以当n==0或者n==1时返回1。

回答3:

本人小白,多多指教
#pragma warning(disable:4996) //vs07防报错
#include
#include
int factorial(int n) {
int i;
int resulta = 1;
for (i = 1; i <= n; i++) {
resulta *= i;
}
return resulta;
}
int sum(int n) {
int i;
int resultb = 0;
for (i = 1; i <= n; i++) {
resultb += factorial(i);
}
return resultb;
}
int main() {
int a, total;
printf("imput a integer:\n");
scanf("%d", &a);
total = sum(a);
printf("当n=%d,结果=%d", a, total);
system("pause");
return 0;
}
还可以写成:
#pragma warning(disable:4996)
#include
#include
int sum(int n) {
int i, resulta = 1, resultb = 0;
for (i = 1; i <= n; i++) {
resulta *= i;
resultb += resulta;
}
return resultb;
}
int main() {
int a, total;
printf("imput a integer:\n");
scanf("%d", &a);
total = sum(a);
printf("当n=%d,结果=%d", a, total);
system("pause");
return 0;
}
写了两个自定义函数: factorial()用来计算阶乘,sum()用来计算累加值。
factorial()
第一部分:
n!=1x2x3...xN。设resulta=1x2x3....xN。用i表示第几次计算。
数学计算的详细步骤:
当i=1时, 1x1=1 第1次计算
当i=2时, 1x2=2 第2次计算
当i=3时, 2x3=6 第3次计算
当i=4时, 6x4=24 第4次计算
当i=n-1时 Ax(n-1)=B 第n-1次计算
当i=n时, Bxn=C 第n次计算
第二部分:
在c语言中乘法计算例如:int a=1;a=a*2意思是将a的原来的值(旧值)1x2将结果(新值)赋值给a,
a的值变为2.再进行a=a*3意思就是将a原来的值2x3将结果(新值)再次赋值给a,a的值变为6.
上面可以看出:(resulta简写为a)
i=1时,(a的旧值)1xi=(a的新值)1 。第1轮结束,a的值从旧值1变成了新值1.
(第一轮中a的新值1相对在第二轮中,看做是a的旧值,依次类推)
i=2时,(a的旧值)1xi=(a的新值)2。 第2轮结束,a的值从旧值1变成了新值2.
i=3时,(a的旧值)2xi=(a的新值)6。 第3轮结束,a的值从旧值2变成了新值6.
i=4时,(a的旧值)6xi=(a的新值)24。第4轮结束,a的值从旧值6变成了新值24.
i=n时,(a的旧值)Bxi= (a的新值)B。 第n轮结束,a的值从旧值$变成了新值$(这个新值就是最终值).
第三部分:上面可以看出:
计算a的最终值:进行了n轮,循环计算:a的旧值xi=a的新值。
将a的旧值xi=a的新值,写成代码的形式:resulta=resulta*i;即resulta*=a;
从第二部分还能看出:i的初值是i=1;i的范围是i<=n;i的变化是每次自身+1即i++;循环计算->for语句。
resulta初值是1.
int i,resulta=1;
for(i=1;i<=n;i++){
resulta*=i;
}
sum()
第一部分:
从1!+2!+3!....+n!可以看出一共有n个阶乘。设resultb=1!+2!+3!....+n!(resultb简写b)
当n=1,只有1!,0+1!=1 只有1次计算 。当n=2时有1!,2!,先计算0+1!=1再1+2!=3,有两次计算。
当n=3,有1!,2!,3!。先算0+1!=1再1+2!=3再3+3!=9,有3次计算,依次类推
当n=n,有1!,2!.....n!。会有n次计算。用i表示第几次计算。
换种写法:
当i=1时,第一次计算 0+1!值=0+1=1
当i=2时,第二次计算 1+2!值=1+2=3
当i=3时,第三次计算 3+3!值=3+6=9
当i=4时,第四次计算 9+4!值=9+24=33
当i=n-1时第n-1次计算 E+(n-1)!值=A
当i=n时,第n 次计算 A+n!值=A+B=resultb
根据c中加法的意思:
i=1, b旧+ factorial(1)=b新 调用factorial()
i=2, b旧+ factorial(2)=b新
i=n, b旧+ factorial(i)=b新
第二部分:
写成代码:resultb=resultb+ factorial(i),
1的初值i=1;i的范围i<=n;i每次自身加一i++;循环计算->for语句。
int i,resultb=0;
for(i=1;i<=n;i++){
resultb+= factorial(i)

回答4:

long fact(long n)
{
if (n == 0 | n == 1)
return 1;
else
{
return (n * fact(n - 1));
}
}
void Main()
{
int a;
printf("输入计算的阶乘:");
scanf("%u", &a);
printf("%u的阶乘为%u", a, fact(a));
}

回答5:

#include
#include
using namespace std;
int main(){
int n,s=1;
cin>>n;
for(int i=1;i<=n;i++){
s=i*s;
}cout<return 0;
}