周日-瑞金-15:00-c++

一 计算机基础知识

1. 计算机历史

①.计算机的基本概念

  1. 信息技术的概念
    信息技术(Information Technology,缩写IT)是管理和处理信息所采用的各种技术的总称,也常被称为信息和通信技术(Information and Communications Technology,ICT)
  2. 什么是计算机
    计算机(computer):俗称电脑,是一种能够自动执行指令并高速处理数据的电子设备,没有计算功能的电子设备不能称之为电脑。科学数值计算是计算机最早的应用领域,也是计算机最初研发的初衷;数据和信息处理是目前计算机应用最广泛的领域(数据和信息处理和科学计算的区别是,数据和信息处理不涉及复杂的数学计算)。

②.计算机历史

  1. 计算机的诞生
  • 世界上第一台真正意义上的电子计算机/世界上第一台通用电子计算机:美国的埃尼阿克ENIAC,译成中文是“电子数字积分和计算机”。
  • 世界上第一台第一台并行电子计算机/世界上第一台第一台冯诺依曼体系的电子计算机:美国的EDVAC,译成中文是“离散变量自动电子计算机”。
  • 中国第一台通用数字电子计算机:中国的103机。
    在这里插入图片描述
  1. 计算机的四代发展
  • 第1代:电子管计算机。电子管作为逻辑元器件,1946年诞生于美国宾夕法尼亚大学的ENIAC、中国第一台通用数字电子计算机103机都属于电子管数字机。
  • 第2代:晶体管计算机。晶体管作为逻辑元器件
  • 第3代:中小规模集成电路计算机。晶体管组成的中小规模集成电路作为逻辑元器件。
  • 第4代:大规模和超大规模集成电路计算机。晶体管组成的大规模和超大规模集成电路作为逻辑元器件。
  • 在这里插入图片描述
    在这里插入图片描述

晶体管相关知识点

  1. 晶体管的基本原理是半导体材料,硅Si是最具有影响力的半导体,可以在沙子SiO2(二氧化硅)中提炼。
  2. 摩尔定律(Moore's law) 是由英特尔创始人之一戈登·摩尔(Gordon Moore)提出来的。根据摩尔定律,在过去几十年以及在可预测的未来几年,单块集成电路的集成度大约每18-24个月翻一番,同时价格下降为之前的一半。摩尔定律不会一直的持续下去。
  3. 1956 年诺贝尔物理学奖授予肖克利 (William Shockley) 、巴丁 (John Bardeen) 和 布拉顿 (Walter Brattain) ,以表彰他们对半导体的研究和晶体管效应的发现。

按照其规模和处理能力分可以分为:超级计算机,大型计算机,微型计算机,嵌入式计算机。

超级计算机:高速度,大容量,配有多种外部设备及丰富的,高功能系统软件。如我国首台千万亿次超级计算机“天河一号”。在2016年6月TOP500组织发布的最新一期世界超级计算机500强榜单中,神威·太湖之光超级计算机和天河二号超级计算机位居前两位。

大型计算机:使用专门处理器的指令集、操作系统和应用软件,大量使用冗余等技术确保其安全性及稳定性。擅长非数值计算。一般大型商业公司使用。

微型计算机:采用精简指令集处理器,性能和价格介于PC服务器和大型主机之间的一种高性能64位计算机。
嵌入式计算机:单片机

③.计算机人物

  1. 艾伦·麦席森·图灵(Alan Mathison Turing):英国,计算机科学之父、人工智能之父
    • 图灵机(Turing Machine):在《机器人会思考吗?》中提出一种抽象的计算模型(现实中不存在图灵机)
    • 图灵测试(The Turing test):机器与人对话,如果有30%的人把机器误判为人,则认为机器有人类智能
  2. 约翰·冯·诺依曼(John von Neumann):美籍匈牙利人,现代计算机之父、博弈论之父
    • 起草《关于EDVAC的报告草案》,领导EDVAC的设计
    • 提出冯·诺依曼体系结构/普林斯顿结构,成为现代计算机发展所遵循的基本结构形式
    • 二进制逻辑。计算机用二进制进行运算
    • 程序存储。通过计算机内部存储器保存运算程序,程序员仅仅通过存储器写入相关运算指令,计算机便能立即执行运算操作
    • 计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)
  3. 克劳德·艾尔伍德·香农(Claude Elwood Shannon):美国,信息论的创始人
    • 信息熵:发表《通讯的数学原理》和《噪声下的通信》,将热力学概念“熵”引入通信领域,提出了信息量的数学表达式,为信息论和数字通信奠定了基础
    • 香农——韦弗模式:描述了电子通信过程的一般过程
  4. 阿达·洛芙莱斯(Ada Lovelace):英国,诗人拜伦之女,计算机程序创始人,第一位给计算机写程序的人
    • 建立了循环和子程序概念
    • 写作了第一份“程序设计流程图”,编写了历史上首款电脑程序
  5. 王选:发明汉字激光照排系统

