『壹』 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<表達式>後面表達式的值返回給調用他的函數。舉個例子:
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語言的項目: