程序本身是对的,少了一个等号之后就变成不理解的样子了。
为什么在if条件语句那里只差了一个等号就是这样的情况。差一个等号就赋值给i,不应该是全部输出吗?? 要区分开:这是两种运算符!!“=”: 赋值运算符,为等号左边的变量赋予等号右边的值。赋值运算符构成的表达式叫做赋值表达式。表达式的值就是左边变量被修改后的值。如表达式“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,即假,不执行语句
过来看看 运行到i=a*a*a+b*b*b+c*c*c时,用来计数的i值变了,也就是步长不再是那个单纯的1了。 楼上说的都对,其实很多问题可以通过单步调试(debug)来解决,一步一步跟踪代码执行,如果还是不懂再问,这样记忆更深刻!{:5_95:} ==是判断符号两边的值是否相等;=是把后面的值赋值给前面的变量。
而且,感觉你取个位和十位的方法有点怪。。
我的话会写成:a = i/100
b = (i%100)/10
c = (i%100)%10 过来看看!!!!! mingcxx 发表于 2016-4-19 00:52
要区分开:这是两种运算符!!
“=”: 赋值运算符,为等号左边的变量赋予等号右边的值。赋值运算符构成的 ...
这两个运算符我知道 那这样的话 那个赋值表达式 i=a*a*a+b*b*b+c*c*c的i不是都等于非0了,那不是应该输出899个数吗,怎么会只输出那几个数呢? 本帖最后由 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个数{:9_232:}),所以就算i不断赋为非0值,输出的次数自然更加不是900。
我觉得知道了错的地方就尝试改正,没必要再去按照一个错误代码推理可能的结果,推对了还好,一旦错了不是又钻进另外一个死胡同,不能虐自己。。 水币 少了括号是这么的
页:
[1]