懂c语言的各位麻烦帮我解答下好吗 为什么答案是2不是16

#include <stdio.h>
#define SQR(X) X*X
void main()
{
int a=16,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf(“%d\n”,a);
}

#define 定义的宏只是简单的字符替换而已
a/=SQR(k+m)/SQR(k+m);
其中 SQR(k+m) 实际上被展开为 k+m*k+m
所以 SQR(k+m)/SQR(k+m) 展开为 k+m*k+m/k+m*k+m
即 a/=2+1*2+1/2+1*2+1 也就是 a/=7.5
当然这里因为是整数所以 a/=7 结果自然是 2
安全方式就是这样定义 #define SQR(X) ((X)*(X))
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-07
#define SQR(X) (X*X)这样试试
第2个回答  2011-05-07
a /= k+m*k+m/k+m*k+m ——> a /= 2+1*2+1/2+1*2+1 ——> a /= 2+2+0+2+1 ——> a /= 7
——> 16 /= 7 ——> 2

#define SQR(X) ((X)*(X))
第3个回答  2011-05-07
将a/=SQR(k+m)/SQR(k+m);
改为
a/=(SQR((k+m)))/(SQR((k+m)));
就可以得到你想要的结果16

C语言问题 这个答案为什么是2啊
c=2 那么最终变量c的值是2,并且整个表达式的值也是2,所以输出结果为2

C语言:下面程序运行后的输出结果是2,为什么?
if(s[i]>='a'&&s[i]<='z') n++;\/\/此循环在统计字符串s中的小写字母个数,因此为2 printf("%d\\n",n);\/\/输出小写字母个数n }

C语言题目 为什么输出2呢? 我觉得a=16\/1应该是16啊!为什么答案是2...
所以a\/=8当然就是2了

C语言 这题怎么计算的啊 为什么答案会有那么多位
计算机内以二进制形式存储。负数用补码+1来表示,应该是32位,因为计算机中整型占4个字节,当然了,早期计算机也有占用2个字节的。所以要16位来表示。例如2表示为(用16未来说明)0000000000000010 反码为 1111111111111101 -2为 1111111111111110 ...

c语言问题,执行第二个a++,我认为b是3,为什么答案是2?请帮我解析一下...
因为 b=1+1;首先,强调一下,大多数语句运算都有返回值,a++自加运算成功返回值为1,因此,两次自加(a++,b++)都返回1,b 就等于1+1=2了。

C语言。运行结果不是20吗,答案怎么是2
这个REST不是函数,而是宏,宏的展开要在运行main函数之前,也就是说,其实k*REST(11)表示的是 k * 11 % 3,* 和 %是同级运算,从左到右算,就是10 * 11 % 3 = 110 % 3 = 2

c语言的题,为什么是这个答案,不是很懂
&&短路运算复,也就是左边不成立,那么右边不执行了 题中m= a>b是假,所以左边是0 那么0&&右边 右边是没有执行,所以n还是等于2

C语言的题,都不难,帮忙解答,追加悬赏喔。麻烦把各个选项都解释解释最好...
与第二题类似,注意这里求的是them的空间大小,因为them表示成两个long型的数组,一个long是32位,及八个字节,所以两个就是16个字节。所以答案是16.第四题:D)scanf("%d",ps -> age);这里的ps->age 并不能表示地址,他只是返回age的值,ABC中的都表示的是地址。第五题:这个题是因为C选项...

C语言这个答案为什么是b?
第二行,j自增为4小于等于3不成立,内循环结束,执行第七行 第七行,x自增为4。这时第一个外循环结束,程序返回第一行,进行下一个外循环 程序就分析到这儿,可以看出第一个外循环x从0增加为4。可以预见,下一个i=1的外循环,x便从4增加到8。所以这个题的选项是B:x=8 有什么问题请留言...

c语言关于共用体 这个答案为什么是16
共用体共用同一块内存空间,其空间大小为共用体中占内存最大的那个变量所占的空间。long x[2] ; \/\/一般32位long占4字节,64位编译器占8字节,所以最大16 最小为8 int y[4]; \/\/一个int占4字节,4*4=16 char z[8]; \/\/一个char占一个字节,8*1=8 因此,这个共用体占16字节 ...

相似回答
大家正在搜