C語言輸出100 200的素數,幫忙看下哪個地方有問題

時間 2022-03-08 17:30:03

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...