在这里插入图片描述

④.计算机奖项

  1. 图灵奖
    • a.设立者:美国计算机协会(ACM)
    • b.颁奖对象:对计算机事业作出重要贡献的个人,一年一名
    • c. 评价
      • i. 计算机领域的国际最高奖项,被誉为“计算机界的诺贝尔奖”
      • ii. 2000年,中国科学家姚期智获图灵奖,这是中国人首次也是唯一一次获得图灵奖
  2. 王选奖
    • a. 设立者:中国计算机学会(CCF)
    • b. 颁奖对象:一年至多两人。其中一名奖励学术,一名奖励技术或工程。

2.计算机组成原理

①计算机系统的组成

1945年6月约翰·冯·诺依曼与其他人联名发表《First Draft of a Report on the EDVAC(关于EDVAC的报告初稿)》,即计算机史上著名的 “101页报告” ,明确提出了计算机的体系架构。从EDVAC开始,计算机经历了多次的更新换代,不管是最原始的、还是最先进的计算机,使用的仍然是冯·诺依曼最初设计的计算机体系结构
冯·诺依曼体系(又称普林斯顿结构)主要包括以下三条:

  1. 计算机采用二进制作为计算机数值计算的基础
  2. 计算机采用程序存储原则,通过计算机内部存储器保存运算程序,程序员仅仅通过存储器写入相关运算指令,计算机便能立即执行运算操作
  3. 计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备)

在这里插入图片描述

②输入输出系统

  1. 输入设备:向计算机输入数据和信息的设备。
    ——键盘,鼠标,麦克风,摄像头,扫描仪,手写输入板,游戏手柄……
  2. 输出设备:用于接收计算机数据的输出显示、打印、声音、控制外围设备操作
    ——显示器、打印机、绘图仪……

显示器的分辨率决定了图像细节的精细程度。图像的分辨率越高,所包含的像素就越多,图像就越清晰,印刷的质量也就越好,也会增加文件占用的存储空间。但是,显示器的分辨率和屏幕大小没有必然关系。
RGB色彩模式通过对红(R)、绿(G)、蓝(B) 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一,我们的显示器一般也是RGB系统的。
当前广泛使用的触摸屏既是输出设备又是输入设备。

③处理器系统

CPU中央处理器(Central Processing Unit)是计算机处理器系统的主要组成部分,是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元,直接运行机器语言
在这里插入图片描述

  1. CPU的组成
    • 运算器/算术逻辑单元ALU(arithmetic and logic unit) :实现多组算术运算和逻辑运算的组合逻辑电路。
    • 寄存器:CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。
    • 控制器:控制机器各个部件协调工作
  2. CPU厂家与型号
    • 常见的CPU生产商:英特尔(Intel)、AMD、ARM、IBM、高通等。
    • 常见的CPU型号:酷睿、赛扬、奔腾、锐龙等。

Intel公司发明了世界上第一个商用微处理器,即Intel 4004。但是,如果我们谈论的是CPU这一概念本身,那么它并不是由Intel公司发明的;CPU的概念在Intel 4004之前就已经存在了,只是没有集成到单一的芯片上。

④ 存储器系统

