1樓:匿名使用者
既然樓主把程式複製錯了,前面就可以不看了,當然,看了也行。。
先說樓主認為正確的程式,
1,在沒有對m進行初始化的時候,就使用m來初始化其他變數。
2,我覺得樓主對於變數使用的理解有一定問題,根據你的寫法,你應該是認為這幾句
a=m%10;
b=m/10%10;
c=m/100%10;
已經對abc進行了初始化,那麼後面使用時計算機會隨著m的增加,自動按照前面這個公式計算。
很可惜,計算機沒有這麼聰明。
所以正確的做法時,將這3句加入for迴圈中,放在if之前。
看這裡!!
然後再說前面使用while的程式,
1,sqrt(m);函式的原型是 double sqrt(double),也就是說返回值是 double型,要讓程式執行,可以在sqrt前面加上強制型別轉換。
2,要使用printf **上標頭檔案stdio.h
3,在外層的while迴圈中,記得要對i初始化,按樓主的程式,i只在開始初始化為2。
正確的如下:
#include
#include
void main()
if(i>k)
printf("%d ",m);
m++;}}
2樓:
第一個:
在k=sqrt(m);前或後加一句i=2;,將每次判斷新的m的起始值設定為2,邏輯上就對了。
第二個:m還沒有賦值,就:
a=m%10;
b=m/10%10;
c=m/100%10;
這樣用了!也不知**是要達到什麼目的。
3樓:匿名使用者
while(m<=999)
4樓:
這兩個程式沒有任何可比性,素數程式應該內迴圈,每次i從2開始算起,就是說每找完一個數i重置為2,for有個初始化語句,可以島次重新初始化,while無此福利,因此要在外面初始化,具體在外迴圈內,內迴圈開始三前,i重新賦值為2即可!
5樓:匿名使用者
在迴圈體中對i只初始化了一次。
將"i=2;"移到第二個while之前即可。
某樓說對sqrt返回值進行強制轉換應該沒有必要,我測試過不必的。
c語言 輸出100以內的素數 break的用法為什麼會有這
安然而止 if i n 的意思是判斷被除數是否小於除數,如果小於當然是不用再進行下去了。這個式子寫成if i n 2 更好,可以少算幾步。 每次從if n i 0 break 迴圈裡逃出來迴圈都能有2中結果,一 被i整除了,直接被break跳出i迴圈,這時程式還會往下跑,就有必要遮擋下對n的列印 我...
用C語言輸出1到100內所有的素數
1 首先新建一個空白的c語言檔案,引入標頭檔案,標頭檔案中包括math庫,稍後會用到,建立主函式 2 主函式上面新建一個判斷素數的函式isprime,判斷依據是小於從2到算數平方根的數即是素數。然後在主函式中遍歷2到100的數,呼叫isprime判斷滿足素數條件就輸出 3 寫完 最後開啟編譯後的除錯...
用c語言輸出1到10000之間的所有素數
莫道無情 c語言程式如下 include int main int i,j,k 0 for i 2 i 10000 i for j 2 j j i j if i j 0 break if j j i printf d i k if k 5 0 printf n int main if flag re...