-1

如果用户输入 2,那么 while 循环的第一次运行会显示 while 2 <= sqrt(2)。现在,2 大于 sqrt(2),那么这个程序是如何运行的呢?2 <= sqrt(2)会是假的,那又怎样?

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    int  n;   // Number to test for prime-ness
    int  i;   // Loop counter
    int  is_prime = true;   // Boolean flag...
                            // Assume true for now.

    // Get a number from the keyboard.
    cout << "Enter a number and press ENTER: ";
    cin >> n;

    // Test for prime by checking for divisibility
    //  by all whole numbers from 2 to sqrt(n).
    i = 2;

    while (i <= sqrt(n)) {   // While i is <= sqrt(n),
        if (n % i == 0)        //  If i divides n,
            is_prime = false;  //    n is not prime.
        i++;                   //  Add 1 to i.
    }

    // Print results
    if (is_prime)
        cout << "Number is prime." << endl;
    else
        cout << "Number is not prime." << endl;

    system("PAUSE");
    return 0; 
}
4

2 回答 2

3

while loop永不进入。is_prime被初始化为true(不知道为什么它是 anint而不是 a bool),所以if(is_prime)被输入,并且Number is prime.应该打印。

于 2013-09-29T00:16:09.813 回答
0

如果你输入2,2<=sqrt(2)的是false. 所以while循环永远不会发生。但是你初始化is_primer true了,if(is_prime)就会做和输出"Number is primer"2是底漆。你这样做是对的

于 2013-09-29T00:44:58.077 回答