鱼C论坛

 找回密码
 立即注册
查看: 1555|回复: 28

[已解决]求大佬们解答

[复制链接]
发表于 2020-4-7 16:22:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是第41节课的程序,请问这两个pirntf中的i-1是啥意思  为什么i要-1啊  还有一个函数,一个宏定义 这两个i-1应该表达的是一样的吧

求解答 谢谢大佬们
最佳答案
2020-4-7 16:40:48
本帖最后由 4goodworld 于 2020-4-7 16:53 编辑

对于图一,你自己把代码打一下调试下,你看看
你会发现,i-1和i++来讲,其实它是先运行i++,然后在执行i-1
然后,我们逻辑推导下
i=1
然后进入while循环体
先执行i++,i=2
再执行i-1,i为1
所以printf是1的平方是1,你会问为啥第二个i不是2,i++的一个“考点”
然后关于图二的问题
你想要求啥?如果还是求平方的话,我想说你调试过吗?你确定能得到你想要的答案,如果能,那这个可能是编译器的原因
最后,总的来说,这个是i++这个的问题,这类问题,我感觉你就不要这么用了,很容易出问题的
01DGQB461OA_0}HI6GAZLLY.png
(INFL)6X%$4T%[IHH2%5NZS.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-7 16:26:24 | 显示全部楼层
1,-1就是单纯的-1啊,5-1就是4
2,表达的意思一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:26:38 From FishC Mobile | 显示全部楼层
为啥要发图片呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 16:30:18 | 显示全部楼层
qiuyouzhi 发表于 2020-4-7 16:26
1,-1就是单纯的-1啊,5-1就是4
2,表达的意思一样。

这个程序运行的不是100以内的每个数的2次方嘛  那不应该是i吗 怎么是i-1呢  要是输入的是1 不是0了嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 16:31:41 | 显示全部楼层
wp231957 发表于 2020-4-7 16:26
为啥要发图片呢

那个 我看视频想着看完小甲鱼的讲解在自己打一遍  但就是这个地方不是很明白 我寻思截个图问问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:34:17 | 显示全部楼层
牙牙乐 发表于 2020-4-7 16:30
这个程序运行的不是100以内的每个数的2次方嘛  那不应该是i吗 怎么是i-1呢  要是输入的是1 不是0了嘛

就是0啊,然后打印0的2次方
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:40:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-4-7 16:53 编辑

对于图一,你自己把代码打一下调试下,你看看
你会发现,i-1和i++来讲,其实它是先运行i++,然后在执行i-1
然后,我们逻辑推导下
i=1
然后进入while循环体
先执行i++,i=2
再执行i-1,i为1
所以printf是1的平方是1,你会问为啥第二个i不是2,i++的一个“考点”
然后关于图二的问题
你想要求啥?如果还是求平方的话,我想说你调试过吗?你确定能得到你想要的答案,如果能,那这个可能是编译器的原因
最后,总的来说,这个是i++这个的问题,这类问题,我感觉你就不要这么用了,很容易出问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:42:14 | 显示全部楼层
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边的值就需要写i-1了。
2、不能那样写,首先 (i++)*(i++)中i自加了两次,下次循环的时候i的值不再是你需要的值了,再者,(i++)*(i++)不是(i++)的平方,而是两个相邻值的乘积。例如当i=2的时候,(i++)*(i++)实际上是3*2,执行之后i=4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:44:07 | 显示全部楼层
C语言?我只学Python

评分

参与人数 1荣誉 -5 鱼币 -5 贡献 -3 收起 理由
人造人 -5 -5 -3 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:47:50 | 显示全部楼层
sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...

QQ截图20200407164716.png
个人感觉不是3*2的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 16:49:32 | 显示全部楼层
4goodworld 发表于 2020-4-7 16:40
对于图一,你自己把代码打一下调试下,你看看
你会发现,i-1和i++来讲,其实它是先运行i++,然后在执行i-1 ...

哦 后面的i++先执行啊 这就明白了 之前一直不知道  第二个图是我这章视频没看完 这一点一直弄不明白  就想着问一下  就没试  然后在看的时候小甲鱼才说的错的  谢谢大佬了 i++那个考点 就是先参与运算在自增 这个晓得晓得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 16:51:15 | 显示全部楼层
sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...

谢谢大佬了  那个老哥比你早一点看见 设置没了 不好意思 见谅  还是谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 16:51:51 | 显示全部楼层
4goodworld 发表于 2020-4-7 16:47
个人感觉不是3*2的结果

麻烦老哥在去试一下了  辛苦了辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:55:04 | 显示全部楼层
4goodworld 发表于 2020-4-7 16:47
个人感觉不是3*2的结果

这个与编译器有一定的关系。有的编译器是遇到一个表达式中存在多个自加的时候,是在执行完整个表达式之后再修改i的值,但是更多的编译器是在表单大师运算过程中逐步自加。
所以C语言中一般不建议在同一个表达式中多次自加,因为在不同的编译器下运行结果会有所不同。
123.jpg
124.jpg
125.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:57:43 | 显示全部楼层
牙牙乐 发表于 2020-4-7 16:51
谢谢大佬了  那个老哥比你早一点看见 设置没了 不好意思 见谅  还是谢谢大佬

没关系。
解答问题也是自我巩固知识的一个过程,只要帮到你了就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:08:19 | 显示全部楼层
编程鱼C 发表于 2020-4-7 16:44
C语言?我只学Python

你一直在灌水,对于这样的人,我可不手软,直接扣分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 17:11:32 | 显示全部楼层
sunrise085 发表于 2020-4-7 16:57
没关系。
解答问题也是自我巩固知识的一个过程,只要帮到你了就行

这论坛大佬们都是这么爱乐于助人  嘿嘿 还是谢谢哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:15:07 | 显示全部楼层
人造人 发表于 2020-4-7 17:08
你一直在灌水,对于这样的人,我可不手软,直接扣分

我还是初一,我刚来2天,我根本就不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:16:25 | 显示全部楼层
sunrise085 发表于 2020-4-7 16:42
1、因为C语言中是从右向左进行运算的,printf语句中先执行square(i++),执行之后I已经进行自加了,所以左边 ...

我来纠正一下,C语言中参数的入栈顺序是从右到左,但是求值顺序是 undefined
参考
http://bbs.chinaunix.net/thread-730010-1-1.html
http://blog.chinaunix.net/uid-22666248-id-3029562.html


1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 17:17:26 | 显示全部楼层
编程鱼C 发表于 2020-4-7 17:15
我还是初一,我刚来2天,我根本就不知道

知错就改,就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表