在这里插入图片描述

  1. 内存又称主存,和CPU一起构成了计算机的主机部分,它的存储的信息可以被CPU直接访问。内存中有很多的存储单元,每个单元可以存放1个8位的二进制。即1个字节(Byte)。内存中的每个字节各有一个固定的编号,这个编号称为地址。CPU在存取器中的数据是按地址进行的。容量指的是所包含的字节数,通常用KB,MB,GB,TB,PB作为单位

计算机中的一切数据都以二进制的形式进行传输,二进制数据的容量大小有自己的系列单位
1个二进制位=1个比特(b或者bit)(位),8b=1个字节(B或者Byte)。b是最小单位,B是基本单位
1B=8b
1KB=1024B 【210B】
1MB=1024KB 【220B】
1GB=1024MB 【230B】
1TB=1024GB【240B】
1PB=1024TB【250B】

RAM:又称随机存储器。其内容可以随时根据需要进行读写。当掉电时,RAM中内容全部丢失。

ROM:是一种内容只能被读出而不能写入的内容。其存储信息在制作时就已经被写入的。计算机断电后,信息不会丢失。主要用来检查计算机系统的配置情况并提供基本的IO控制程序。

Cache:是CPU与内存之间设置的一级或者两家高速小容量存储器,固化在主板上,由于CPU的速度不断提高,RAM的速度很难满足CPU的要求,所以有了缓存。在计算机工作时,系统先将外存数据读入RAM中,再由RAM读入Cache中,然后CPU直接从Cache中读取数据进行操作。
在这里插入图片描述

  • 外存

  • a. 除计算机内存及CPU缓存以外的储存器
    硬盘:计算机最主要的存储设备。大多数微机上安装的硬盘,由于都采用温切斯特(winchester)技术而被称之为“温切斯特硬盘”,或简称“温盘”。
    闪存/U盘:读写速度介于软盘(已经被淘汰)和硬盘之间的外存。
    光盘CD:用激光扫描的记录和读出方式保存信息的一种介质,不会受到附近强磁场干扰。

  • b. 断电后仍然能保存数据,容量大、价格低,但是存取速度慢。

3.计算机程序和语言

①计算机语言的发展

  1. 根据抽象程度:分为低级语言和高级语言

    • 低级语言

      • 机器语言(Machine Language)

        1. 最低级的语言,用二进制代码来编写
        2. 编写的程序就是计算机能直接识别指令,其他语言编写的程序都要先变成机器语言才能被计算机识别
        3. 运行速度极快,但书写困难、记忆复杂、可移植性差(不同的计算机都有各自的机器语言)
      • 汇编语言(Assembly Language)

        1. 较为接近机器语言的低级编程语言,使用符号来表示指令和数据,也支持一些基本的程序结构
        2. 不能被计算机所识别,通过“汇编器”汇编成机器语言才能被计算机识别
        3. 虽然引入了符号,但运行速度仍然较快(可以直接访问硬件)、书写仍然比较复杂、可移植性仍然差
    • 高级语言(High-level language):较为接近人类自然语言的编程语言

      • 由于早期计算机行业的发展主要在美国,因此一般的高级语言都是以英语为蓝本
      • 高级语言的出现不代表低级语言的消失
  2. 根据执行方式:高级语言又可以分为编译型语言和解释型语言
    a. 编译型语言(Compiled Language):“编译整个,执行整个;编译一次,执行多次”。执行效率高,但可执行文件跨平台性差
    ——常见的编译型语言包括:Fortran【第一个编译型语言/第一个高级语言】、Basic、Pascal、Java、C/C++
    i. 先通过编译器(compiler) ,将源代码编译生成目标程序(.obj程序,可直接被计算机运行的机器码集合)
    ii. 再通过链接器 (Linker),将不同的目标程序的代码收集到一个可直接执行的文件(.exe)中
    b. 解释型语言(Interpreted Language):“翻译一句,执行一句;执行一次,翻译一次”。执行效率低,但是灵活,容易理解和调试
    ——常见的解释型语言包括:Lisp【第一个解释型语言】、GWBasic、PHP、JavaScript、Python
    i. 源代码不是直接整个翻译成机器语言
    ii. 而是由解释器解释一句执行一句,执行完一行再继续执行下一行

  3. 根据设计思想:高级语言又可以分为面向过程语言和面向对象语言
    a. 面向过程语言(Procedural Programming Language)

    • 程序组成:以过程或函数为中心的编程方式,程序由一系列函数组成
    • 内部交互:数据和函数是分离的,通过参数传递进行交互
    • 设计思维:“自顶向下,逐步求精”
    • 常见语言:Fortran、Basic、Pascal、C

    b. 面向对象语言(Object-Oriented Programming Language)

    • 程序组成:以类与对象为中心的编程方式,程序由一系列类与对象组成,类与对象封装了数据和函数
    • 内部交互:对象对自己的数据进行操作,同时对象可以互相交互,通过消息传递进行通信
    • 设计思维:“抽象、继承、多态”
    • 常见语言:Simula【面向对象雏形】、Smalltalk【第一个面向对象语言】、Java、Python
      Objective-Pascal、Objective-C、C++、C#

