汉扬编程 C语言入门 n!函数用C语言其实可以这样!

n!函数用C语言其实可以这样!

阳哥(阳哥说IT)认为:在写程序之前首先要理清求n!的思路。要求一个数n的阶乘n!也就是用n*(n-1)*(n-2)*……*2*1,那么反过来从1一直乘到n依然成立。当n为0和1的时候我们单独考虑,此时它们的阶乘均为1。

n!函数用C语言其实可以这样!

n!函数用C语言其实可以这样!

求得结成的最终结果,这里我们要给他定义为单精度或双精度类型,如果定义为整型就很容易有溢出现象。

n!函数用C语言其实可以这样!

求n!方法先来给大家看看输出的结果:

编程显示

输出结果

编程如下:

#include<stdio.h>

/*引用预处理命令,预处理包含stdio.h的头文件*/

main()

/*定义一个主函数,所有程序在执行前都开始于主函数,且结束于主函数*/

{

int i=2,n;

/*定义整型变量i和n,并赋值i的值为2*/

float fac=1;

/*定义单精度类型变量fac,并赋值为1,fac的含义是阶乘值*/

printf("please input an interger>=0.\\n");

/*输出函数:(请输入一个大于等于0的变量:),其中interger是C语言中的变量代表符而已,没有具体含义*/

scanf("%d",&n);

/*输入n值*/

if(n==0||n==1)

/*如果n为0值或者n为1值;||指的是逻辑或*/

{

printf("factorial is 1.\\n");

/*输出函数:(这个阶乘值为1.)换行*/

}

while(i<=n)

/*当i值小于等于n时*/

{

fac=fac*i;

/*将fac值与i值相乘,并赋值给fac*/

i++;

/*i值累加*/

}

printf("factorial of %d is:%.2f.\\n",n,fac);

/*输出函数:(整型的阶乘值为:);%d指的是n,指的类型即整型,%.2f指的是fac,即单精度类型,其中.2指的是保留两位小数*/

return 0;

/*返回空值,0指空,没有,即将0返回给主函数main,其目的是告诉给main函数此程序执行完了*/

}

如果大家有问题,欢迎大家留言讨论,我都会一一解答呦,欢迎关注,给你不一样的自己!

C语言 | 递归求n的阶乘

例30:C语言求n!,要求用递归实现。

解题思路:本题和例29思想差不多,都是用递归来实现,读者可以回顾一下《C语言 | 递归求年龄》

求阶乘函数:

int factorial(int number)//自定义阶乘函数 {  int temp;//定义整型变量   if(number<0)//如果这个数小于0   {    printf("错误数据请,输入大于0的数!");//不符合条件,无法求   }  else if(number==0||number==1)//0或者1本身的阶乘是1   {    temp=1;  }  else  {    temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果   }   return temp;//将temp返回到函数调用处 }源代码演示:

#include<stdio.h>//头文件 int main()//主函数 {  int factorial(int number);//自定义阶乘函数声明   int number,temp;//定义变量   printf("输入要求阶乘的数:");//提示语句   scanf("%d",&number);//键盘输入相求的数   temp=factorial(number);//调用阶乘函数   printf("%d!=%d",number,temp) ;//输出结果   return 0;//主函数返回值为0 } int factorial(int number)//自定义阶乘函数 {  int temp;//定义整型变量   if(number<0)//如果这个数小于0   {    printf("错误数据请,输入大于0的数!");//不符合条件,无法求   }  else if(number==0||number==1)//0或者1本身的阶乘是1   {    temp=1;  }  else  {    temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果   }   return temp;//将temp返回到函数调用处 }编译运行结果如下:

输入要求阶乘的数:55!=120——————————–Process exited after 1.553 seconds with return value 0请按任意键继续. . .上述代码我定义的是int类型,因为这个数不可能无限大,如果特别大,会超过int的范围,如下:

输入要求阶乘的数:100100!=0——————————–Process exited after 1.575 seconds with return value 0请按任意键继续. . .留个问题给读者请思考,最大可以求几的阶乘,为什么?

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/cjia/6501.html

知乎:大学是不是只有学计算机,软件工程等专业才叫所谓好专业?

一文读懂C语言与C++动态内存

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部