一道C语言的计算题

inta[3]={3,2,5},*p=a,b=4;floatx=1.3;printf(“%d”,((*a+b)%((int)x++)==0)?*p++/2:b%5);我计... int a[3]={3,2,5}, *p=a, b=4;
float x=1.3;
printf(“%d”, ((*a+b)%((int)x++)==0)?*p++/2:b%5);

我计算的时候(*a+b)%((int)x++)==1
但是这样最后就和答案不一样了
请问这题最后输出的结果是多少?怎么算的
可以的话请解释一下过程。。。谢谢
展开
 我来答
lj84386655
2013-01-09 · TA获得超过945个赞
知道小有建树答主
回答量:358
采纳率:100%
帮助的人:253万
展开全部
((*a+b)%((int)x++) 这个是等于0的

所以((*a+b)%((int)x++)==0) 是1
所以打印的%d的值应该是*p++/2
而*p等于3, 除以2 等于1
所以最终输出的答案是1;

首先你要明白后缀++的含义。
比方说
你程序如果这样写
main()
{
int a[3]={3,2,5}, *p=a, b=4;
float x=1.3;
printf(“%d”, ((*a+b)%((int)x++)==0)?*p++/2:b%5);
}

那么打印出来的值是1
而你程序如果这么写:
main()
{
int a[3]={3,2,5}, *p=a, b=4;
float x=1.3;
printf("%d", ((*a+b)%((int)x++)));

printf(“%d”, ((*a+b)%((int)x++)==0)?*p++/2:b%5);
}
虽然前面只加了个打印,但是最后一句的意义完全不同了
执行第一次打印的时候x是按照1来算的
而到第二次打印的时候x的值就是2了,而7%2=1 ,所以最后的打印是b%5 也就是4%5 等于4

如果不明白的话可以继续问我
追问
嗯 很详细 差不多懂了 再请问下在((*a+b)%((int)x++))这句 是自加在前还是%计算在前?
追答
当然是自加在前,你不是加括号了么,加了括号肯定先算括号.
但是虽然x++这句话先执行,但是,x的值还是++前的值,没理由,因为他是后缀++, 你也可以这么理解:出现后缀++找到++后第一个 ;号 或者 } 号以后才进行+1的运算,当然我建议您好好看看c语言 前缀++和后缀++的部分,很重要的基本功
steelsimon
2013-01-09 · TA获得超过133个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:107万
展开全部
你这是做运算符计算问题吧
这个问题是体力的问题,不是脑力的问题。

你自己对着运算符优先级,把它的语法树画出来,结果自然就出来了。

看到这种练习题什么的,直接无视掉好了。
工程上永远也不可能出现这样的代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjhangia
2013-01-09
知道答主
回答量:23
采纳率:0%
帮助的人:13万
展开全部
(int) x++ = 1;
(*a + b) = 3 + 4 = 7;
7 % 1 = 0 == 0;条件成立 *p ++ = (*p) ++ = 3;
3 / 2 = 1;结果就是1.
如果自己不知道的话可以调试下, 很容易就找到问题了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
八神97坤
2013-01-09 · TA获得超过169个赞
知道答主
回答量:101
采纳率:0%
帮助的人:69.8万
展开全部
(*a+b)=7;
(int)x++=1;
由于%运算符的优先级比==高,所以先做(*a+b)%((int)x++),得结果为0,然后做0==0,条件成立,所以执行*p++/2,*p++=3,3/2=1(整数除以整数结果依旧是整数)
追问
请问下(int)x++=1;这句 ++符号没有被计算吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
静静坐
2013-01-09
知道答主
回答量:62
采纳率:0%
帮助的人:22.3万
展开全部
(3+4)% 1==0; x++是取的++之前的x;++x是取的加之后的x;所以答案是3/2。。。。。
不知道是不是对的,我也是初学者
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式