二 逻辑控制语句

1 常量与变量

①常量

常量:不可以变的量

整数常量 说明
十进制数 正常书写,不需要额外的格式
二进制数 0b或0B开头,后面跟上一串由0和1组成的数字序列
八进制数 0开头,后面跟上一串由0到7之间组成的数字序列
十六进制 0x或0X开头,后面跟上一串由0到9和A到F组成的数字序列
其中字母不区分大小写
浮点型常量 说明
小数表示 带小数点的十进制数常量的类型默认为double
科学计数法 使用e或E表示指数部分

【注】以下语句等价:
double a = 3.14e3;
double b = 3.14E3;
double c = 3.14e+3;
double d = 3.14e+00003;

字符常量 说明
单个字符 单引号引起来的单个字符,数据类型为char
转义字符 用于表示一些特殊的字符,例如换行符、制表符等,常见的转义字符如下:
\n:表示换行符(ASCII码值为10) \t:表示制表符(ASCII码值为9) \0:表示字符数组结束(ASCII码值为0)0:48 A:65 a:97

逻辑常量:1代表着真(true),0代表着假(false)
const常量
1 在 C++ 中,const关键字用于声明一个变量,其值不能被修改
2 const int x=1e7;
3 x++;//错误的,x不可修改

②变量

变量(标识符)的命名规则:

  1. 变量名只能包含字母、数字和下划线_。
  2. 变量名必须以字母或下划线开头,不能以数字开头。
  3. 变量名是区分大小写的,例如myVariable 和 myvariable 是两个不同的变量名。
  4. 变量名不能是C++ 中的关键字(例如 if、for 等),因为关键字是 C++ 中已经定义过的标识符。

【注意】:cin、cout、printf、scanf、endl、max、min、sort、sqrt....这些都是合法的标识符,都可以当作变量!!!
作用: 关键字是C++中预先保留的单词(标识符)
C++关键字如下:

asm do if return typedef
auto double inline short typeid
bool dynamic_cast int signed typename
break else long sizeof union
case enum mutable static unsigned
catch explicit namespace static_cast using
char export new struct virtual
class extern operator switch void
const false private template volatile
const_cast float protected this wchar_t
continue for public throw while
default friend register true
delete goto reinterpret_cast try

提示:在给变量或者常量起名称时候,不要用C++得关键字,否则会产生歧义。

  1. 整型
    作用:整型变量表示的是整数类型的数据
    C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同

    数据类型 占用空间 取值范围
    short(短整型) 2字节 (-215 ~ 215-1)
    int(整型) 4字节 (-231 ~ 231-1)
    unsigned int(无符号整型) 4字节 0到 232-1
    long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位) (-231 ~ 231-1)
    long long(长长整形) 8字节 (-263 ~ 263-1)
    unsigned long long(无符号长整形) 8字节 (0 ~ 264-1)

    整型结论short < int <= long <= long long

  2. 实型(浮点型)
    作用:用于表示小数
    浮点型变量分为两种:

    • 单精度float
    • 双精度double

两者的区别在于表示的有效数字范围不同。

