如果2< = sqrt(2)为假,while循环仍会运行?

时间:2013-09-29 00:09:38

标签: c++ if-statement while-loop

如果用户输入2,则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; 
}

2 个答案:

答案 0 :(得分:3)

while loop永远不会进入。 is_prime初始化为true(不知道为什么它是int而不是bool),因此输入if(is_prime)Number is prime.应该{}打印。

答案 1 :(得分:0)

如果您输入2,2<=sqrt(2)false。所以while循环永远不会。但是,您初始化了is_primer trueif(is_prime)会执行并输出"Number is primer"2是一本入门读物。你是这样做的