Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

C語言 質數

// 質數.cpp : 定義主控台應用程式的進入點。

//

#include \"stdafx.h\"

#include <stdio.h>

#include <cstdio>

#include <conio.h>

#include <iostream>

#include <cstdlib>

#include <string.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{ bool flag;

int A;

int i;

printf(\"請輸入一個數值:\");

scanf(\"%d\",&A);

for(i=2;i<=A-1;i++)

{

if(A%i==0)

flag=true;

break;

}

if(flag==true)

printf(\"這不是一個實數\");

else

printf(\"這是一個實數\");

return 0;

}

可以幫我看看哪有做嗎 compiler有過 但執行error

Update:

修正一下

int _tmain(int argc, _TCHAR* argv[])

{ bool flag;

int A;

int i;

printf("請輸入一個數值:");

scanf("%d",&A);

for(i=2;i

1 Answer

Rating
  • Lv 7
    2 decades ago
    Favorite Answer

    你的flag要有初定值.若無將是亂數.C/C++裡0是FALSE, 不是0是TRUE. 亂數百分之99不是0. 所以for之後flag還是TRUE.

    2006-01-21 02:17:58 補充:

    for(i=2;i<=A-1;i++) {     if(A%i==0)         flag=true; } if(flag==true)     printf("這不是一個實數"); else     printf("這是一個實數");你犯了一個C/C++初學者常犯的毛病.就是變數要設初定值之後才能用.你的迴圈會從2走到A-1. 如果2到A-1裡有一個數i能夠讓A%i == 0的話那你會把flag設為true. 之後如果flag為true的話顯示"這不是一個實數". 不然顯示"這是一個實數".(實數應質數) 所以如果A不是質數的話,迴圈裡的if一定會執行. 迴圈後flag一定為true. 但A是質數的話. 迴圈裡的if就一定不會執行. 所以flag在執行迴圈之後的值會跟在執行迴圈之前的值一樣. 對不對? 請問flag在執行迴圈之前的值是?答案是亂數, 因你只有宣告flag為一個bool的變數而沒給flag一個初定值. 所以flag在執行迴圈之前的值是個亂數. 也就是說flag可能是true也可能是false.  因此, 當A是質數時你的程式有時會顯示"這是一個實數"的正確答案,有時會顯示"這是一個實數"的錯誤答案.要解決此問題很簡單. 你只要在迴圈之前把flag的初定值設好就行了. flag的初定值應是什麼值? 自己想想看. 給你一個提示, A是質數的話,那flag在執行迴圈之後的值會跟在執行迴圈之前的值一樣.而flag的值執行迴圈之後要是false才能顯示"這是一個實數"懂不懂?不懂請再問

    Source(s): Myself
Still have questions? Get your answers by asking now.