目录
C++开发概述
C++特点
C++跨平台的原因
C++编译器
C++库
操作系统API
C++基本概念
注释
变量
常量
两种定义常量方式的区别
表示符命名规则
常见的关键字
数据类型
整型
浮点数
字符型
转义字符
字符串型
布尔类型
运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
程序流程结构
选择结构
if语句
三目运算符
Switch语句
循环结构
while循环语句
do...while循环语句
for循环语句
跳转语句
break语句
continue语句
goto语句
C++开发概述
C++特点
C++是一种通用的编程语言,它以C语言为基础,并添加了面向对象编程的特性。C++具有高效性、灵活性和可移植性,被广泛应用于开发各种类型的软件和系统。
下面详细介绍C++的一些关键特性和概念:
-
面向对象编程(OOP):C++支持面向对象的编程范式,可以使用类、对象、继承、多态等概念来组织和管理程序的结构。面向对象编程使得程序更加模块化、可重用和易于维护。
-
泛型编程:C++引入了模板(Templates)概念,允许开发者编写通用的代码,可以在不同的数据类型上工作。泛型编程提供了高度的代码复用和灵活性。
-
标准库:C++标准库提供了丰富的功能和数据结构,包括容器(如向量、链表、映射等)、算法(如排序、搜索、数值运算等)、输入/输出、多线程等。标准库的使用可以大大简化开发过程,并提供高效的实现。
-
内存管理:C++提供了细粒度的内存控制,开发者可以手动分配和释放内存。这个特性使得C++在一些对性能和资源管理要求较高的应用中具备优势,但也需要开发者更加谨慎地处理内存,避免出现内存泄漏和悬挂指针等问题。
-
强大的指针操作:C++支持指针操作,可以直接访问和操纵内存地址。指针的使用可以提供更高的灵活性和底层控制,但也需要开发者注意指针的正确使用,避免出现空指针和非法访问等错误。
-
高性能:C++编译后生成的机器码效率高,可以直接访问底层硬件,实现高性能的应用程序。C++的底层控制和优化能力使得它成为一些对性能要求较高的领域(如游戏开发、嵌入式系统等)的首选语言。
-
可移植性:C++代码可以在不同的平台上编译和运行,保证程序在不同环境下的兼容性。这使得C++成为开发跨平台应用程序的一种理想选择。
C++跨平台的原因
C++是一种跨平台的编程语言,可以在不同的操作系统上运行,如Windows和Linux。这是因为C++的编译过程将源代码转换为目标机器代码,这些目标机器代码是特定于操作系统和硬件平台的。
C++的跨平台性来自于以下几个方面:
-
标准化:C++是由ISO/IEC标准化组织制定的一种编程语言标准。这意味着编写符合C++标准的代码,可以确保在不同的编译器和平台上得到相同的行为。
-
编译器支持:C++的编译器,如GCC、Clang和Visual C++,都提供了对多个平台的支持。它们将C++源代码编译为机器码,使其能够在不同的操作系统上运行。
-
跨平台库和框架:许多开源库和框架,如Boost、Qt和STL,提供了跨平台的API和功能。这些库和框架可以在不同的操作系统上使用,使得开发者可以更方便地编写跨平台的C++应用程序。
-
操作系统抽象层:操作系统提供了一些抽象层,如POSIX(可移植操作系统接口),它定义了一组操作系统接口标准,使得应用程序可以在不同的POSIX兼容系统上运行。
通过这些机制,C++在不同的操作系统上能够编译和执行,从而实现了跨平台的特性。开发者可以编写一次C++代码,然后使用适当的编译器和库,在不同的平台上进行编译和运行,从而实现跨平台的应用程序。
C++编译器
C++编译器有很多种,以下是一些常见的C++编译器:
-
GCC(GNU Compiler Collection):GCC是一个开源的编译器集合,包括GNU C++编译器(g++)。它是一个功能强大、广泛使用的编译器,在多个平台上都有支持。
-
Clang:Clang是一个开源的C++编译器,由LLVM项目开发。它被设计为高度可扩展和可靠的编译器,支持C++11、C++14、C++17等标准。
-
Visual C++:Visual C++是Microsoft Visual Studio集成开发环境(IDE)中的C++编译器。它提供了强大的开发工具和调试功能,适用于Windows平台的C++开发。
-
Intel C++ Compiler:由英特尔开发的C++编译器,专为英特尔处理器优化。它提供了高性能和优化功能,并支持多个操作系统和平台。
-
Xcode Clang:Xcode集成开发环境中的Clang编译器,适用于macOS和iOS平台的C++开发。它提供了先进的代码分析、调试和性能工具。
这些编译器都支持C++的不同版本和标准,并提供了各种优化和调试功能,可以根据个人需求和项目要求选择最适合的编译器。
C++库
C++的库是指提供了一系列函数、类和数据结构的代码集合,可以供开发者在自己的程序中使用。C++的库分为标准库和第三方库两种类型。
-
标准库:C++标准库是C++语言的一部分,包括了标准模板库(STL)和标准函数库两个主要组成部分。
-
标准模板库(STL):STL提供了一系列通用的数据结构和算法,如容器(vector、list、map等)、迭代器、算法(排序、查找等)、函数对象等。这些组件可以帮助开发者更方便地管理数据和实现常见的操作。
-
标准函数库:标准函数库提供了一系列常用的函数和类,用于处理输入输出、字符串处理、数学运算、时间日期、动态内存管理、异常处理等方面的操作。
-
-
第三方库:第三方库是由独立的开发者或组织创建的,不属于C++标准库的库。这些库提供了各种不同的功能扩展和工具,可以帮助开发者更高效地开发应用程序。
-
图形库:图形库用于图形界面的创建和处理,如Qt、SFML、OpenGL等。
-
网络库:网络库用于网络通信和协议处理,如Boost.Asio、Poco库等。
-
数据库库:数据库库用于与数据库进行交互,如MySQL Connector/C++、SQLite、ODBC等。
-
数学库:数学库提供了数值计算和科学计算的功能,如Eigen、GSL(GNU Scientific Library)等。
-
图像处理库:图像处理库用于图像处理和计算机视觉,如OpenCV、CImg等。
-
并发和多线程库:这些库用于并发编程、多线程处理和并行计算,如OpenMP、Intel TBB、C++11线程库等。
-
单元测试库:单元测试库用于编写和运行测试用例,如Google Test、Catch2等。
-
其他功能库:还有许多其他类型的库,如音频处理库、机器学习库、加密库等,根据具体需求可以选择合适的库来使用。
-
操作系统API
操作系统API(Application Programming Interface)是操作系统提供给开发者使用的一组函数和接口,用于访问和控制操作系统的功能和资源。不同的操作系统会有不同的API,下面是一些常见操作系统的API简介:
-
Windows API:Windows操作系统提供了Win32 API(也称为Windows API),它是使用C语言编写的一组函数和接口,用于访问和控制Windows操作系统的功能。它包括了各种功能,如窗口管理、文件操作、网络通信、进程管理等。
-
POSIX API:POSIX(Portable Operating System Interface)是一组操作系统标准接口的规范,旨在提供可移植性和兼容性。POSIX API定义了一系列函数和接口,用于访问和控制UNIX、Linux等POSIX兼容操作系统的功能,如文件操作、进程管理、线程操作、信号处理等。
-
macOS API:macOS操作系统是基于UNIX的,因此它可以使用POSIX API来访问和操作操作系统功能。此外,macOS还提供了一些特定于其平台的API,如Cocoa框架和Core Foundation框架,用于开发Mac应用程序。
-
iOS API:iOS是苹果移动设备(iPhone、iPad等)的操作系统,它使用了类似于macOS的API,如Cocoa Touch框架和Core Foundation框架,用于开发iOS应用程序。
-
Android API:Android操作系统提供了一组Java API和C/C++ API,用于开发Android应用程序。Java API用于应用程序的开发,C/C++ API用于底层的系统和硬件访问。
C++基本概念
注释
作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码
两种格式
-
单行注释:
// 描述信息
-
通常放在一行代码的上方,或者一条语句的末尾,==对该行代码说明==
-
-
多行注释:
/* 描述信息 */
-
通常放在一段代码的上方,==对该段代码做整体说明==
-
提示:编译器在编译代码时,会忽略注释的内容
变量
作用:给一段指定的内存空间起名,方便操作这段内存
语法:数据类型 变量名 = 初始值;
示例:
#include<iostream>
using namespace std;
int main() {
//变量的定义
//语法:数据类型 变量名 = 初始值
int a = 10;
cout << "a = " << a << endl;
system("pause");
return 0;
}
注意:C++在创建变量时,必须给变量一个初始值,否则会报错
常量
作用:用于记录程序中不可更改的数据
C++定义常量两种方式
-
#define 宏常量:
通常在文件上方定义,表示一个常量,会在预处理时进行替换#define 常量名 常量值
-
const修饰的变量
通常在变量定义前加关键字const,修饰该变量为常量,不可修改const 数据类型 常量名 = 常量值
示例:
//1、宏常量
#define day 7
int main() {
cout << "一周里总共有 " << day << " 天" << endl;
//day = 8; //报错,宏常量不可以修改
//2、const修饰变量
const int month = 12;
cout << "一年里总共有 " << month << " 个月份" << endl;
//month = 24; //报错,常量是不可以修改的
system("pause");
return 0;
}
两种定义常量方式的区别
#define
和const
都可以用来声明常量,但它们在实现和使用上有一些区别。
-
#define
是一个预处理指令,它在编译之前对代码进行文本替换。#define
用于定义宏常量,通过编译器将宏名替换为相应的值。例如:#define PI 3.14159
在代码中使用
PI
时,编译器会将其替换为3.14159
。#define
没有类型检查,没有作用域限制,也没有存储空间。 -
const
是一个类型修饰符,用于声明具有常量值的变量。const
常量在编译时被确定并分配了存储空间,它有类型检查和作用域限制。例如:const double PI = 3.14159;
这里声明了一个名为
PI
的常量,它的值是3.14159
,并且被指定为double
类型。const
常量具有类型信息,可以进行类型安全检查,并且在作用域内有效。
主要区别如下:
#define
定义的常量是在预处理阶段进行简单的文本替换,而const
常量在编译阶段进行类型检查并分配存储空间。#define
没有类型检查,而const
常量具有类型信息,可以进行类型安全检查。#define
没有作用域限制,而const
常量在声明所在的作用域内有效。#define
可以用于定义宏,可以进行更复杂的替换操作,而const
常量只能用于声明变量的常量值。
表示符命名规则
作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则
-
标识符不能是关键字
-
标识符只能由字母、数字、下划线组成
-
第一个字符必须为字母或下划线
-
标识符中字母区分大小写
建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人的阅读
常见的关键字
数据类型
C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存
整型
作用:整型变量表示的是==整数类型==的数据
C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:
数据类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2字节 | (-2^15 ~ 2^15-1) |
int(整型) | 4字节 | (-2^31 ~ 2^31-1) |
long(长整形) | Windows为4字节,Linux为4字节(32位),8字节(64位) | (-2^31 ~ 2^31-1) |
long long(长长整形) | 8字节 | (-2^63 ~ 2^63-1) |
szieof关键字
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法: sizeof( 数据类型 / 变量)
示例:
int main() {
cout << "short 类型所占内存空间为: " << sizeof(short) << endl;
cout << "int 类型所占内存空间为: " << sizeof(int) << endl;
cout << "long 类型所占内存空间为: " << sizeof(long) << endl;
cout << "long long 类型所占内存空间为: " << sizeof(long long) << endl;
system("pause");
return 0;
}
浮点数
作用:用于表示小数
浮点型变量分为两种:
-
单精度float
-
双精度double
两者的区别在于表示的有效数字范围不同。
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |
示例:
int main() {
float f1 = 3.14f;
double d1 = 3.14;
cout << f1 << endl;
cout << d1<< endl;
cout << "float sizeof = " << sizeof(f1) << endl;
cout << "double sizeof = " << sizeof(d1) << endl;
//科学计数法
float f2 = 3e2; // 3 * 10 ^ 2
cout << "f2 = " << f2 << endl;
float f3 = 3e-2; // 3 * 0.1 ^ 2
cout << "f3 = " << f3 << endl;
system("pause");
return 0;
}
字符型
作用:字符型变量用于显示单个字符
语法: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;
system("pause");
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 分配给了能在键盘上找到的字符,当查看或打印文档时就会出现。
char a='x';
int b=(char)a;
转义字符
作用:用于表示一些==不能显示出来的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范围0~9,a~f,A~F | 3位16进制 |
示例:
int main() {
cout << "\\" << endl;
cout << "\tHello" << endl;
cout << "\n" << endl;
system("pause");
return 0;
}
字符串型
作用:用于表示一串字符
两种风格
-
C风格字符串:
char 变量名[] = "字符串值"
示例:
int main() { char str1[] = "hello world"; cout << str1 << endl; system("pause"); return 0; }
注意:C风格的字符串要用双引号括起来
-
C++风格字符串:
string 变量名 = "字符串值"
示例:
int main() { string str = "hello world"; cout << str << endl; system("pause"); return 0; }
注意:C++风格字符串,需要加入头文件#include<string>
布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值:
-
true --- 真(本质是1)
-
false --- 假(本质是0)
bool类型占==1个字节==大小
示例:
int main() {
bool flag = true;
cout << flag << endl; // 1
flag = false;
cout << flag << endl; // 0
cout << "size of bool = " << sizeof(bool) << endl; //1
system("pause");
return 0;
}
运算符
作用:用于执行代码的运算
本章我们主要讲解以下几类运算符:
运算符类型 | 作用 |
---|---|
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式的比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
算术运算符
作用:用于处理四则运算
算术运算符包括以下符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
+ | 正号 | +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; |
示例1:
//加减乘除
int main() {
int a1 = 10;
int b1 = 3;
cout << a1 + b1 << endl;
cout << a1 - b1 << endl;
cout << a1 * b1 << endl;
cout << a1 / b1 << endl; //两个整数相除结果依然是整数
int a2 = 10;
int b2 = 20;
cout << a2 / b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 / b3 << endl; //报错,除数不可以为0
//两个小数可以相除
double d1 = 0.5;
double d2 = 0.25;
cout << d1 / d2 << endl;
system("pause");
return 0;
}
总结:在除法运算中
除数不能为0
10/3=3
10%3=1
a=1;
b[a++]=b[1],a+1
b[++a]=a=1,b[2];
示例2:
//取模
int main() {
int a1 = 10;
int b1 = 3;
cout << 10 % 3 << endl;
int a2 = 10;
int b2 = 20;
cout << a2 % b2 << endl;
int a3 = 10;
int b3 = 0;
//cout << a3 % b3 << endl; //取模运算时,除数也不能为0
//两个小数不可以取模
double d1 = 3.14;
double d2 = 1.1;
//cout << d1 % d2 << endl;
system("pause");
return 0;
}
总结:只有整型变量可以进行取模运算
示例3:
//递增
int main() {
//后置递增
int a = 10;
a++; //等价于a = a + 1
cout << a << endl; // 11
//前置递增
int b = 10;
++b;
cout << b << endl; // 11
//区别
//前置递增先对变量进行++,再计算表达式
int a2 = 10;
int b2 = ++a2 * 10;
cout << b2 << endl;
//后置递增先计算表达式,后对变量进行++
int a3 = 10;
int b3 = a3++ * 10;
cout << b3 << endl;
system("pause");
return 0;
}
总结:前置递增先对变量进行++,再计算表达式,后置递增相反
赋值运算符
作用:用于将表达式的值赋给变量
赋值运算符包括以下几个符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
= | 赋值 | a=2; b=3; | a=2; b=3; |
+= | 加等于 | a=0; a+=2; | a=2; |
-= | 减等于 | a=5; a-=3; | a=2; |
*= | 乘等于 | a=2; a*=2; | a=4; |
/= | 除等于 | a=4; a/=2; | a=2; |
%= | 模等于 | a=3; a%2; | a=1; |
示例:
int main() {
//赋值运算符
// =
int a = 10;
a = 100;
cout << "a = " << a << endl;
// +=
a = 10;
a += 2; // a = a + 2;
cout << "a = " << a << endl;
// -=
a = 10;
a -= 2; // a = a - 2
cout << "a = " << a << endl;
// *=
a = 10;
a *= 2; // a = a * 2
cout << "a = " << a << endl;
// /=
a = 10;
a /= 2; // a = a / 2;
cout << "a = " << a << endl;
// %=
a = 10;
a %= 2; // a = a % 2;
cout << "a = " << a << endl;
system("pause");
return 0;
}
比较运算符
作用:用于表达式的比较,并返回一个真值或假值
比较运算符有以下符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
== | 相等于 | 4 == 3 | 0 |
!= | 不等于 | 4 != 3 | 1 |
< | 小于 | 4 < 3 | 0 |
> | 大于 | 4 > 3 | 1 |
<= | 小于等于 | 4 <= 3 | 0 |
>= | 大于等于 | 4 >= 1 | 1 |
示例:
int main() {
int a = 10;
int b = 20;
cout << (a == b) << endl; // 0
cout << (a != b) << endl; // 1
cout << (a > b) << endl; // 0
cout << (a < b) << endl; // 1
cout << (a >= b) << endl; // 0
cout << (a <= b) << endl; // 1
system("pause");
return 0;
}
注意:C和C++ 语言的比较运算中, ==“真”用数字“1”来表示, “假”用数字“0”来表示。==
逻辑运算符
作用:用于根据表达式的值返回真值或假值
逻辑运算符有以下符号:
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真; 如果a为真,则!a为假。 |
&& | 与 | a && b | 如果a和b都为真,则结果为真,否则为假。 |
|| | 或 | a || b | 如果a和b有一个为真,则结果为真,二者都为假时,结果为假。 |
示例1:逻辑非
//逻辑运算符 --- 非
int main() {
int a = 10;
cout << !a << endl; // 0
cout << !!a << endl; // 1
system("pause");
return 0;
}
总结: 真变假,假变真
示例2:逻辑与
//逻辑运算符 --- 与
int main() {
int a = 10;
int b = 10;
cout << (a && b) << endl;// 1
a = 10;
b = 0;
cout << (a && b) << endl;// 0
a = 0;
b = 0;
cout << (a && b) << endl;// 0
system("pause");
return 0;
}
总结:逻辑==与==运算符总结: ==同真为真,其余为假==
示例3:逻辑或
//逻辑运算符 --- 或
int main() {
int a = 10;
int b = 10;
cout << (a || b) << endl;// 1
a = 10;
b = 0;
cout << (a || b) << endl;// 1
a = 0;
b = 0;
cout << (a || b) << endl;// 0
system("pause");
return 0;
}
逻辑==或==运算符总结: ==同假为假,其余为真==
程序流程结构
C/C++支持最基本的三种程序运行结构:==顺序结构、选择结构、循环结构==
-
顺序结构:程序按顺序执行,不发生跳转
-
选择结构:依据条件是否满足,有选择的执行相应功能
-
循环结构:依据条件是否满足,循环多次执行某段代码
选择结构
if语句
作用:执行满足条件的语句
if语句的三种形式
-
单行格式if语句
-
多行格式if语句
-
多条件的if语句
1. 单行格式if语句:if(条件){ 条件满足执行的语句 }
int main() {
//选择结构-单行if语句
//输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印
int score = 0;
cout << "请输入一个分数:" << endl;
cin >> score;
cout << "您输入的分数为: " << score << endl;
//if语句
//注意事项,在if判断语句后面,不要加分号
if (score > 600)
{
cout << "我考上了一本大学!!!" << endl;
}
system("pause");
return 0;
}
2. 多行格式if语句:if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else
{
cout << "我未考上一本大学" << endl;
}
system("pause");
return 0;
}
3. 多条件的if语句:if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
system("pause");
return 0;
}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
int main() {
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
if (score > 700)
{
cout << "我考上了北大" << endl;
}
else if (score > 650)
{
cout << "我考上了清华" << endl;
}
else
{
cout << "我考上了人大" << endl;
}
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
system("pause");
return 0;
}
三目运算符
作用: 通过三目运算符实现简单的判断
语法:表达式1 ? 表达式2 :表达式3
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
示例:
int main() {
int a = 10;
int b = 20;
int c = 0;
c = a > b ? a : b;
cout << "c = " << c << endl;
//C++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
system("pause");
return 0;
}
Switch语句
作用:执行多条件分支语句
语法:
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
int main() {
//请给电影评分
//10 ~ 9 经典
// 8 ~ 7 非常好
// 6 ~ 5 一般
// 5分以下 烂片
int score = 0;
cout << "请给电影打分" << endl;
cin >> score;
switch (score)
{
case 10:
case 9:
cout << "经典" << endl;
break;
case 8:
cout << "非常好" << endl;
break;
case 7:
case 6:
cout << "一般" << endl;
break;
default:
cout << "烂片" << endl;
break;
}
system("pause");
return 0;
}
注意1:switch语句中表达式类型只能是整型或者字符型
注意2:case里如果没有break,那么程序会一直向下执行
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间
循环结构
while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){ 循环语句 }
解释:==只要循环条件的结果为真,就执行循环语句==
int main() {
int num = 0;
while (num < 10)
{
cout << "num = " << num << endl;
num++;
}
system("pause");
return 0;
}
注意:在执行循环语句时候,程序必须提供跳出循环的出口,否则出现死循环
do...while循环语句
作用: 满足循环条件,执行循环语句
语法: do{ 循环语句 } while(循环条件);
注意:与while的区别在于==do...while会先执行一次循环语句==,再判断循环条件
int main() {
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
system("pause");
return 0;
}
for循环语句
作用: 满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
示例:
int main() {
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
system("pause");
return 0;
}
注意:for循环中的表达式,要用分号进行分隔
总结:while , do...while, for都是开发中常用的循环语句,for循环结构比较清晰,比较常用
跳转语句
break语句
作用: 用于跳出==选择结构==或者==循环结构==
break使用的时机:
-
出现在switch条件语句中,作用是终止case并跳出switch
-
出现在循环语句中,作用是跳出当前的循环语句
-
出现在嵌套循环中,跳出最近的内层循环语句
示例1:
int main() {
//1、在switch 语句中使用break
cout << "请选择您挑战副本的难度:" << endl;
cout << "1、普通" << endl;
cout << "2、中等" << endl;
cout << "3、困难" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "您选择的是普通难度" << endl;
break;
case 2:
cout << "您选择的是中等难度" << endl;
break;
case 3:
cout << "您选择的是困难难度" << endl;
break;
}
system("pause");
return 0;
}
示例2:
int main() {
//2、在循环语句中用break
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; //跳出循环语句
}
cout << i << endl;
}
system("pause");
return 0;
}
示例3:
int main() {
//在嵌套循环语句中使用break,退出内层循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
{
break;
}
cout << "*" << " ";
}
cout << endl;
}
system("pause");
return 0;
}
continue语句
作用:在==循环语句==中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
示例:
int main() {
for (int i = 0; i < 100; i++)
{
if (i % 2 == 0)
{
continue;
}
cout << i << endl;
}
system("pause");
return 0;
}
注意:continue并没有使整个循环终止,而break会跳出循环
goto语句
作用:可以无条件跳转语句
语法: goto 标记;
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置
示例:
int main() {
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
system("pause");
return 0;
}
注意:在程序中不建议使用goto语句,以免造成程序流程混乱