引用 | 编辑
csr
2010-12-06 17:47 |
楼主
▼ |
||
x0
刚学c/c++偶数和 及1加到100都可以为何奇数和会弄得乱七八糟呢 大大们可否看小弟那错了 帮忙改正一下 好吗 拜托了 #include<stdio.h> #include<stdlib.h> int main(void) { int i=1,sum=0; start: i+=2; sum+=i; printf(&q .. 访客只能看到部份内容,免费 加入会员 x0
|
引用 | 编辑
ronlain
2011-01-05 23:29 |
1楼
▲ ▼ |
把sum+=i 跟 i+=2反过来就好了
int i=1,sum=0; start: sum+=i; i+=2; printf("%d",i); x0 |
引用 | 编辑
ronlain
2011-01-08 23:43 |
3楼
▲ ▼ |
你再试看看吧 应该没少也没多
第一次i=1 sum+=1 1不会少 最后一次 i=99 sum+=99 i+=2 i=101 这个101下一个 if (i<100) 不会成立 int i=1,sum=0; start: sum+=i; i+=2; if(i<100) x0 |
引用 | 编辑
csr
2011-01-28 17:54 |
4楼
▲ ▼ |
下面是引用 ronlain 于 2011-01-08 23:43 发表的 : 真的不行 因为1+2=3所以1不见了,它就从3开始算起,99+2=101,而99是 if(i<100)符合假设 若不相信 大大你用dev c++编译看看 我个人是把它改成如下程式码 #include<stdio.h> #include<stdlib.h> int main(void) { int i=-1,sum=0; start: i+=2; sum+=i; printf("%d",i); if(i<99) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 编辑
totsi
2011-01-31 08:56 |
5楼
▲ ▼ |
原因很简单,因为您是先加完再印,所以i=1,且i+=2时,下一行i已经等于 i = 1 +2了,所以结果当然会是3。
因此就像您改的,要先从-1开始加,才会让第一组出来的数字为1。 除非您是先印再加。 但ronlain大大说的也没错,因为ronlain大大并没有印值,而是直接算总和,所以他一开始把i=1加进来,所以总和也是会对的。 而且您也没有说少的1是「没加进和里」还是「没印出来」,我想,这ˋ样要debug可能会有所落差噜~~ 希望对您有帮助 x0 |
引用 | 编辑
totsi
2011-01-31 12:52 |
7楼
▲ ▼ |
下面是引用 csr 于 2011-01-31 11:14 发表的 : 那就好玩噜,我用ronlain大大的方式,改用while来写而已,结果同ronloain大大所言。 所以错是错在结果不对噜?XD 复制程式 int sum = 0, i = 1; while ( i <= 100 ) { sum += i; printf("The addition value = %d\n", i); i+=2; } printf("The sum =%d\n", sum); system("pause"); x0 |
引用 | 编辑
totsi
2011-01-31 17:17 |
9楼
▲ ▼ |
问题跟dev-c无关,会显示上有问题就像我第一个回的,您的作法是先做再印
所以当然会印不出1,但加出来的值是对的(ronlain大大的作法) 最后会多印101也是同样的原因。 所以会建议您把您跑的图跟code贴在同一个回覆内,至少看的人会比较清楚知道问题。 最后,不建议用goto写回圈,原因我想您多玩几次就能体会了~~ 希望对您有帮助~ ps.一开始我还以为start: 是新的回圈语法XDD x0 |
引用 | 编辑
totsi
2011-02-01 09:50 |
12楼
▲ ▼ |
复制程式
int main(void) { int i=1,sum=0; start: sum+=i; printf("%d",i); i+=2; if(i<100) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x1 |
引用 | 编辑
csr
2011-02-01 14:04 |
13楼
▲ ▼ |
bug终于让大大帮小弟改进
看了大大程式码后 真才了解写程式原来步骤一步都不能有疏忽 否则全盘皆墨 小弟以后一定会更全盘的去考量 希望大大这神来一笔 会让小弟在学c语言时 会更加小心与思考 再次对大大至敬 感恩再三 谢谢 以后若小弟有不懂之处 希望大大还能适时对小弟施教 大大你好 底下这会出现两个+ 不知要如何改 谢谢 程式码如下 #include<stdio.h> #include<stdlib.h> int main(void) { int i=0,sum=0,; start: i+=1; if(i%2==1) sum+=i; if(i%2==1) printf("%d",i); if(i<100) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 编辑
totsi
2011-02-03 10:59 |
14楼
▲ ▼ |
原因也很简单,问题是因为您不管是奇数还是偶数,都会走到printf("+")。
所以显示"+"应该是有真的加值进来时,才显示"+"才对。 所以简单作法是 复制程式 if(i<100 &&(i%2 == 1) ) { printf("+"); goto start; } 目前手头没有compiler可以测,所以您可以先玩玩看。 如果不行,那就记得修改的条件是「有加入的值,才显示"+"」但是这个要注意头尾的问题。 个人还是建议不要用goto当回圈使用。 希望对您有帮助~~ 我比较偏好的写法如下: 复制程式 int main(void) { int i=0,sum=0,; start: i+=1; if(i%2 == 0) { goto start; } sum+=i; printf("%d",i); if(i<100 && i != 99) { printf("+"); goto start; } printf("=%d\n",sum); system("pause"); return 0; } x0 |
引用 | 编辑
totsi
2011-02-08 10:27 |
17楼
▲ ▼ |
不好意思,我忘记您的作法会出现只有跑一次的问题XDDD
如使用您的方式,可以用的code如下: 复制程式 if(i<100) { if(i%2 == 1 && i != 99) { printf("+"); } goto start; } 还有,最后还是老生常谈,回圈非必要时,少用goto来玩。 不然会很常在除错XDD。 for...do while的反而会比较好抓XDD x1 |
引用 | 编辑
csr
2011-02-09 20:49 |
18楼
▲ ▼ |
下面是引用 totsi 于 2011-02-08 10:27 发表的 : 测试后一切OK 大大可真是高手 小弟佩服的五体投地 看来 小弟对于语言逻辑慨念要好好多加强啰 不过 是否可请教大大一个问题 那就是书本上的范例大约五六成都看的懂 但是题目一来那就一头雾水不知如何了 像这样 是不是该加强那方面的学习 才能如大大这样手到擒来不费吹灰之力 谢谢 x0 |
引用 | 编辑
totsi
2011-02-11 08:52 |
19楼
▲ ▼ |
高手不敢称~目前也才等ˋ级3而已XDDD
其实没什么别的方法,就多看、多听、多问、多做,最重要的是多想 想不通,找管道问,问题写的清楚,就有人愿意帮忙噜^^m 想完后再问,比较会知道自己思路上少考虑哪些部分 这只是自己短短3年的学习心得~~ 共勉之~~ 希望对您有帮助XDDD PS.书上范例不一定都能用,所以拿到手的时候,建议先想想看他为何要这样写,那这样写能不能用。不确定的话就用编辑器来debug,边debug就知道他哪里的逻辑错了。 x1 |
引用 | 编辑
csr
2011-02-11 20:56 |
20楼
▲ ▼ |
下面是引用 totsi 于 2011-02-11 08:52 发表的 : 感谢大大不吝指导 小弟我才刚学六,七个月 看过C,C++,Visual C++,资料结构等不下十多本书(大部份有看没懂) 但是因为是自学 所以也没老师可问 到网路上查资料也都无法完全厘清心中疑点 现今只在本论坛遇到大大您这位老师肯如此跟小弟这样反覆讨论 否则也不会为如何学起而浪费许多时日 如今大大这一席话小弟将谨记在心 好事多磨 就让今天过后 因为大大而让我走上学习的正徒上 谢谢再谢谢 感恩再感恩 就因为有你 x0 |
引用 | 编辑
tonylucy321
2012-12-13 19:00 |
21楼
▲ |
很复杂 看不憧
但我会研宄 谢谢大大 x0 |