| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:《算法:C语言实现(第 1-4 部分)》中的递归程序 5.4 中,变量 i 的值不能改 ...
只看楼主 加入收藏
frankljm
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2014-3-25
结帖率:0
收藏
已结贴  问题点数:1 回复次数:9 
《算法:C语言实现(第 1-4 部分)》中的递归程序 5.4 中,变量 i 的值不能改变,请高手指点。
从《算法:C语言实现(第1-4部分)》中的讲递归部分程序5.4有如下一段代码,
问题是:变量i的值一直是​5,即使如下面程序中赋值 i=0;结果i的值还是5,。
试过将eval()函数的内容设为空,则i可正常赋值。 所以i的值不变肯定是和递归函数eval()
有关,但实在不明白是什么原因,而且从语法上也讲不通,变量i赋值竟然不起作用,请放高手解答。​

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
struct node {int item; link next;};
char a[]="*+345";
int i;
int main(int argc, char* argv[])
{
   int eval();
    i=0;
   printf("%d\n",eval());
   return 0;
}

int eval()
{
int x=0;
while(a[i]==' ') i++;
if(a[i]=='+')
{i++;return eval()+eval();}
if(a[i]=='*')
{i++;return eval()*eval();}
while((a[i]>='0') && (a[i]<='9'))
x=10*x+(a[i++]-'0');
return x;
 }
搜索更多相关主题的帖子: include C语言 而且 
2014-04-29 20:35
frankljm
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2014-3-25
收藏
得分:0 
补充,i的值5刚好是字符串"*+345"的长度,我修改字符串有,i的值也相应改变。很费解。
2014-04-29 20:43
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:1 
while(a[i]==' ') i++;
这句是个啥意思?

总有那身价贱的人给作业贴回复完整的代码
2014-04-29 20:51
frankljm
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2014-3-25
收藏
得分:0 
while(a[i]==' ') i++;
意思是,如果a[i]中内容是空格,则跳过,所以i++; i++后面跟分号,是一个合法的语句。
2014-04-30 14:26
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
那你的a[]里面有空格吗?while循环完i会等于几?

总有那身价贱的人给作业贴回复完整的代码
2014-04-30 18:31
frankljm
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2014-3-25
收藏
得分:0 
应该是你帮忙答复问题啊,怎么你到向我提问起来,你的问题和我要解决的问题一点关系也没有啊。
2014-04-30 19:14
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 6 楼 frankljm
不好意思,看错了

总有那身价贱的人给作业贴回复完整的代码
2014-04-30 19:35
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 6 楼 frankljm
你把char a[]="*+345";改成
char a[]="*+3,4,5";再试试

总有那身价贱的人给作业贴回复完整的代码
2014-04-30 19:39
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:1 
回复 6 楼 frankljm
围观

未知令人期待!
2014-04-30 21:45
frankljm
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2014-3-25
收藏
得分:0 
不好意思,调试环境出现问题,本问题不存在。虽然啼笑皆非,但总算找到原因。
下面是刷新的原始代码,运行后输出结果是采用后缀算式计算 5*((9+8)*(4*6)+7,结果是2075.

#include "stdafx.h"

#include <stdio.h>  
#include <stdlib.h>  
typedef struct node *link;  
struct node {int item; link next;};  
char a[]="*+7 **4 6+8 9 5";
int i=0;  
int main(int argc, char* argv[])  
{  
   int eval();  
   printf("%d\n",eval());  
   return 0;  
}  


int eval()  
{  
int x=0;  
while(a[i]==' ') i++;  
if(a[i]=='+')  
{i++;return eval()+eval();}  
if(a[i]=='*')  
{i++;return eval()*eval();}  
while((a[i]>='0') && (a[i]<='9'))  
x=10*x+(a[i++]-'0');  
return x;  
 }
2014-04-30 23:53
快速回复:《算法:C语言实现(第 1-4 部分)》中的递归程序 5.4 中,变量 i 的值不 ...
数据加载中...
 
   



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

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