这是我写的 错哪了 老说 not a function 什么意思?

用递归调用方法实现如下任务:给你大于0的整数n,求出sum(n)=1+2+…+n=?要求:(1)编写求和的递归函数;(2)在主函数中,从键盘输入n的值,调用递归函数,并且... 用递归调用方法实现如下任务:给你大于0的整数n,求出sum(n)=1+2+…+n=?
要求:
(1)编写求和的递归函数;
(2)在主函数中,从键盘输入n的值,调用递归函数,并且输出sum(n)的值,请用“sum(%d)=%d”的格式输出,其中第一个%d是n的具体取值,第二个%d是求和的值。
#include <stdio.h>
void main()
{
int total(int n);
int y,n;

printf("请输入一个正整数:\n");
scanf("%d",&n);
y=total(n);
printf("%5d\n",n,y);

}
int total(int n)
{
int y;
scanf("5d%",&n);

if (n < 0)

printf("请输入正数\n");

if(n==1)
y=1;
printf("%5d",y);
if(n>1)
y= n + y( n - 1 );

printf("%5d",y);
}
展开
 我来答
吃吃忘记了
2011-05-15 · TA获得超过163个赞
知道答主
回答量:40
采纳率:0%
帮助的人:31.8万
展开全部
呵呵 我用VC++ 6.0调试了半天,就由我回答你吧。
首先,它说“y ,not a function ”的意思就是 “y不是函数”。那当然了,y是你定义的整形变量,怎么是函数呢? 所以,你把 “y= n + y( n - 1 );”这一句改成“ y= n + total( n - 1 );”就对了。因为total才是你定义的函数啊!

当我找到这个错误时,我想程序一定对了。但是我又运行的时候,才发现了好多不规范甚至错误的地方。比如说:有的子函数应该有一个返回值。而这个total函数是必须有一个返回值了。所以,total函数的结尾应该加一句“return y”。

还有,你的if语句用的不规范。正确的应该是: if (n < 0) else if (n==1) else if(n>1)

还有,if(n==1) y=1; printf("%5d",y); 这三句中的printf语句完全是多余的,最后那个return 语句,就能实现这一功能。

还有,楼主犯了一个很马虎的错误,我说结果怎么老是少一个数呢。原来,楼主写的主函数里面,printf("%5d\n",n,y); 这一句,,你少写了一个%d 啊!晕死~~~

正确的、又没有警告的程序如下:

#include <stdio.h>
void main()
{
int total(int n);
int y,n;

printf("请输入一个正整数:\n");
scanf("%d",&n);
y=total(n);
printf("%5d,%5d\n",n,y);

}

int total(int n)
{
int y;

scanf("d%",&n);

if (n < 0)
printf("请输入正数\n");

else if(n==1)
y=1;

else if (n>1)
y= n + total( n - 1 );

return y;
}

感觉楼主的子函数学的不好,还有一些基础知识不扎实(比如说if语句)。希望楼主多多练习基本功,就从写简单的程序开始。。多用用调用子函数的知识。 呵呵~~
路图元
2011-05-15 · TA获得超过255个赞
知道小有建树答主
回答量:368
采纳率:0%
帮助的人:274万
展开全部
两种解决办法:
1、把整个total函数的定义放在voidmain前面
2、在voidmain前对total进行声明
追问
我用你说的第一种 还是不对啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雷晓520
2011-05-15 · 超过14用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:46.1万
展开全部
#include<stdio.h>

int main()
{
int function(int n);
int n;
scanf("%d",&n);
printf("sum(%d)=%d\n",n,function(n));
}
int function(int n)
{
int sum;
if(n==1)
sum=1;
else
sum=n+function(n-1);
return sum;
} //函数传递时不用在读N的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
带泪的紫藤花
2011-05-15 · TA获得超过2665个赞
知道小有建树答主
回答量:486
采纳率:100%
帮助的人:203万
展开全部
#include <stdio.h>
void main()
{
int total(int n);
int y,n;

printf("请输入一个正整数:\n");
scanf("%d",&n);
y=total(n);
printf("%5d,%5d\n",n,y); //<-here one mistake

}
int total(int n)
{
int y;
if(n==1)
y=1;
if(n>1)
y= n + y( n - 1 );
return y;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式