A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15098037606 中级黑马   /  2015-4-16 17:27  /  1963 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 15098037606 于 2015-4-16 18:04 编辑

1>        第一题
int x = 1,y = 1;

if(x++==2 && ++y==2)
{
    x =7;
}

printf("x=%d, y=%d\n", x, y);

输出是x=2, y=1

2>        第二题
int x = 1,y = 1;

if(x++==2 || ++y==2) {
    x =7;
}
printf("x=%d, y=%d\n", x, y);

输出是x=7, y=2

3>第三题

int x = 1,y = 1;

if(x++==2 & ++y==2)
{
            x =7;
        }
printf("x=%d, y=%d\n", x, y);

输出是x=2, y=2
第三题我理解对了,第一二题我理解错了,谁帮我分析一下?

7 个回复

倒序浏览
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         int x=1;y=1;
  5.         if(x++==2&&++y==2)
  6.    {
  7.                 x=7;
  8.         }

  9.         printf("x=%d, y=%d\n",x,y);
  10.         
  11.         return 0;
  12. }
  13. //x++ 先比较后进行加,X=2;
  14. //++y 先加在比较,正常情况下会觉得y也应该是2,
  15. //但是事实不是这样的,因为做的&&运算条件1不满足,条件2直接跳过
  16. //楼主可以把&&换成||试试
复制代码


题目2 ||只要满足一个条件就认为满足条件,y=2,所以会执行括号里面的.

——————————————————————————————————————————
如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
回复 使用道具 举报
sunyang 发表于 2015-4-16 17:32
题目2 ||只要满足一个条件就认为满足条件,y=2,所以会执行括号里面的.

——————————————— ...

第一题为什么输出y是1不是2呢?
回复 使用道具 举报
15098037606 发表于 2015-4-16 17:39
第一题为什么输出y是1不是2呢?

第一题&&后面的语句不执行,判断条件一不满足之后,条件二就会跳过,这是为了执行效率进行的编译优化
回复 使用道具 举报
sunyang 发表于 2015-4-16 17:40
第一题&&后面的语句不执行,判断条件一不满足之后,条件二就会跳过,这是为了执行效率进行的编译优化 ...

比较一下,第一题和第三题的区别。一个&和两个&的区别?
回复 使用道具 举报
15098037606 发表于 2015-4-16 17:45
比较一下,第一题和第三题的区别。一个&和两个&的区别?

是的,只有两个& 的运算符的时候才具有”短路“功能
回复 使用道具 举报
sunyang 发表于 2015-4-16 17:54
是的,只有两个& 的运算符的时候才具有”短路“功能

按你说的方法,帖子改为已解决。
回复 使用道具 举报
15098037606 发表于 2015-4-16 18:05
按你说的方法,帖子改为已解决。

谢谢,一起加油哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马