标题:关于一段代码的疑问
只看楼主
kybo04
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-11-16
结帖率:100%
已结贴  问题点数:10 回复次数:2 
关于一段代码的疑问
#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.

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

搜索更多相关主题的帖子: 代码 疑问 
2009-11-16 22:51
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
得分:10 
因为nSqrt是整形,在这里就是1.if语句里正好相等,所以执行

Anything is possible!
2009-11-16 23:23
kybo04
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-11-16
得分:0 
哇,一语道破,太感谢了,小弟刚学C++,不好意识了。
分给你了·再次感谢·

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-292553-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.225546 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved