C语言的两道题...为什么..

1.以下选项中合法的字符常量是A."B"B.'\010'C.68D.D为什么这答案是选B...C的68不也可以当作一个字符型的常量吗?2.#include<stdio.h... 1.以下选项中合法的字符常量是
A."B"
B.'\010'
C.68
D.D

为什么这答案是选B...C的68不也可以当作一个字符型的常量吗?

2.
#include <stdio.h>
#define M(x,y,z) x*y+z
void main(void)
{
int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c,c+a));
}

这题为什么是等于12而不是19呢`
展开
 我来答
百度网友dad142f
2009-12-06 · TA获得超过9916个赞
知道大有可为答主
回答量:1548
采纳率:100%
帮助的人:2041万
展开全部
第一题:因为他说的是字符常量,而c中虽然可以直接赋给字符变量,但是它本身是整形,而非字符型。你应该特别注意变量、常量的区别。
第二题:我们知道预处理命令事实上知识一些代号而已,M(a+b,b+c,c+a)事实上是按照如下计算的:a+b*b+c+c+a=12.
PS:如果你想得到19的话必须如下定义:
#define M(x,y,z) (x)*(y)+(z).(当然了,最后z的括号可以不加的呵呵~)
zzyyxxaabbcc
2009-12-06 · TA获得超过3643个赞
知道大有可为答主
回答量:3542
采纳率:50%
帮助的人:3419万
展开全部
1.68是数值,不是字符常量。字符常量是要用两个单引号括起来的。
2.宏的定义只是简单的替换而已。按你的例子,M(a+b,b+c,c+a),会被解释为
a+b*b+c+c+a=1+2*2+3+3+1=12。如果想等于19,那么在调用时,应该用M((a+b),(b+c),(c+a)),每一项都要用括号括起来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逍遥_御剑江湖
2009-12-06
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
第一题:用""括起来的是字符串常量,字符常量必须且只能用''单引号,C,D就不对了
第二题:估计你对宏的理解不对 执行到 M(a+b,b+c,c+a))时,它按宏展开时 a+b*b+c+c+a,结果所以是12,也就是说它不是像函数那样那样传值,要想得到19,则应该这样定义:
#define M(x,y,z) ((x)*(y)+z)
或者在调用时候这样写:
printf("%d\n", M((a+b),(b+c),(c+a)));
更常用上面一种方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式