| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 596 人关注过本帖
标题:问个小问题。。
只看楼主 加入收藏
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:7 
问个小问题。。
#include<stdio.h>
void f(int n)
{
    if(n<0){
        putchar('-');
        n=-n;
    }
    if(n/10) f(n/10);
    putchar(n%10+'0');
}
main()
{
   f(-610);
}
这个程序  输入结果是-610  小弟不太懂为什么  请大虾解惑
2010-01-13 16:08
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
收藏
得分:0 
以下是引用when159357在2010-1-13 16:08:17的发言:

#include<stdio.h>
void f(int n)
{
    if(n<0){
        putchar('-');
        n=-n;
    }
    if(n/10) f(n/10);
    putchar(n%10+'0');
}
main()
{
   f(-610);
}
这个程序  输入结果是-610  小弟不太懂为什么 ...
因为你输入的值小于0所以只执行第一个if语句.
2010-01-13 18:35
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
收藏
得分:0 
回复 2楼 小J
那为什么改下putchar()里面的输出的内容  就能得到不同的输出结果  如果是只执行上面的语句  那n=-n的时候-610已经成了610了 后面那个if   n/10条件已经成立了呀
2010-01-13 21:39
ZTCK
Rank: 2
来 自:信宜
等 级:论坛游民
帖 子:20
专家分:39
注 册:2010-1-14
收藏
得分:0 
新手路过
2010-01-14 18:05
star_blue
Rank: 2
等 级:论坛游民
帖 子:1
专家分:20
注 册:2010-1-14
收藏
得分:20 
最重要的是知道程序执行的过程。
输入-610, -610<0, 输出'-', n = 610;
610/10 = 61, n = 61, 进入f(61);
61/10 = 6.1, n = 6, 进入f(6);
6/10 = 0.6, 条件不成立, 输出6%10+'0', 就是6;
f(61)输出61%10+'0', 就是1;
f(-610)输出610%10+'0', 就是0;
最后结果就是-610。


2010-01-14 22:51
dancing1wolv
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:36
专家分:78
注 册:2009-12-25
收藏
得分:0 
嗯,递归调用,五楼说的很好。可以设置断点,追踪调试,能看到每次执行时n的值(本人也是刚学的,感觉挺好的)

相信自己,每天进步一点点,C语言,you can do it 。
2010-01-15 00:07
when159357
Rank: 2
等 级:论坛游民
帖 子:50
专家分:71
注 册:2009-11-11
收藏
得分:0 
回复 5楼 star_blue
多谢多谢  我明白了~~~
2010-01-15 22:58
woshishanjim
Rank: 1
等 级:新手上路
帖 子:8
专家分:1
注 册:2009-11-16
收藏
得分:0 
  5楼的解释前面看懂点  后面没懂   慢慢学吧
2010-01-17 17:16
快速回复:问个小问题。。
数据加载中...
 
   



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

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