免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1693 | 回复: 10
打印 上一主题 下一主题

这段程序结果? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-16 11:14 |只看该作者 |倒序浏览

  1. int x, y, z, w;

  2.         z=(x=-1)?(y=-1, y+=x+5):(x=7,y=3);

  3.         printf("z=%d, x=%d, y=%d, w=%d\n", z, x, y, w);
复制代码

看看是什么? 我不知道z为什么会是3?

论坛徽章:
0
2 [报告]
发表于 2004-04-16 12:28 |只看该作者

这段程序结果?

x的初值你都不知道是多少?怎么能下定义说z等于几呢?

论坛徽章:
0
3 [报告]
发表于 2004-04-16 12:33 |只看该作者

这段程序结果?

你自己运行就知道了

论坛徽章:
0
4 [报告]
发表于 2004-04-16 12:39 |只看该作者

这段程序结果?

你的代码可以翻译为

  1.     if (x=-1)
  2.    {
  3.        y=-1;
  4.        y=y+x+5;
  5.        z= y;
  6.    }
  7.    else
  8.   {
  9.       x=7;
  10.       y=3;
  11.       z=y;
  12.   }
复制代码

因为x=-1不是个布尔表达时,但它的执行结果为true,所以z=-1-1+5=3。

论坛徽章:
0
5 [报告]
发表于 2004-04-16 12:43 |只看该作者

这段程序结果?

最近忙得眼睛都花了,看错了是x=-1。

如果是x被复制为-1的话那当然是执行y=-1, y+=x+5

论坛徽章:
0
6 [报告]
发表于 2004-04-16 12:52 |只看该作者

这段程序结果?

x=-1是不是写得有误呀,怀疑中。应该是x==-1,否则不会进入else代码块。

编程逻辑错误,也是C太灵活了。

论坛徽章:
0
7 [报告]
发表于 2004-04-16 12:52 |只看该作者

这段程序结果?

哦, 明白了, 谢谢 ,我还以为z=(x=-1)这里z=x了

论坛徽章:
0
8 [报告]
发表于 2004-04-16 13:08 |只看该作者

这段程序结果?

三目运算符虽然简练,但容易出错且结构不清晰,最好不要用。

论坛徽章:
0
9 [报告]
发表于 2004-04-16 22:00 |只看该作者

这段程序结果?

原帖由 "gbunix" 发表:

x=-1是不是写得有误呀,怀疑中。应该是x==-1,否则不会进入else代码块。

这种写法没有错误的。这明显是一道练习题之类的,本就是通过一些陷阱考查程序员对c语言的理解,并不要求程序流程合乎逻辑。
你前面的翻译如果细化一下对于初学者就更好理解了。

  1.    x=-1;
  2.    if (x!=0)
  3.    {
  4.        y=-1;
  5.        y=y+x+5;
  6.        z= y;
  7.    }
  8.    else
  9.   {
  10.       x=7;
  11.       y=3;
  12.       z=y;
  13.   }
复制代码

论坛徽章:
0
10 [报告]
发表于 2004-04-17 12:50 |只看该作者

这段程序结果?

  
假如执行else后面的程序,z为什么等于y啊??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP