當前位置:首頁 » 編程語言 » c語言funfact
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言funfact

發布時間: 2022-04-22 07:12:52

『壹』 c語言編寫函數fun..

double x,y;
double s=1,fact=1,i;
scanf("%f%f",&x,&y);
for(i=1;i<=y;i++)

第一,你的x和y是double,你卻用%f來接受而不是double對應的lf,這是導致錯誤的關鍵原因
第二,循環控制變數不要用實型,養成習慣用整形

『貳』 c語言高手進

你的程序有兩個地方錯,
首先 scanf("%f%d",&x,&n); 輸入double型數據要用%lf
其次 for(i=1;i<=n;i++){
s=s+(mypow((-1),i+1)*mypow(x,i))/fact(i);
}
這里為什麼要用循環呢,只用一次就夠了啊 你不覺得重復了嗎 改成
s=(mypow((-1),n-1)*mypow(x,n))/fact(n); 就可以了吧

『叄』 c語言遞歸求階乘

舉例:用遞歸方法求n;

#include<stdio.h>

int main()

{

int n;

int y;

printf("input a integer number:");

scanf("%d",&n);

y=fac(n);

printf("%d!=%d ",n,y);

return 0;

}

int fac(int n)

{

int f;

if(n<0)

printf("n<0,data error!");

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

f=1;

else

f=fac(n-1)*n;

return(f);

}

(3)c語言funfact擴展閱讀:

return用法:

return返回一個數值的意思就是把return&lt;表達式&gt;後面表達式的值返回給調用他的函數。舉個例子:

int sum(int i,int j)

{

return i+j;

printf("這個語句不會被執行,因為該子函數執行到上面的return語句就無條件結束了");

}

main()

{

int a=10,b=11,c;

c=sum(a,b);

printf("%d",c);

}

程序的輸出為:

21

這個21從何而來呢main函數調用sum(a,b)函數時將a的值賦給i,b的值賦給j,上面說了return i+j;會計算i+j的值也就是結果等於21,並將21帶回給調用它的函數,即c=sum(a,b);相當於c=21,這個21就是由sum(a,b)中的return反回來的。

『肆』 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來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。

『伍』 c語言問題

1.
用遞歸方法
#include <stdio.h>
long fact(int n)
{
long number;
if(n==1||n==0)
number=1;
else
number=n*fact(n-1);
return number;
}
void main()
{
int n;
scanf("%d",&n);
printf("%ld\n",fact(n));
}
不用遞歸的方法
#include <stdio.h>
long fact(int n)
{
long number=1;
while(n>0){
number=n*number;
n--;
}
return number;
}
void main()
{
int n;
scanf("%d",&n);
printf("%ld\n",fact(n));
}
2.
#include <stdio.h>
void main()
{
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++)
printf("%d*%d=%d ",j,i,i*j);
printf("\n");
}
}
3.
#include <stdio.h>
void main()
{
int max,num[10],i;
printf("請輸入十個數:");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
for(i=0;i<9;i++)
for(int j=0;j<9-i;j++)
if(num[j]>num[j+1]){
max=num[j];
num[j]=num[j+1];
num[j+1]=max;
}
for(i=0;i<10;i++)
printf("%2d",num[i]);
}
4.
#include <stdio.h>
void fun(int n)
{
int i=2,falg=0;
while(i<n){
if(n%i==0){
falg=0;
break;
}
i++;
falg=1;
}
if(falg==1)
printf("這個數是素數.\n");
else
printf("這個數不是素數.\n");

}
void main()
{
int n;
printf("請輸入一個大於2的數:");
scanf("%d",&n);
fun(n);
}

『陸』 c語言求1到n階乘的和用遞歸

1、打開vc6.0,新建一個vc項目,添加頭文件,添加一個空的main函數,這里先定義一個用來求階乘的函數,函數的參數為i,階乘就是不斷的和前面的一個數相乘,這里就是不斷和fact函數相乘,之後編寫主函數的內容:

『柒』 C語言函數遞歸調用,主函數與子函數順序

在y!=0的情況下,fun會調用自己,要等y=0後,一層層往上。就到到fun(1)的時候再會執行printf("%d",d);putchar('\n');然後會執行fun(y*2+d)後面的,printf("%d",d);putchar('\n'),然後再往上,,,直到你最初的fun(n)後面的printf("%d",d);putchar('\n')。
你可以在printf("%d",d),後面加一個printf("n
=
%d\n",
n);
可以看到如下結果
8
n
=
1
1
n
=
2
0
n
=
4
0
n
=
8
0

『捌』 C語言怎麼用遞歸法求階乘

n的階乘,就是從1開始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)!
*
n。
由這個概念,可以得出遞歸求階乘函數fact的演算法:
1
如果傳入參數為0或1,返回1;
2
對於任意的n,返回n*fact(n-1)。
代碼如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}

『玖』 C語言背包問題遞歸演算法

你學過數據結構了嗎?如果學過,那就比較好理解,該演算法的思路和求二叉樹的高度的演算法的思路是十分類似的。把取這i個物體看成i個階段,則該二叉樹有i+1層。其中空背包時為根結點,左孩子則為放棄了第1個物品後的背包,右孩子為選取了第1個物品後的背包。今後在對第i個物品進行選擇時,向左表示放棄,向右表示選取。則遞歸演算法可如下:
int fun(int s, int i, int n) //s傳入的是背包容量, i是進行第i個物品的選取,n為剩餘物品的件數
{
if(s == 0) return 有解;
else if(剩餘的每件物品都裝不進|| n == 0) return 無解;
L = fun(s, i + 1, n - 1); //放棄第i個物品,則下一步的背包容量仍為s,然後看其是否有解,(遞歸調用進入左子樹)
R = fun(s - wi, i + 1, n - 1); //選取第i個物品,則下一步的背包容量為s-wi,然後看其是否有解,(遞歸調用進入右子樹)
return (l, r); //綜合考慮左右兩邊,看哪邊是正解或都無解。其實應該返回 return (L||R);
}

『拾』 c語言怎麼用遞歸調用函數的方法求n的階乘

1、打開VC6.0軟體,新建一個C語言的項目: