C语言中:y=++x*++x与y=(++x)*(++x)为何结果不同?

x定义为float型,初值为1时,前者的y为9,后者为6.... x定义为float型,初值为1时,前者的y为9,后者为6. 展开
 我来答
destiny_葭陘
推荐于2017-09-23 · TA获得超过2845个赞
知道大有可为答主
回答量:2131
采纳率:88%
帮助的人:666万
展开全部
如果你没打错,结果是一样的;
程序1如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=(++x)*(++x);
printf("%d",a);

}
程序2如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=++x*++x;
printf("%d",a);

}
运行结果完全一样,都是49;

程序3如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=(++x)*(++x);
printf("%d",a);
a=++x*++x;
printf("%d",a);

}
这样写的话,结果就不一样,因为在执行a=++x*++x前,x的值已经不是5,而是7了。
惠清卓0E
2014-08-19 · TA获得超过278个赞
知道答主
回答量:65
采纳率:0%
帮助的人:67.3万
展开全部
这是一个运算符号优先级的问题:‘ ++ ’ > ‘()’ > ‘ * ’。
所以:y=++x*++x相当于y=x*(x+1),y=(++x)*(++x)相当于y=(x+1)*(x+2)。
追问
书上“()”优先级大于“++”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Cansluck
2014-08-19 · 知道合伙人软件行家
Cansluck
知道合伙人软件行家
采纳数:502 获赞数:1407
毕业于湖南农业大学计算机科学与技术专业,学士学位。从事java开发4年,读过大量的java开发的书籍

向TA提问 私信TA
展开全部
这个就涉及到优先级的关系啦。这不带括号和带括号的优先级应该是不一样的。你可以再C语言程序运行过程中调试哦。
追问
现在还不太会调试。
追答
哦,没事,可以去找找相关资料,或者问问技术牛的同学
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帽子狗
2015-05-28 · TA获得超过942个赞
知道小有建树答主
回答量:611
采纳率:50%
帮助的人:541万
展开全部
.. 楼主你是把两个句子一起执行了么 那肯定不一样 前面的计算会影响后面的结果的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nari_lizw
2014-08-19 · TA获得超过7390个赞
知道大有可为答主
回答量:2075
采纳率:70%
帮助的人:796万
展开全部
我测试的结果是++x*++x和(++x)*(++x)计算结果相同。
编译环境是VS2005.
更多追问追答
追问
我的编译环境是VC++6.0  x初值为1 求得前者y值为9,后者y值为6。我再试试
追答
我也是初始值给的1.
测试代码:
#include
int main (void)
{
int x=1,y=1;
printf("++x*++x=%d\n(++y)*(++y)=%d\n",++x*++x,(++y)*(++y));
getchar();
return 0;
}
输出结果都是9.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式