| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1707 人关注过本帖, 1 人收藏
标题:请教两道谭浩强书中习题
只看楼主 加入收藏
vivianna
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-5-15
收藏(1)
 问题点数:0 回复次数:8 
请教两道谭浩强书中习题

1。以下程序的运行结果是?

int X1=30, X2=40;

main()

{int X3=10,X4=20;

sub(X3,X4);

sub(X2,X1);

printf("%d,%d,%d,%d\n",X3,X4,X1,X2 );

}

sub(intX,intY)

{

X1=X;

X=Y;

Y=X1;

}

答案是:10 20 40 40

我实在想不通,(难道是答案错了吗?)请会做者指点一下。

2。以下程序的运行结果是?

int i=0;

main()

{int i=5;

reset(i/2); printf("i=%d\n",i);

reset(i=i/2); printf("i=%d\n",i);

reset(i/2); printf("i=%d\n",i);

workover(i); printf("i=%d\n",i);

}

workover(int i)

{ i=(i%i)*((i*i)/(2*i)+4);

printf("i=%d\n",i);

return(i);

}

reset( int i)

{i=i<=2?5:0;

return(i);

}

答案是:

i=5

i=2

i=2

i=0

i=2

第二个i和第三个i为何为2呢?解释一下好吗?

搜索更多相关主题的帖子: 谭浩强 习题 int sub main 
2004-05-18 08:28
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

答案是没有错的

建议你在去翻翻全局变量这一部分,这些题目都很简单自己完全可以弄明白的

而且效果要比我们告诉你来的好

特别是第二题你要明白函数里修改的是全局变量还是其他什么??

以及到底是什么在影响程序的输出???


偶是一只想要飞却忘了咋飞的菜鸟
2004-05-18 12:34
vivianna
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-5-15
收藏
得分:0 
也许你明白,但对于一个新手来说,实在是有难度的,我要是自已能看懂的话就不用辛辛苦苦打出来了,我才是想飞却忘了咋飞的菜鸟啊!!郁闷!!

2004-05-18 16:42
hu_sir
Rank: 1
等 级:新手上路
帖 子:208
专家分:0
注 册:2004-4-29
收藏
得分:0 

1。以下程序的运行结果分析:

int X1=30, X2=40; //全局变量!

main()

{int X3=10,X4=20; //局部变量!

sub(X3,X4); //局部变量传递的是形参,不改变其直,调用完后还是X3=10,X4=20;

sub(X2,X1); //全局变量在全局范围内有效!调用时,先是X1=40;再是X2=40;再是X1=40;

printf("%d,%d,%d,%d\n",X3,X4,X1,X2 );

}

sub(intX,intY)

{

X1=X;

X=Y;

Y=X1;

}

所以答案是:10 20 40 40

2004-05-18 20:46
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

/****2*****/

int i=0;

main()

{int i=5;

reset(i/2); printf("i=%d\n",i);

reset(i=i/2); printf("i=%d\n",i);

reset(i/2); printf("i=%d\n",i);/*这三个函数如楼上所说的那样不改变其值,但是要注意

第二个i=i/2这是赋值语句,在这里输出的都是main里的局部

变量i分别是i=5,i=2,i=2*/

workover(i);

rintf("i=%d\n",i); //这句输出也一样i=2

}

workover(int i)

{ i=(i%i)*((i*i)/(2*i)+4);

printf("i=%d\n",i); /*这里输出的是workover(int i)里的局部变量i,在本程序里

他的行参是2,实际上不管行是多少他的输出都是0*/

return(i);

}

reset( int i)

{i=i<=2?5:0;

return(i);

}

//说的有些混乱,如果还看不明白,那你就把两个函数变量名改改就会明白的

[此贴子已经被作者于2004-05-18 23:07:11编辑过]


偶是一只想要飞却忘了咋飞的菜鸟
2004-05-18 23:05
vivianna
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2004-5-15
收藏
得分:0 
非常感谢你,我看懂了,你写得通俗易懂,想不理解都难啊!!书上一个知识点说上一大篇,它说到重要处,我可能都错过了,所以看几遍也看不到精华,其实它考的就是一个知识点:局部变量调用后不改变其值。这题目出的啊。。。。哎,真不知说什么好。

2004-05-19 23:01
starcat
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2004-6-3
收藏
得分:0 

sub(X2,X1); //全局变量在全局范围内有效!调用时,先是X1=40;再是X2=40;再是X1=40

为什么调用先是x1是40

我是菜菜鸟请指教

2004-06-04 13:39
jianenghui
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2004-6-6
收藏
得分:0 

第1题主要因为被调用函数没有给主函数以返回值,则X2,X3,X4值不变,.而X1 作为全局变量,在sub函数里x1变为了40,相应的在主函数里值也应为40.

2004-06-06 12:20
梅可伟梅可伟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:69
专家分:180
注 册:2013-3-11
收藏
得分:0 
谢谢楼上的哈,路过学习
2013-03-16 18:53
快速回复:请教两道谭浩强书中习题
数据加载中...
 
   



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

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