C编程灵活使用while循环和for

2023-5-17 来源:不详 浏览次数:

/*******************************************

题目:把以内(不包括)的所有素数都打印到屏幕上,并且求出素数的个数是多少?

素数释义:

在大于1的整数中,只能被1和这个数本身整除的数,如2、3、5、7、11。也叫质数。

解题思路:最直观的方法,根据定义,因为质数除了1和本身之外没有其他约数,所以判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可

以下这个程序代码是用while循环嵌套的方法来实现。

*********************************************/

#includeiostream

usingnamespacestd;

intmain()

{

intn=2;//定义一个整形的变量n来代表以内的所有整数,初始化为2

intcount=0;//整形变量count作为记录素数的个数

while(n)//外层循环每次n的值都增加1,直到99为止

{

//内层循环判断n是否是素数

inti=2;

while(1)

{

if(n==2)

{

cout以内的素数有:n;

count++;

break;

}

elseif(i==n)

{

coutn;

count++;

break;

}

elseif(n%i==0)

{

break;

}

i++;

}

n++;

}

coutendl以内的素数总数是:countendl;

system(pause);

return0;

}

运行结果如下:

上述判断方法,明显存在效率极低的问题。对于每个数n,其实并不需要从2判断到n-1,我们知道,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数.现在让我们用一个for循环的嵌套来实现。程序如下:

#includeiostream

#includemath.h

usingnamespacestd;

intmain()

{

intn=2,count=0;

for(;n;)

{

if(n==2)

{

cout以内的素数是:n;

count++;

n++;

continue;

}

intk=sqrt(n);//k用来记录n的平方根

boolflag=true;//定义bool类型的变量flag,如果判断到不是素数就把该变量置为false

//内层for循环判断n是否是素数

for(inti=2;i=k;i++)

{

if(n%i==0)

{

flag=false;

break;

}

}

if(flag)

{

coutn;

count++;

}

n++;

}

coutendl以内的素数总数是:countendl;

system(pause);

return0;

}

运行结果如下:

希望各位能坚持不懈地坚持编写程序,成为一个牛牛的程序员。

转载请注明:
http://www.weichiyen.com/szhl/13538.html
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介

    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有 2014-2024
    今天是: