标题:c语言程序不懂求解!!!!
只看楼主
yzz91
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2012-11-13
结帖率:100%
已结贴  问题点数:10 回复次数:10 
c语言程序不懂求解!!!!
#include <stdio.h>
void func ();
int a=1,j=2;
main()
{ int i=2;
  func();
  printf("a=%d,i=%d,j=%d",a,i,j);
  }
  void func()
  {
  int n,i=5;
  printf("a=%d,i=%d\n",a,--i);
  i++;
  a++;
  if(a<4)
    func();
    a--;
    j+=3;
    printf("a=%d,j=%d\n",a,j);
  }
运行结果是:a=1,i=4
           a=2,i=4
           a=3,i=4
           a=3,j=5
           a=2,j=8
           a=1,j=11
           a=1,i=2,j=11
a=2,j=8   a=1,j=11 这两个答案怎么来的??a=3,j=5后面的应该是a=1,i=2,j=11啊!!
搜索更多相关主题的帖子: void include 
2013-03-12 14:04
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:3 
递归调用了func

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-12 18:01
wyx410694500
Rank: 2
等 级:论坛游民
帖 子:7
专家分:11
注 册:2013-3-11
得分:3 
同问题。。。。。。。。。
2013-03-12 19:09
wyx410694500
Rank: 2
等 级:论坛游民
帖 子:7
专家分:11
注 册:2013-3-11
得分:0 
:a=1,i=4
 a=2,i=4
 a=3,i=4
a=3,j=5  书上说要返回到前一个函数中执行后续代码 a=2,j=8
                                               a=1,j=11
其实我也不怎么懂   求大神指教

2013-03-12 19:21
矿泉水的甜
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2013-3-11
得分:3 
回复 2楼 pauljames
输出a=3 ,j=5后就没有再调用了啊、
2013-03-12 19:54
矿泉水的甜
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2013-3-11
得分:0 
不懂,求大神解答、同问题
2013-03-12 19:55
yzz91
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2012-11-13
得分:0 
func()函数中自己调用func()函数三次:a=1时调用  func()(命名为第1个),在  func()(第1个)  中,a=2 ,所以再调用 func()(命名为第2个),在  func()(第2个)中a=3,所以再调用  func()(命名为第3个),在func()(第3个)函数中,先输出a,i,然后i++;a++  ,得到i=5,a=4,下一步不满足if语句,执行a--;j+=3;输出a=3,j=5;然后这里是重点:输出结束后返回上一个func()(第2个)函数,在这个函数中,原本运行到if语句时暂停,调用了func()(第3个),而func()(第3个)运行结束,返回func()(第2个)后接着运行a--;j+=3,所以输出a=2,j=8;然后返回func()(第1个) 函数,接着运行a--;j+=3;得到a=1,j=11,最后返回main函数。。。。
2013-03-12 19:57
yzz91
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2012-11-13
得分:0 
自己想了半天才懂的。。。
2013-03-12 20:00
矿泉水的甜
Rank: 2
等 级:论坛游民
帖 子:34
专家分:13
注 册:2013-3-11
得分:0 
回复 7楼 yzz91
还是没看懂,
  if(a<4)
    func();
    a--;
    j+=3;
    printf("a=%d,j=%d\n",a,j);
这里if不成立后、运行a--,j+=3;
输出a=3,j=5;然后又返回到哪个func()去了啊?为什么会返回呢?不是直接就完了,返回到main()函数中了吗?
2013-03-12 21:25
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
得分:0 
递归调用的时候,直接把func自己复制一份来理解就简单了,画个图,每个func函数都画出来独立,这样流程就清晰了;对着代码看,一开始很难想清楚的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2013-03-12 21:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-400534-1-1.html




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

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