永发信息网

C语言3个问题

答案:3  悬赏:20  手机版
解决时间 2021-05-14 04:23
  • 提问者网友:疯孩纸
  • 2021-05-13 10:04
一)已知int a=3,b; 1) b=a+++a+++a++; Ûb=(a++)+(a++)+(a++); 则a=6,b=9 2) b=(++a)+(++a)+(++a); 则a=6,b=18 答案中的a、b是怎样得到的 二)由第一题又想到了一个问题:a a+ a++ a+++ a++…n 如果a=1 这些数字的回答分别是1 2 3 4 …… n 三) 例如:a=1;b=2;  if (a>1)     if (b<3) a=2; else a=3; 程序执行后,a值应为1,因为else否定的是 if (b<3)。 对比:  if (a>1)      { if (b<3) a=2; } else a=3; 程序执行后,a的值为3。 有点看不懂:为什么a与b的值已经固定了,在条件判断结构中可能改变a b的值呢(a b又不是变量)
最佳答案
  • 五星知识达人网友:荒野風
  • 2021-05-13 10:12
回答一、二:首先,我坦白,我看到这样类似一串加号的分析优先级的问题,相当头疼。其次,我要说的是,对于这样的问题,拿来练脑子可以,实际应用中千万不要写这样的代码。原因有二:1、这样的代码可读性低;2、不同的编译器由于运算顺序问题,可能导致实际结果的不同(LZ可以测试下,对于问题一中的3行代码,用VC和TC编译运行的结果是不同的)。(扯一句,在CSDN有人说,如果你工作了还写这样的代码,就等着被领导收拾吧。。)

回答三:首先,您最后括号里说“AB又不是变量”,这一点恐怕不对。如果LZ真的是初学者,那建议您先仔细了解一下C语言里面的变量指什么。
这两段代码的意思用汉语解释,分别是(1)如果a大于1而且b小于3,将2赋给a;如果a大于1而且b不小于3,将3赋给a;如果a不大于1,则不执行下面的语句。(2)如果a大于1而且b小于3,将2赋值给a;如果a不大于1,将3赋值给a。
所以按照LZ给a、b变量的初值,运行结果是正确的。
全部回答
  • 1楼网友:逐風
  • 2021-05-13 12:09

b=a++相当于b=a&&a=a+1

b=++a相当于a=a+1&&b=a

  • 2楼网友:零点过十分
  • 2021-05-13 11:47

a++返回+以前的值,所以b=a+++a+++a++如果编译器把a放在不同的寄存器里加完后没有立刻回写则b变成3+3+3=9,如果有立刻回写则变成3+4+5=12

b=(++a)+(++a)+(++a); 同理如果编译器用第一种处理方式则3次++a后a=6,b=6+6+6=18

三)else a=3是跟if (a>1) 匹配的,a当然是变量,否则a=3会编译出错

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