数据类型 占用空间 有效数字范围
float 4字节 7位有效数字
double 8字节 15~16位有效数字
  1. 字符型

    作用: 字符型变量用于显示单个字符

    语法:char ch = 'a';

    注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号

    注意2:单引号内只能有一个字符,不可以是字符串

  • C和C++中字符型变量只占用1个字节

  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元
    示例:

    int main() {
    	char ch = 'a';
    	cout << ch << endl;
    	cout << sizeof(char) << endl;
    	//ch = "abcde"; //错误,不可以用双引号
    	//ch = 'abcde'; //错误,单引号内只能引用一个字符
    	cout << (int)ch << endl;  //查看字符a对应的ASCII码
    	ch = 97; //可以直接用ASCII给字符型变量赋值
    	cout << ch << endl;
    
    	return 0;
    }
    

    ASCII码表格:

    ASCII 控制字符 ASCII 字符 ASCII 字符 ASCII 字符
    0 NUT 32 (space) 64 @ 96
    1 SOH 33 ! 65 A 97 a
    2 STX 34 " 66 B 98 b
    3 ETX 35 # 67 C 99 c
    4 EOT 36 $ 68 D 100 d
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 f
    7 BEL 39 , 71 G 103 g
    8 BS 40 ( 72 H 104 h
    9 HT 41 ) 73 I 105 i
    10 LF 42 * 74 J 106 j
    11 VT 43 + 75 K 107 k
    12 FF 44 , 76 L 108 l
    13 CR 45 - 77 M 109 m
    14 SO 46 . 78 N 110 n
    15 SI 47 / 79 O 111 o
    16 DLE 48 0 80 P 112 p
    17 DCI 49 1 81 Q 113 q
    18 DC2 50 2 82 R 114 r
    19 DC3 51 3 83 S 115 s
    20 DC4 52 4 84 T 116 t
    21 NAK 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 TB 55 7 87 W 119 w
    24 CAN 56 8 88 X 120 x
    25 EM 57 9 89 Y 121 y
    26 SUB 58 : 90 Z 122 z
    27 ESC 59 ; 91 [ 123 {
    28 FS 60 < 92 / 124 |
    29 GS 61 = 93 ] 125 }
    30 RS 62 > 94 ^ 126 `
    31 US 63 ? 95 _ 127 DEL

    ASCII 码大致由以下两部分组成:

    • ASCII 非打印控制字符: ASCII 表上的数字 0-31 分配给了控制字符,用于控制像打印机等一些外围设备。
    • ASCII 打印字符:数字 32-126 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。
  1. 转义字符

作用: 用于表示一些不能显示出来的ASCII字符

现阶段我们常用的转义字符有: \n \\ \t

转义字符 含义 ASCII码值(十进制)
\a 警报 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一个反斜线字符"" 092
' 代表一个单引号(撇号)字符 039
" 代表一个双引号字符 034
? 代表一个问号 063
\0 数字0 000
\ddd 8进制转义字符,d范围0~7 3位8进制
\xhh 16进制转义字符,h范围09,af,A~F 3位16进制
  1. 布尔类型 bool
    作用: 布尔数据类型代表真或假的值
    bool类型只有两个值:
    true — 真(本质是1)
    false — 假(本质是0)
    bool类型占1个字节大小

变量基础语法

  1. int a; // 定义了一个类型为int的变量a
  2. int a = 10; // 定义并初始化变量a为10
  3. int a {10}; // 列表初始化变量a为10
  4. int a(10);// 列表初始化变量a为10

变量类型转化

在C++代码中,虽然变量都有数据类型,但同⼀个变量也可以先后⽤不同类型的值赋值。将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型称为变量的类型转换。
C++类型转换的原则:

  1. int到float/double:加上.00000
  2. float/double到int:去掉小数部分(不进行四舍五入)
  3. int到char:把int看成ASCII码,获得对应字符
  4. char到int:获得字符的ASCII码
  5. bool到int:true变1,flase变0
  6. int到bool:0遍false,非0变ture

C++类型转换的种类:

  1. 隐式类型转换(自动类型转换):不需要用户干预,编译器默认进行的类型转换行为
    • 混合类型的算术运算表达式中,由低精度向高精度的转换【char→int→float→double】。例如为了防止整数做除法丢失精度,我们通常会给式子*1.0
    • 不同类型的赋值操作时,如果能够转换,赋值符号右边的值自动转变为目标变量(赋值符号左边)的类型
  2. 显式类型转换(强制类型转换):直接将某数据强制转换成指定的数据类型。语法格式是:(类型名)(表达式)
    • (类型名)外的括号可以省略,但此时(表达式)外的括号不可省略。如cout<<int(3.14*2);
    • (表达式)外的括号当表达式就是一个常量或者变量时也可以省略,但此时(类型名)外的括号不可省略。如cout<<(int)3.14;
    • 如果希望进行类型转换的是一个复合表达式,那么这个表达式一定要整体用号括起来,否则容易出错

int与char相互转换的话,实际上是ASCII码互转

不同位置定义的变量,有不同的可用范围,这称为变量的作用域。变量根据作用域的不同可以分为局部变量全局变量

  • 局部变量:在函数或者代码块内定义的变量,下列两种作用域的变量都被称为局部变量。局部变量如果没有显式初始化,则内部为随机值。
    • 局部作用域:在函数内部定义的变量,只能在定义它们的函数内部访问。我们在主函数中(非代码块)中定义的变量全部都是局部变量。
    • 块作用域:在代码块中定义的变量具有块作用域,只能在代码块内访问。如在for中定义的i不能在for外面使用。
  • 全局变量:函数外定义的变量,可以被程序中的任何地方访问。全局变量如果没有显式初始化,自动初始化为“默认值”。

变量的默认值指的是:int和long long为0;float和double为0.0;char为'\0'(ASCII码为0的字符);bool为false;string为空串“

2.运算符

作用: 用于执行代码的运算

本章我们主要讲解以下几类运算符:

运算符类型 作用
算术运算符 用于处理四则运算
赋值运算符 用于将表达式的值赋给变量
比较运算符 用于表达式的比较,并返回一个真值或假值
逻辑运算符 用于根据表达式的值返回真值或假值

①算数运算符

作用:用于处理四则运算

算术运算符包括以下符号:

运算符 术语 示例 结果
+ 正号 +3 3
- 负号 -3 -3
+ 10 + 5 15
- 10 - 5 5
* 10 * 5 50
/ 10 / 5 2
% 取模(取余) 10 % 3 1
++ 前置递增 a=2; b=++a; a=3; b=3;
++ 后置递增 a=2; b=a++; a=3; b=2;
-- 前置递减 a=2; b=--a; a=1; b=1;
-- 后置递减 a=2; b=a--; a=1; b=2;

被除数比除数小时,商是0,余数是被除数
取模符号%只能整数之间进行取模,也不能对0取模
运算符两边如果都是整数的话,那么结果一定是整数,如果有一端是小数的话,那么结果一定是小数
如果小数参与运算结果正好是整数的话,那么结果就是double类型,没有.0

②赋值运算符

运算符 术语 示例 一般形式 结果
= 赋值运算符 a=6 a=6 6
+= 自加运算符 a+=3 a=a+3 9
-= 自减运算符 a-=3 a=a-3 6
*= 自乘运算符 a*=3 a=a*3 18
/= 自除运算符 a/=3 a=a/3 6
%= 自模运算符 a%=3 a=a%3 0

变量名 =

三 循环结构

【质数】
质数又称素数,是指任何大于1的自然数,其因子只有1和其本身,这样的数称为质数

【质数模板】

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	int n;
	bool flag=true;//定义一个标记 假设是质数为true,不是质数为false 
	cin>>n;
	//如果n是小于2的数,那么也不是质数 
	if(n<2)
		flag=false; 
	//sqrt:开根号 
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0){
			flag=false; 
			break;
		}
	}
	//只要判断flag的状态就能判断出n是不是质数 
	if(flag==true)
		cout<<"是质数";
	else
		cout<<"不是质数"; 
	return 0;
} 

【判断一个数是否为回文质数】

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	int n,ans=0,t;
	bool flag=true;//定义一个标记 假设是质数为true,不是质数为false 
	cin>>n;
	t=n;
	//sqrt:开根号 
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0){
			flag=false; 
			break;
		}
	}
	
	//只要判断flag的状态就能判断出n是不是质数 
	if(flag==true){
		//如果是质数的话就进行数位分离 
		while(t){
			ans=ans*10+t%10;
			t/=10; 
		}
	}
	if(ans==n)
		cout<<"yes";
	return 0;
} 

【求1~n之间所有的质数】

#include<iostream>
#include<cmath>
using namespace std;

int main(){
	int n,ans=0;
	cin>>n;
	for(int i=2;i<=n;i++){
		bool flag=true;//定义一个标记 假设所有的数都是质数 
		for(int j=2;j<=sqrt(i);j++)
			if(i%j==0){
				flag=false;
				break;
			} 
		if(flag==1)
			cout<<i<<endl;
	}
	return 0;
} 

唯一分解定理(分解质因数)

任何一个合数都是由若干个质因子组成,如38=223*3

#include<iostream>
using namespace std;

int main() {
	int n;
	cin>>n;
	while(n%2==0){
		cout<<2<<" ";
		n/=2;
	} 
	for(int i=3;i<n;i+=2){
		while(n%i==0){
			cout<<i<<" ";
			n/=i;
		}
	}
	if(n>2)
		cout<<n;
}

数组与字符串

1.一维数组

①.数组的定义与初始化

乐博酒店开业了,总共有100个房间。只允许乐博学员和家长入住,而且不允许房间不相邻住人。
学员家长 乐博[100]数据类型 数组名[长度] int a[100]
学员家长:类型
乐博:数组名
100:长度

  1. 如何定义一个数组:在 C++语言中,定义数组时, [] 中必须指定元素个数,数组被定义时,它的大小就确定了(可以定义 0 个元素的数组,但无意义)。

    • 静态长度一维数组:int a[4]; 定义一个长度为4的int类型数组
    • 变长数组VLA:int a[n]; 定义一个长度为n的int类型数组。该种方法必须在定义前确定n的值
    • 逐个元素的手动初始化:int a[4] = {20, 345, 700, 22}; 表示使a[0]、a[1]、a[2]、a[3],分别等于20、345、700、22
    • 数组长度的自动判断机制:int arr[] = {1, 2, 3, 4, 5}; 省略长度,自动推断为长度为5的整型数组,推断后长度不可再改。
      ——可用sizeof(arr)/sizeof(int)获取长度
    • 部分元素的自动初始化
      • 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值,不足的补以默认值
        ——int a[10]={12, 19, 22 , 993, 344};表示只给 a[0]~a[4] 5个元素赋值,而后面 5 个元素自动初始化为 0
      • 注意,VLA不支持数组初始化机制
    • 赋默认值:可以通过int nums[10] = {}; 将数组全部初始化为默认值
  2. 数组的存储大小:数组的所有元素在内存中是连续存放的,数组大小=类型大小*数组元素个数

有一天一队vex比赛的5人小组要入住酒店,并且每个队员的房间要相邻,酒店前台怎么安排房间?(循环输入)

//循环输入
int Lebo[100];
	for (int i = 0; i < 5; i++)
		cin >> Lebo[i];

晚上教练来查房,看哪间房间都住着哪位同学,怎么查找(遍历输出)

for (int i = 0; i > 5; i++)
		cout << Lebo[i];

教练在查房的时候,发现几名同学训练的分数不理想,教练想找出哪间房间的同学的成绩低于80?(循环判断)

for (int i = 0; i < 5; i++)
		if (Lebo[i] < 80)
			cout << i << ' ';

第二天比赛的时候,教练要按照门牌号从大到小的顺序排队,输出排序的顺序(逆序输出)

for (int i = 4; i >= 0; i--)
		cout << Lebo[i] << ' ';

这时候突然有个2号房间的同学生病了,不比赛要退房,那么为了保证房间的连续性,问酒店怎么安排(删除元素)

int Lebo[100];
	//循环输入
	for (int i = 0; i < 5; i++)
		cin >> Lebo[i];

	//删除2号房间
	for (int i = 2; i < 5; i++)
		Lebo[i] = Lebo[i + 1];

	//输出
	for (int i = 0; i < 4; i++)
		cout << Lebo[i] << " ";
posted @ 2025-02-23 15:11  我爱LLL  阅读(51)  评论(0)    收藏  举报