C++学习日记(2021-03-31)

本文介绍如何使用C++实现用户输入正整数判断素数的功能,并对比了不同类型的循环初始化。作者通过《C++面向对象程序设计》等教材,探讨了`isPrime`逻辑和`static_cast`与`reinterpret_cast`的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是为了考研自学的C++ / 有一点C & Java & Python基础 / 学习内容以考纲为主,较为应试 / 写一些简单的程序 / 有时会尝试编写感兴趣的系统 / 如有错误请指正

参考书目:
《C++面向对象程序设计(第2版)》 谭浩强 编著 / 及其配套实验手册
《C++程序设计教程》(第2版) 刘慧宁 孟威 等编著 / 及其配套实验手册
《C++程序设计》(第三版) Rick Mercer著

循环语句

题目:

判断用户输入的正整数n是否为素数(n < 1000),直到用户输入1为止。

分析:

读入用户输入的数据,判断是否为素数,判断完成后,返回判断结果,用户继续输入下一个数据,直到用户输入的数据是1,循环结束。

三个数据节点:0(正整数),1000,1

步骤:

  1. 读入用户输入的数据
  2. 判断是否是正整数 / 是否小于1000
  3. 如判断为false,让用户重新输入数据,重复1、2
  4. 如判断为true,接着判断是否为素数
  5. 输出结果
  6. 重复上述所有步骤,直到用户输入的数据是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种类型转换方式:

  1. static_cast:静态转换
  • 用于类层次结构中父类和子类的转换时:上行转换时是安全的,下行转换时不安全;
  • 用于基本数据类型之间的转换时:安全性需要由程序员自行保证。
  1. const_cast:常量转换
    用于修改const属性
  2. dynamic_cast: 动态转换
  • 主要用于类层次间的上行转换和下行转换
  • 进行上行转换时,效果与static_cast一致
  • 进行下行转换时,具有类型检查功能,比static_cast安全
  1. reinterpret_cast
    强制类型转换,可将一类型转换为另一不相关类型
 int i = 5;
 int* p = reinterpret_cast<int*>(i);

参考文章:[C++]面向对象之C++类型转换-006

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值