當前位置:首頁 » 編程語言 » c語言中自定義函數求階乘
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中自定義函數求階乘

發布時間: 2022-04-28 13:22:10

A. c語言 編程實現求n!要求用定義求階乘的函數

1、打開vs2017軟體,新建c語言的工程,首先開頭引入頭文件,然後調用先調用一下求階乘的函數和空的主函數,最下方定義prime函數用來求階乘:

B. c語言求階乘的函數

階乘:
階乘是基斯頓·卡曼(Christian
Kramp,1760~1826)於
1808
年發明的運算符號,是數學術語。
一個正整數的階乘(英語:factorial)是所有小於及等於該數的正整數的積,並且有0的階乘為1。自然數n的階乘寫作n!。1808年,基斯頓·卡曼引進這個表示法。
亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。

C語言

C
語言中,使用循環語句可以很方便的求出階乘的值,下面介紹一個很簡單的階乘例子。(因為網上多數是比較麻煩的方法)
【計算出「
1!+
2!+
3!+
……
+
10!」的值是多少?】
#include<stdio.h>
int
main()
{
int
x;
long
j=1,sum=0;
for(x=1;x<=10;x++)
{
j*=x;
sum+=j;
}
printf("1!+2!+...+10!=%ld\n",sum);
return
0;
}

/*結果:4037913*/
Pascal中program
test;
varn:longint;
function
jc(n:longint):qword;
begin
if
n=0
then
jc:=1
else
jc:=n*jc(n-1)end;
begin
readln
(n);
writeln
(jc(n))end.
C++

#include<iostream>
using
namespace
std;
long
long
f(int
n)
{
long
long
e=1;
if(n>0)
e=n*f(n-1);
cout<<n<<"!="<<e<<endl;
return
e;
}
int
main()
{
int
m=20;
f(m);
return
0;
}

以上使用
C++
11
標准
也可以利用積分求浮點數階乘:
#include<cstdio>
#include<cmath>
double
s;
const
double
e=exp(1.0);
double
F(double
t)
{
return
pow(t,s)*pow(e,-t);
}
double
simpson(double
a,double
b)
{
double
c=a+(b-a)/2;
return
(F(a)+4*F(c)+F(b))*(b-a)/6;
}
double
asr(double
a,double
b,double
eps,double
A)
{
double
c=a+(b-a)/2;
double
L=simpson(a,c),R=simpson(c,b);
if(fabs(L+R-A)<=15*eps)
return
L+R+(L+R-A)/15.0;
return
asr(a,c,eps/2,L)+asr(c,b,eps/2,R);
}
double
asr(double
a,double
b,double
eps)
{
return
asr(a,b,eps,simpson(a,b));
}
int
main()
{
scanf("%lf",&s);
printf("%lf\n",asr(0,1e2,1e-10));
return
0;
}

C. c語言求階乘函數

#include <stdio.h>
main()
{
long n,sum=1;//10 以上的階乘就比較大了
int i;
printf("請輸入你要求的階乘:")
scanf("%d",&n);//先輸入要求的數
for(i=n;i>0;i--)//乘到1為止
{
sum*=i;
}
printf("%d != %d",n,sum);
return 0;
}

D. C語言中如何編程計算階乘

常見的有兩種:

遞歸版本:

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

還有一種是循環版:

intans=1;
for(inti=1;i<=n;i++)ans*=i;

測試方法:

#include<stdio.h>

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}

有個值得注意的地方:階乘時,數增大的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。

E. C語言,用函數求階乘

首先你的p沒有初始值1,且是int型,所以返回的並不是long型,scanf裡面不能加

#include<stdio.h>
longfact(intn)
{
inti;longp=1;
if(n>0)//這里添加判斷以免出現小於1的現象
for(i=1;i<=n;i++)
p=p*i;
else printf("程序出錯!k必須大於r!");
returnp;
}

intmain()
{
intk,r;
printf("輸入k,r: ");
scanf("%d%d",&k,&r);
printf("r=%d,k=%d",k,r);
doubles;
s=fact(k)/(fact(r)*fact(k-r));//若k-r<1,會出錯
printf(" C(%d,%d)=%lf ",k,r,s);
}

F. c語言編程 用函數的形式算階乘

我這個程序是按照你後面問上面那位同志的那個問題接著的啊。也就是你所寫的那個程序:這個順序沒有什麼講究,可以在前可以在後。你程序存在幾種錯誤:
1,
函數類型。
由於是你那得到的是一個雙精度,所以Fact函數要定義成double
型,
不然
結果會錯誤,因為
兩個int類型的值運算的值只能是int
比如
5 /4
結果就是1
了,而不是1.25
2.在那個自定義的函數里你的s沒有定義,
要定義下啊。 我把完整的寫下,你自己看吧。 #include<stdio.h>
double
Fact(int
n);main()
{

double
s;
int
a,b,c;scanf("%d
%d
%d",&a,&b,&c);

s=Fact(a)/(Fact(b)+Fact(c));

printf("%f",s);
}
double
Fact(int
n)
{

int
i;
double
s;

if(n==0)

return
1;
for(i=1;i<=n;i++)
s*=i;
return
s;
}

G. C語言設計一個函數求階乘

1
設計階乘函數。
按照數學定義,對於n的階乘,如果n為0,則返回1.
否則返回1*2*3*...*n的值。用循環實現。
2
在主函數中輸入要求階乘的值。
3
調用函數計算階乘。
4
輸出結果。
代碼:
int fac(int n)
{
int r = 1;
int i;
for(i = 2; i <=n; i ++)
r*=i;
return r;
}
int main()
{
int n,r;
scanf("%d",&n);
r = fac(n);
printf("%d!=%d\n",n,r);
}

H. 用函數求階乘的C語言

fun(inti)
{
intj;
intsum=0;
for(j=1;j<=i;j++)
{
sum=sum+j*j;
}
printf("s%d=%d ",j,sum);
returnsum;
}

//上面的代碼是求平方和
//求階乘可以這樣:
intfun(inti)//返回類型不可少
{
intj;
intsum=1;//從1開始
for(j=1;j<=i;j++)
{
sum=sum*j;
}
printf("s%d=%d ",j,sum);
returnsum;
}

//主函數中是求階乘的和

I. c語言,輸入n,用函數求n的階乘

下構思下程序的基礎, 讓用戶自定義輸入一個數作為階乘數, 當超過20時,輸出「Nis too big」. 需要用到IF函數,以下為詳細過程。 #include<iostream> us

int getFactorial(int data) //求階乘;

{

int resData=1;

for (int i=0;i<data;i++)

{

resData*=i;

}

return resData;

}

(9)c語言中自定義函數求階乘擴展閱讀:

0!=1。

定義的必要性

由於正整數的階乘是一種連乘運算,而0與任何實數相乘的結果都是0。所以用正整數階乘的定義是無法推廣或推導出0!=1的。即在連乘意義下無法解釋「0!=1」。

給「0!」下定義只是為了相關公式的表述及運算更方便。