‘壹’ 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语言的项目: