鱼C论坛

 找回密码
 立即注册
查看: 2815|回复: 10

程序本身是对的,少了一个等号之后就变成不理解的样子了。

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

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

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

x
为什么在if条件语句那里只差了一个等号就是这样的情况。差一个等号就赋值给i,不应该是全部输出吗??
%OVMG_1O7QYZ5JC[NPBM89Y.png
WH@~]S@MBU@9X~P9DP6BY}F.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-19 00:52:09 | 显示全部楼层
要区分开:这是两种运算符!!
“=”: 赋值运算符,为等号左边的变量赋予等号右边的值。赋值运算符构成的表达式叫做赋值表达式。表达式的值就是左边变量被修改后的值。如表达式“a = 5”的值为5。
“==": 关系运算符,判断等号两边的值是否相等。"=="连接的表达式为关系表达式,表达式的值只有真和假。如表达式“5 == 5”的值为真,“5 == 6”的值为假。
编译器将非0值视为真,将0视为假。而“if(){...};”只要圆括号内的值为真,则执行if()的花括号内的语句。
if(5==5){语句};圆括号内的关系表达式值为真,执行语句
if(5==6){语句};关系表达式值为假,不执行语句
if(a = 5){语句};赋值表达式值为5,即真,执行语句
if(a = 0){语句};赋值表达式值为0,即假,不执行语句

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2016-4-19 03:05:11 | 显示全部楼层
过来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-19 06:54:40 From FishC Mobile | 显示全部楼层
运行到i=a*a*a+b*b*b+c*c*c时,用来计数的i值变了,也就是步长不再是那个单纯的1了。

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2016-4-19 10:18:06 | 显示全部楼层
楼上说的都对,其实很多问题可以通过单步调试(debug)来解决,一步一步跟踪代码执行,如果还是不懂再问,这样记忆更深刻!

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2016-4-19 20:22:01 | 显示全部楼层
==是判断符号两边的值是否相等;=是把后面的值赋值给前面的变量。
而且,感觉你取个位和十位的方法有点怪。。
我的话会写成:
a = i/100
b = (i%100)/10
c = (i%100)%10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-22 11:06:30 | 显示全部楼层
过来看看!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-24 01:12:57 | 显示全部楼层
mingcxx 发表于 2016-4-19 00:52
要区分开:这是两种运算符!!
“=”: 赋值运算符,为等号左边的变量赋予等号右边的值。赋值运算符构成的 ...

这两个运算符我知道 那这样的话 那个赋值表达式 i=a*a*a+b*b*b+c*c*c的i不是都等于非0了,那不是应该输出899个数吗,怎么会只输出那几个数呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-24 02:07:18 | 显示全部楼层
本帖最后由 mingcxx 于 2016-4-24 02:37 编辑

4楼说了,i作为for循环的循环控制变量,在循环体内被修改了。单步调试看看:
for循环进入第一次循环,i==100,然后a、b、c依次获得当前i值的百、十、个位(1、0、0)
下一句执行if的条件:“i=a*a*a+b*b*b+c*c*c;”,i赋值为1,printf()打印了1;
进入第二次循环,执行i++,i增加为2,a、b、c分别为0、0、2,"i=a*a*a+b*b*b+c*c*c",i又被赋值为8,8即真,打印8;
继续循环。。。
每次循环中i值都被重新赋值,本该从100连续递增的i,变成了七零八落毫无规律的i,循环次数不再是900次(100到999是900个数),所以就算i不断赋为非0值,输出的次数自然更加不是900。
我觉得知道了错的地方就尝试改正,没必要再去按照一个错误代码推理可能的结果,推对了还好,一旦错了不是又钻进另外一个死胡同,不能虐自己。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-4-24 21:01:24 | 显示全部楼层
水币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-25 10:13:10 | 显示全部楼层
少了括号是这么的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-1 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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