是为了考研自学的C++ / 有一点C & Java & Python基础 / 学习内容以考纲为主,较为应试 / 写一些简单的程序 / 有时会尝试编写感兴趣的系统 / 如有错误请指正
参考书目:
《C++面向对象程序设计(第2版)》 谭浩强 编著 / 及其配套实验手册
《C++程序设计教程》(第2版) 刘慧宁 孟威 等编著 / 及其配套实验手册
《C++程序设计》(第三版) Rick Mercer著
循环语句
题目:
判断用户输入的正整数n是否为素数(n < 1000),直到用户输入1为止。
分析:
读入用户输入的数据,判断是否为素数,判断完成后,返回判断结果,用户继续输入下一个数据,直到用户输入的数据是1,循环结束。
三个数据节点:0(正整数),1000,1
步骤:
- 读入用户输入的数据
- 判断是否是正整数 / 是否小于1000
- 如判断为false,让用户重新输入数据,重复1、2
- 如判断为true,接着判断是否为素数
- 输出结果
- 重复上述所有步骤,直到用户输入的数据是1
代码:
#include <iostream>
#include <cmath>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main( ) {
int n;
bool isPrime;
cout << "Enter a positive integer less than 1000: ";
cin >> n;
while(n != 1){
if(n < 0 || n > 1000){
cout << "Wrong input! Please enter another number: ";
cin >> n;
continue;
}
isPrime = 1;
for(int i = floor(sqrt(n)); i>=2; i--){
if(n % i == 0){
isPrime = 0;
break;
}
}
cout << "This integer " << (isPrime?"is":"isn't") << " prime number." << endl;
cout << "Enter a positive integer less than 1000: ";
cin >> n;
}
return 0;
}
结果:
笔记:
与书上提供参考答案大致相同,for循环的初始值略有不同
//我的代码
for(int i = floor(sqrt(n)); i>=2; i--)
//书上代码
for(i = static_cast<int>(sqrt(n)); i>=2; i--)
static_cast<type>是C++的类型转换语句,
比强制类型转换直接加(type)进行转换安全;
前者在编译时会进行类型检查,而后者不会。
而我采用的方法是n^(1/2)取整,
虽然方法不一样,但是目的相同。
C++提供了4种类型转换方式:
- static_cast:静态转换
- 用于类层次结构中父类和子类的转换时:上行转换时是安全的,下行转换时不安全;
- 用于基本数据类型之间的转换时:安全性需要由程序员自行保证。
- const_cast:常量转换
用于修改const属性 - dynamic_cast: 动态转换
- 主要用于类层次间的上行转换和下行转换
- 进行上行转换时,效果与static_cast一致
- 进行下行转换时,具有类型检查功能,比static_cast安全
- reinterpret_cast
强制类型转换,可将一类型转换为另一不相关类型
int i = 5;
int* p = reinterpret_cast<int*>(i);