[問題] 小弟寫了一個程式 就差了一點

看板C_and_CPP作者 (你好嗎 我很好)時間15年前 (2009/08/12 16:48), 編輯推噓4(4032)
留言36則, 6人參與, 最新討論串1/3 (看更多)
#include <stdio.h> #include <stdlib.h> int main() { int l,k,t,n,i=1; printf("Please input a number N: "); scanf("%d",&n); if ((n%2!=0)&&(n%3!=0)&&(n%5!=0)&&(n%7!=0)) printf("N have factor 1 , and N is undivisible value"); else printf("N have factor "); while (i<n) { if(n%i==0) printf("%d ",i); i++; } //分格線-------------------------------------------------- for (t=2;t<n+1;t++) { while(t<k) { k=2; if(n%k==0) { l++; } else { break; } if(l=1) { printf("比 N 小的質數有"); printf("%d ",k); } else break; } k++; } system("pause"); return 0; } 以上是我用來計算N的因數(分格線前的程式 沒問題) 分格線後的程式 是我要來計算 小於N的所有質數 我的演算法是 假設 輸入 N=6 t就會從2開始 慢慢+1+1+1----------->6 然後 變數 K 是用來當作 t 的除數 之後 如果 t / k 時沒有只有一個除盡的話 (l = 1) 就printf ("%d ",k); 可是當我輸入 32 時 我的程式會輸出 你的因數為 1 2 4 8 16 比N小的質數為 2 只有2而已= = 為什麼.....百思不解 請大家救救我...謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.129.135

08/12 16:50, , 1F
補充:倒數第七行的意思是 當t/k時 只有一個數被除盡 就是本
08/12 16:50, 1F

08/12 16:51, , 2F
身 所以l=1 所以是質數 3q
08/12 16:51, 2F

08/12 17:17, , 3F
你的第一次 while(t<k) 這個時候k還沒有給值吧
08/12 17:17, 3F

08/12 17:26, , 4F
我在宣告那邊加了=0之後 反而跑都跑不出來...
08/12 17:26, 4F

08/12 17:26, , 5F
我不是給k=2了嗎..
08/12 17:26, 5F

08/12 17:36, , 6F
while每次重跑的時候K都會被重設k=2,所以當然會跑不出來
08/12 17:36, 6F

08/12 17:36, , 7F
把k=2;放在while(t<k)的上面吧!
08/12 17:36, 7F

08/12 17:38, , 8F
第一次跑while(t<k)的時候沒給, 還是你原本就設計這樣?
08/12 17:38, 8F

08/12 17:44, , 9F
變數l好像像沒有設定初始值就使用?
08/12 17:44, 9F

08/12 17:46, , 10F
回su3:我好像很多值都沒有設初值= =
08/12 17:46, 10F

08/12 17:46, , 11F
沒給變數初值就取值, 基本上可以肯定是錯的了....
08/12 17:46, 11F

08/12 17:46, , 12F
剛剛那個是回給cis的
08/12 17:46, 12F

08/12 17:47, , 13F
還有 if(l=1) 看起來也是一個typo....
08/12 17:47, 13F

08/12 17:47, , 14F
回su3大:我程式功力很差 所以我不知道我原本想設計成怎樣...
08/12 17:47, 14F

08/12 17:48, , 15F
typo是什麼....
08/12 17:48, 15F

08/12 17:48, , 16F
其實我也不懂為什麼一開始要先把2,3,5,7給排除掉....
08/12 17:48, 16F

08/12 17:49, , 17F
因為後面也沒有對此最佳化; typo: 打錯字....
08/12 17:49, 17F

08/12 17:49, , 18F
"不知道原本想設計成怎樣" -> 那就不要開始寫程式....
08/12 17:49, 18F

08/12 17:49, , 19F
寫程式應該是你心裡有譜了, 知道整個程式的演算流程與
08/12 17:49, 19F

08/12 17:50, , 20F
局部邏輯都通了, 才開始去寫; 雖然我也很常幹直接開IDE
08/12 17:50, 20F

08/12 17:50, , 21F
我只是想要把我剛剛上面的演算法寫成程式 不過run不出來..
08/12 17:50, 21F

08/12 17:50, , 22F
就coding這種事就是了....XD
08/12 17:50, 22F

08/12 17:51, , 23F
l=1是 如果只有本身被除盡 就代表是質數 要印出來 不是typo
08/12 17:51, 23F

08/12 17:51, , 24F
我概念很差 = = 其實我今天有想出這個演算法我就很高興了= =
08/12 17:51, 24F

08/12 17:51, , 25F
你上面那樣推l=1, 我只能建議你除了把演算法想清楚以外,
08/12 17:51, 25F

08/12 17:51, , 26F
最好再把程式語法也看清楚再coding....:)
08/12 17:51, 26F

08/12 17:53, , 27F
嗯.....
08/12 17:53, 27F

08/12 17:53, , 28F
好不容易想出演算法 卻寫不出程式 很難過
08/12 17:53, 28F

08/12 17:54, , 29F
Hint: if(l == 1) 還是 if(l = 1)??
08/12 17:54, 29F

08/12 17:55, , 30F
另外, 演算法清楚了, 你不應該程式裡該給初值的地方都給
08/12 17:55, 30F

08/12 17:55, , 31F
不出來, 而沒給初值就取值的程式多半也不用希望結果會對
08/12 17:55, 31F

08/12 18:20, , 32F
謝謝v大 我在努力看看吧
08/12 18:20, 32F

08/12 18:37, , 33F
V大的建議很中肯, 先想好七八成了再開始動手
08/12 18:37, 33F

08/12 18:38, , 34F
程式碼寫好了, 跑起來不如預期, 就用printf
08/12 18:38, 34F

08/12 18:38, , 35F
看看程式碼作的事情跟你想的事情是不是一樣
08/12 18:38, 35F

08/12 18:43, , 36F
真的抓不到原因了, 就google或是把問題po出來
08/12 18:43, 36F
文章代碼(AID): #1AWe7rdD (C_and_CPP)
文章代碼(AID): #1AWe7rdD (C_and_CPP)