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变量的初值,运行结果是正确的。
回答三:首先,您最后括号里说“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会编译出错
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