| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2244 人关注过本帖
标题:一个简单程序,倒序输出数列,程序已编完,但是为什么倒序输出多了个0,请各 ...
只看楼主 加入收藏
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
结帖率:82.93%
收藏
已结贴  问题点数:5 回复次数:10 
一个简单程序,倒序输出数列,程序已编完,但是为什么倒序输出多了个0,请各位不吝赐教!
#include<stdio.h>
int fac(int a)
{
    int n,z;
    z=a%10;
    printf("%d",z);
    if(a/10)
    n=fac(a/10);

}
int main()
{
    int x,m;
    printf("输入一个数字\n");
    scanf("%d",&x);
    m=fac(x);

    printf("%d",m);
    return 0;
   
}
搜索更多相关主题的帖子: return 
2013-03-25 17:31
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
int main()
{
    int x,m;
    printf("输入一个数字\n");
    scanf("%d",&x);
    m=fac(x);        //不需要,删除,因为你的fac函数没有返回值,只起到打印作用

    printf("%d",m);   //删除!
    return 0;
   
}



 n=fac(a/10);  //也不需要,同上m理,不过加上也无所谓就是

[ 本帖最后由 韶志 于 2013-3-25 17:45 编辑 ]

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 17:41
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
这破代码,你递归函数没有返回值

总有那身价贱的人给作业贴回复完整的代码
2013-03-25 17:41
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 3楼 embed_xuel
改成这样,还是在后面会出现一系列乱码。虽然起到倒序的目的
#include<stdio.h>
int fac(int a)
{
    int n,z;
    z=a%10;
    printf("%d",z);
    if(a/10)
    n=fac(a/10);
    return n;

}
void main()
{
    int x,m;
    printf("输入一个数字\n");
    scanf("%d",&x);
    m=fac(x);

    printf("%d",m);
    printf("\n");

   
}
2013-03-25 17:43
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 2楼 韶志
这个0是怎么多出来的?非常困惑啊
2013-03-25 17:46
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 4楼 abc594986308
按照我的几个删除后就可以啦,不需要返回也行的

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 17:46
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 6楼 韶志
有几点不明白,那些地方怎样可以保留下来,又可以实现倒序输出,而不出现多余代码?请指教。谢谢
2013-03-25 17:49
abc594986308
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:116
注 册:2013-3-18
收藏
得分:0 
回复 2楼 韶志
按照你的帖子内容,我改了下。
#include<stdio.h>
void fac(int a)
{
    int n,z;
    z=a%10;
    printf("%d",z);
    if(a/10)
    fac(a/10);
   

}
void main()
{
    int x;
    printf("输入一个数字\n");
    scanf("%d",&x);
    fac(x);

   
    printf("\n");

   
}
这样的确简便多了。
2013-03-25 17:51
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 5楼 abc594986308
因为你的这两条语句
m=fac(x);

    printf("%d",m);

fac没有返回值,而你把fac(x)赋值给m,系统就会默认返回给m一个0 ,然后不久由你的输出语句输出了么。。
不信就删除的你 printf("%d",m);  其它不变,然后调试一下试试

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 17:53
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
回复 7楼 abc594986308
main函数里的内容咱就不说了,它输入一个数字后,其它的工作(包括打印)都交给 你的递归函数处理了
void fac(int a)
{
    int n,z; //不要了
    z=a%10;   //求输入数的个位数
    printf("%d",z);
    if(a/10)  //判断,如果a已经是个位数,就不需要再往下递归了,也就是所谓的到了边界了
    fac(a/10);//判断,如果a不是个位数,就需要继续往下递归了,注意这条语句过后,a的值变了,a=a/10,这也是递归函数的特点
}
举个例子:输入123
1、z=123%10=3,  输出3,  a/10!=0所以继续   a=a/10=12
2、z=2,             2,   。。。。。。。。  a=a/10=1
3、z=1%10=1,        1,   1/10==0,递归结束



懂了吗

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 18:04
快速回复:一个简单程序,倒序输出数列,程序已编完,但是为什么倒序输出多了个0 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027039 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved