注册 登录
编程论坛 C++教室

关于一段代码的疑问

kybo04 发布于 2009-11-16 22:51, 496 次点击
#include "stdafx.h"
#include<math.h>

#include <iostream>        
using namespace std;   


int main()
{
    int nStart=0,nEnd=0;        //整数区间的最小值和最大值
    int nCnt1=0,nCnt2=0;    //循环计数器
    int nSqrt;                //存储平方根值
    int nNum=0;            //计算出的素数个数
    cout<<"输入整数区间的最小值:";
    cin>>nStart;
    cout<<"输入整数区间的最大值:";
    cin>>nEnd;
    for(nCnt1=nStart;nCnt1<=nEnd;nCnt1++){    //利用循环分别验证每一个数是否为素数
        nSqrt=sqrt(nCnt1);                    //sqrt()为求平方根函数,其原型在math.h中
        //以下循环是判断nCnt1是否能被2到nSqrt整除
        for(nCnt2=2;nCnt2<=nSqrt;nCnt2++)
        if(nCnt1%nCnt2==0)    break;    //如果能整除,说明为非素数,循环退出
         
        if(nCnt2>=nSqrt+1){
            cout<<nCnt1<<" ";
            nNum=nNum+1;
        };
        
            if(nNum%10==0) cout<<endl;    //每输出10个素数,则进行换行
        };
   
    cout<<"共有"<<nNum<<"个素数。"<<endl;
    return 0;
}

这段代码是求给定一个任意区间内所有的素数。
代码是没有问题,VC上也能运行,但是小弟有一个问题不明白。
假如nCnt1=2,则nSqrt=√2.
然后进入第二个for语句,nCnt2<=nSqrt不成立,退出。
到下一个if语句,if(nCnt2>=nSqrt+1)明显也是不成立的,那计算机最后是怎么会显示2的呢?但是计算机确实显示了2.

还请各位大哥大姐指点。。。

2 回复
#2
qlc002009-11-16 23:23
因为nSqrt是整形,在这里就是1.if语句里正好相等,所以执行
#3
kybo042009-11-16 23:29
哇,一语道破,太感谢了,小弟刚学C++,不好意识了。
分给你了·再次感谢·

[ 本帖最后由 kybo04 于 2009-11-16 23:31 编辑 ]
1