幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2852|回复: 7

[通用编程] 再问个程序得出的答案的问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-2-3 14:58:32 | 显示全部楼层 |阅读模式
程序如下:
#define LOW 0
#define HIGH 5
#define CHANGE 2
int i=LOW;
main()
{
int reset(int i);
int i=HIGH;
reset(i=i/2);
printf("i=%d\n",i);
}
reset(int i)
{
i=i<=CHANGE?HIGHOW;
return(i);
}
在这里所打印出来的i为什么会是等于2?而不是等于5呢?到底是怎么得出这答案呢?这个在TURBO C中2。5用int 值输出就等于2,那么就是等于CHANGE那i得到的值应该就是HIGH了,怎么会得出2这个答案呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-3 15:08:00 | 显示全部楼层
- -!!...没看清题,之前的说错~~

#define LOW 0
#define HIGH 5
#define CHANGE 2
int i=LOW;
main()
{
int reset(int i);
int i=HIGH;<------PS.这样这个i是局部变量i,而不是全局变量i...
i=reset(i=i/2);  <-----要这样才能接受return
printf("i=%d\\n",i);
}
reset(int i)
{
i=i<=CHANGE?HIGHOW;
return(i);
}
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-2-3 15:16:48 | 显示全部楼层
i=reset(i=i/2); <-----要这样才能接受return

这样才能接受return是什么意思呢?不是很懂 [s:6]
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-3 15:19:46 | 显示全部楼层
reset(int i)这个函数return(i)返回了i值,
相当于reset(i=i/2)计算完后,这个式子的值为5...
所以说必需要i=reset(i=i/2),这样main函数里的i才会被赋值为5...
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-3 15:20:58 | 显示全部楼层
这和你这句i=i<=CHANGE?HIGHOW;
的原理其实是一样的~~
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-2-3 15:29:40 | 显示全部楼层
你的意思是不是说因为程序中没有一个表达式使i值返回,所以那时候i只可以得到i/2的值呢?
但是如果把主函数改为这样
main()
{
int reset(int i);
int i=HIGH;
reset(i/2);
printf("i=%d\\n",i);
reset(i=i/2);
printf("i=%d\\n",i);
这样的话第一个的值是5,它这里不是得到回值吗?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-2-3 15:33:35 | 显示全部楼层
main()
{
int reset(int i);
int i=HIGH;
reset(i/2);
printf("i=%d\\n",i);<----这里是因为i=HIGHT=5
reset(i=i/2);         <----这个式子计算出来的值是5,没错,但你没有把它赋值给i
printf("i=%d\\n",i);<----这里是因为i=i/2=2

LZ没有弄清return的意思,找本书看看吧~~
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2007-2-3 18:17:49 | 显示全部楼层
其实楼主不妨先把想要的结果说出来
整个程序初看不明白是什么意思……
直到这行:
reset(i=i/2);
printf("i=%d\\n",i);
说明楼主一定觉得i在整个程序是可见的,其实在C语言中,具有形参和实参两种,i只有在作用域范围内有效,也就是说,楼主的reset函数等价于:
int reset(int k)
{
    k=k<=CHANGE?HIGHOW;
    return(k);
}
这里没有i,根本和i是没有关系的……所以i的作用域先搞清楚,楼主的问题自然就解决了……至于2的话,实际上那个reset函数就和没有执行一样,因为没有任何作用发生到i上,即实际上main中执行的操作为:

int i=HIGH;
i=i/2;
// reset(i=i/2); // 实际上函数没有任何作用!
printf("i=%d\\n",i); // 执行的是 i = HIGH / 2  i.e. i => 5/2 => 2[s:7]

PS:话说这里是BASIC研究室…… [s:8]
Style-C
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-1 16:59 , Processed in 0.028049 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表