关于C语言笔试的几道题

1、
#define A 10
#define B (A<A+2)-2
printf("%d",B*2);
结果是-3,可不可以麻烦把过程说一下,还有有关于define的问题我总是搞不清,可不可以详细介绍一下做这类题是应该注意的?
同类型的还有
#define F(x) x-2
#define D(x) x*F(x)
printf("%d%d",D(3),D(D(3)));
这个也不太懂。。。
2、
数组定义为 int a[3][2]={1,2,3,4,5,6},数组元素__的值为6?
答案给的是a[2][1],为什么不是a[1][2]呢???
3、
表达式strcmp("box","boss")的值是一个__?
答案是正数,为什么不是负数呢??box比boss大吗????
第一题为什么是1-2*2而不是-1*2呢???
哪里优先??为什么不是2*((A<A+2)-2)???这样不应该是-2吗???
说一下原理好不好?别光说是怎么样不是怎么样。。。

printf(..... B*2)
而B是什么?是(A<A+2)-2
那么也就是(A<A+2)-2*2 而你的2*((A<A+2)-2) 人家又没有破号,你自己给他加一个上去,这能没问题吗?这没什么原理,是规定,是逻辑,想不通没关系,这种样的宏初级编程用不上,等你到达高级程度了也就自己会理解的了。

展开后是(A<A+2)-2*2 并不是2*((A<A+2)-2)

乘法当然比减法优先了,先乘后减。。。。。。。

第一题
首先定义了宏 A 他的值是10 实际上可以当成int a=10;
然后#define B (A<A+2)-2
实际上也就是#define B (10<10+2)-2
首先算术运算符比关系运算法优先高就变成了 (10<12)-2,然后10<12条件是真,为1,变成了 1-2 由于printf("%d",B*2); 又变成了 1-2*2 结果1-4=-3;

第二题
这个二维数组分解开来就是 a[0][0]=1,a[0][1]=2,a[1][0]=3,a[1][1]=4,a[2][0]=5,a[2][1]=6, 这个二维数组是三行,二列,行的下标有0,1,2,列的下标有0,1 你的a[1][2]越界了。

第三题并不是单纯的用box 的长度去和boss比较,而是acsii表里的值去减,首先 b和b比,相等,会自动看下一个,o和o比,任然相等,然后x和s比,在acsii里x是120而s是115,所以box大,至于boss最后多出的s就不管了。
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答