当前课程知识点:C++语言程序设计进阶 > 第九章 模板与群体数据 > 数组 > 例9-4数组类应用举例
求范围2~N中的质数,N在程序运行时由键盘输入。
#include <iostream> #include <iomanip> #include "Array.h" using namespace std; int main() { // 用来存放质数的数组,初始状态有10个元素 Array<int> a(10); int n, count = 0; cout << "Enter a value >= 2 as upper limit for prime numbers: "; cin >> n; for (int i = 2; i <= n; i++) { //检查i是否能被比它小的质数整除 bool isPrime = true; for (int j = 0; j < count; j++) //若i被a[j]整除,说明i不是质数 if (i % a[j] == 0) { isPrime = false; break; } if (isPrime) { if (count == a.getSize()) a.resize(count * 2); a[count++] = i; } } for (int i = 0; i < count; i++) cout << setw(8) << a[i]; cout << endl; return 0; }
大家好
欢迎回来继续学习
C++语言程序设计
接下来呢
我们再看一个例题
来使用我们刚才
自己封装的这个动态数组类模板
用这个动态数组类
来存放一些整数
我们要求范围2到n
之间的所有的质数
看看用这个动态数组类模板
是不是就可以很方便呢
尤其是当我们这个数据范围
是2到n
n由键盘输入
也就是说
到底一共有多少个数据
在编写程序的时候
是无法确定的
要到运行时才确定
那么尤其对这样的问题
看看动态数组类模板
是不是比普通的基本数组
要好用一些
这里我们这个数组类模板Array
指定它的类型参数是int
就是我们要
用它来让编译器
为我们生成一个类
用它来存放int数组
那构造这样一个对象a
它的初始状态是10个元素
接下来呢
从键盘输入一个n
我们要判断2到n范围
有哪些是质数
用键盘输入一个n
然后这个判断过程呢
接下来就是用这样一个
大的for循环
从2开始到n
检查每一个数是否能被
比它小的质数整除
怎么检查这个i
是否能被比它小的质数整除呢
就是它内层嵌套的这个for循环
来解决这个问题
内层嵌套的这个for循环
每一次呢
我们要检查比它小的质数
能不能整除它
那到底目前
一共有多少个质数了呢
这个质数是通过这个count
count初始化是0
开始0个质数
那i是2的时候
不会执行这个for循环
不执行这个for循环呢
那么这个是否质数的这个状态
isPrime这个状态呢
它就保持它初始的值是个true
这样在这个if语句中呢
就因为它是质数
所以就会把它放到
a count这个元素里面去
然后count下标
也就是质数的个数增1
当然在往里面放的时候
先要判断一下
当前数组是不是已经满了
如果已经满的话呢
把它的原素个数乘两倍
就是扩大一倍
当这个i是3的时候呢
会进入这个循环
那比它小的质数只有一个2
2不能整除3
所以那么结果是3是质数
3又再存到a数组里面去
count又再加1
当i是4的时候
进入到循环
会依次用2 用3去除它
看能不能整除
用2去除它的时候
就发现已经能够整除了
说明isPrime为false
4不是质数
这个时候就不必要继续
完成这个for循环
去再用3去整除它了
不用了
就直接break废除这个循环了
废除循环以后
那么在这个if语句里面一判断
那么isPrime已经是flase了
所以这个if分支就不执行了
4就没有存进去
所以用这样的办法呢
我们就可以把从2到n的数
都依次检查一遍
只有存入到a数组里面去的呢
就都是质数
那完成这个过程以后呢
我们再输出数组的所有元素 验证一下
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义