c语言r根据下试求s值r=1加2家4加7加11加1226

先看一下代码一个小问题:


现茬这个代码的运行结果似乎有疑问,与预算的不相同

我们主要的关注对象是*s++ += 7部分,代码作用不解释了

这显然没有问题,优先处理的是+=運算符将其拆开还原即可。

回到问题*s++ += 7上运算符出现了:++(右自增),*(取值)+=三种。

通常根据c语言r的运算符知识会作出如下思考:優先级中++ 优于 * 优于 += 所以在处理*s++ += 7时首要考虑的是++运算符而不是+=。

(s++)先取值在加一可能在本题中会有人想到*s++ += 7;中的可以思考如下:

*(s++) += 7;中先使用s的值(s的值是一个地址),之后进行*s的取值然后++发挥作用使得*s的值加一,最后再到+=的运算符将式子还原。可以发现其中的問题是:++发挥作用使得*s的值加一加一后的式子变成了:常数 += 常数 ;

显然这种式子是不被c语言r所允许的,但是本文开始出就已经给出了程序的运算结果说明代码没问题!

现在思考出错的原因,显然思路在加一的操作后出了错误现在给出合理的解释(这里只是猜想):

①先处理(s++),对s的态度是先使用s的值;

③*(s)取值后不进行 ++ 原本的加一行为而是执行+=操作符:

⑤结果是:原地址对应的值执行+7,+7后将结果10赋给地址地址只是往后移动一次。

解释右侧写为(s指针往右加一 )的原因:s++先是使用s的地址在等待s的地址加一,由于上面②③操作使得加一操作未能得到执行因此将其后续操作放在等式的左边。

以上的猜测过程完整的解释了开始的代码运行结果

猜想的作用与验证思路:①是解释问题的原因②解释原因后使用猜想的方法进行预测③实验验证

预测与实际运行结果相同,猜想正确因此以后遇见*s++ += 7类似问題时就可以按猜想的过程解决。

PS:由于本人能力有限文中出现错误的地方希望能得到大家的指正,谢谢!

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
首先要想到使用两个for循环语句,进行嵌套循环!
里面的for循环语句用来计算阶乘以忣统计阶乘的和!
但是数据类型,要使用long int类型!
}

我要回帖

更多关于 c语言r 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信