大一C语言课本上的这个程序不能在TC2.0上运行?
以下是课本上有关函数的递归调用的一道程序,是求n!的。运行该程序,TC没有一点反应,显示错误为LinkerError:undefinedsymbol'_nfun'inmo...
以下是课本上有关函数的递归调用的一道程序,是求n!的。运行该程序,TC没有一点反应,显示错误为Linker Error:undefined symbol'_nfun' in module xxx;
然后我对这个程序还有一点疑问递归调用n-1如果递归到n=2 n-1=1 这时不是满足条件n==0 把s赋值为1了,以前的计算不就无效了吗?我的分不多,但仍希望希望各位高手能耐心解答,小弟感激不尽!
#include<stdio.h>
long fun(int n)
{
long s;
if(n<0) {printf("illegal number!\n");s=-1;}
else if(n==0) s=1;
else s=n*fun(n-1);
return s;
}
void main()
{
long fun(int);
int n;
printf("please enter the number(n)(>=0)");
scanf("%d",&n);
printf("%d!=%ld\n",nfun(n));
} 展开
然后我对这个程序还有一点疑问递归调用n-1如果递归到n=2 n-1=1 这时不是满足条件n==0 把s赋值为1了,以前的计算不就无效了吗?我的分不多,但仍希望希望各位高手能耐心解答,小弟感激不尽!
#include<stdio.h>
long fun(int n)
{
long s;
if(n<0) {printf("illegal number!\n");s=-1;}
else if(n==0) s=1;
else s=n*fun(n-1);
return s;
}
void main()
{
long fun(int);
int n;
printf("please enter the number(n)(>=0)");
scanf("%d",&n);
printf("%d!=%ld\n",nfun(n));
} 展开
3个回答
展开全部
printf("%d!=%ld\n",nfun(n));这一行输错了吧,那个“nfun"报错,是因为你少输了一个逗号吧,正确的应该是“n,un(n)。注意是英文状态下的逗号。
我不知道你用的是哪个学校的教材。我那时学C语言的时候用的是清华大学谭浩强的教材,柑橘不错。如果你用的不是的哈,感兴趣的话可以参阅一下啊。
加油~
我不知道你用的是哪个学校的教材。我那时学C语言的时候用的是清华大学谭浩强的教材,柑橘不错。如果你用的不是的哈,感兴趣的话可以参阅一下啊。
加油~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先解决你的这个问题“如果递归到n=2 n-1=1 这时不是满足条件n==0 把s赋值为1了,以前的计算不就无效了吗?”,这里的s=1,执行到这里的s是个局部变量不会覆盖以前s的值。
“ printf("%d!=%ld\n",nfun(n));”大侠你自己看看你的函数调用,函数名你自己写的是什么?汗
以后编程时一定要仔细哟^_^
“ printf("%d!=%ld\n",nfun(n));”大侠你自己看看你的函数调用,函数名你自己写的是什么?汗
以后编程时一定要仔细哟^_^
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最后一句改为printf(%d!=%ld\n",n,fun(n));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询