[問題] C簡單的疑問

看板C_and_CPP作者 (囧BB)時間12年前 (2013/08/25 01:04), 編輯推噓2(207)
留言9則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 程式碼中的 if(j>k) printf("%d ",i); 其中的判定我覺得怪怪的,感覺結果應該是等於,可是程式執行結果是對的,更改反而會 錯誤。 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> int main(void) { int a=10,b=23; int i,j,k; for(i=a;i<=b;i++) { k= i/2; for(j=2;j<=k;j++) { if(i%j==0) break; } if(j>k) printf("%d ",i); } return 0; } 補充說明(Supplement): 這是一個簡單判斷數字區間質數的小練習,自己想的跟結果都不一樣,所以上網找到類似 解修改。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.239.97.134

08/25 01:08, , 1F
單步執行
08/25 01:08, 1F

08/25 01:09, , 2F
若完全沒有break的話,內層迴圈跑完j=k+1
08/25 01:09, 2F

08/25 01:11, , 3F
j==k反而代表k可以整除i,而非代表i是質數
08/25 01:11, 3F

08/25 01:34, , 4F
此外就你的範例來看,會被k整除的i只有偶數和3,所以如果你
08/25 01:34, 4F

08/25 01:36, , 5F
只檢驗奇數i,即使if寫錯你也不會遇到這個問題 XD
08/25 01:36, 5F

08/25 11:19, , 6F
C 迴圈語法的基本精神是當迴圈結束時, 判斷條件一定"不會對"
08/25 11:19, 6F

08/25 11:19, , 7F
所以這裡當 for 正常結束時 (沒有 break), j <= k 一定不會對
08/25 11:19, 7F

08/25 11:20, , 8F
記得你是當 j <= k 不成立時才會結束迴圈
08/25 11:20, 8F

08/25 11:58, , 9F
標題 ...
08/25 11:58, 9F
文章代碼(AID): #1I6EUGbj (C_and_CPP)