C++ 基础篇

目录

C++开发概述

C++特点

C++跨平台的原因

C++编译器

C++库

操作系统API

C++基本概念

注释

变量

常量

两种定义常量方式的区别

表示符命名规则

常见的关键字

数据类型

整型

浮点数

字符型

转义字符

字符串型

布尔类型

运算符

算术运算符

赋值运算符

比较运算符

逻辑运算符

程序流程结构

选择结构

if语句

三目运算符

Switch语句

循环结构

while循环语句

do...while循环语句

for循环语句

跳转语句

break语句

continue语句

goto语句


C++开发概述

C++特点

C++是一种通用的编程语言,它以C语言为基础,并添加了面向对象编程的特性。C++具有高效性、灵活性和可移植性,被广泛应用于开发各种类型的软件和系统。

下面详细介绍C++的一些关键特性和概念:

  1. 面向对象编程(OOP):C++支持面向对象的编程范式,可以使用类、对象、继承、多态等概念来组织和管理程序的结构。面向对象编程使得程序更加模块化、可重用和易于维护。

  2. 泛型编程:C++引入了模板(Templates)概念,允许开发者编写通用的代码,可以在不同的数据类型上工作。泛型编程提供了高度的代码复用和灵活性。

  3. 标准库:C++标准库提供了丰富的功能和数据结构,包括容器(如向量、链表、映射等)、算法(如排序、搜索、数值运算等)、输入/输出、多线程等。标准库的使用可以大大简化开发过程,并提供高效的实现。

  4. 内存管理:C++提供了细粒度的内存控制,开发者可以手动分配和释放内存。这个特性使得C++在一些对性能和资源管理要求较高的应用中具备优势,但也需要开发者更加谨慎地处理内存,避免出现内存泄漏和悬挂指针等问题。

  5. 强大的指针操作:C++支持指针操作,可以直接访问和操纵内存地址。指针的使用可以提供更高的灵活性和底层控制,但也需要开发者注意指针的正确使用,避免出现空指针和非法访问等错误。

  6. 高性能:C++编译后生成的机器码效率高,可以直接访问底层硬件,实现高性能的应用程序。C++的底层控制和优化能力使得它成为一些对性能要求较高的领域(如游戏开发、嵌入式系统等)的首选语言。

  7. 可移植性:C++代码可以在不同的平台上编译和运行,保证程序在不同环境下的兼容性。这使得C++成为开发跨平台应用程序的一种理想选择。

C++跨平台的原因

C++是一种跨平台的编程语言,可以在不同的操作系统上运行,如Windows和Linux。这是因为C++的编译过程将源代码转换为目标机器代码,这些目标机器代码是特定于操作系统和硬件平台的。

C++的跨平台性来自于以下几个方面:

  1. 标准化:C++是由ISO/IEC标准化组织制定的一种编程语言标准。这意味着编写符合C++标准的代码,可以确保在不同的编译器和平台上得到相同的行为。

  2. 编译器支持:C++的编译器,如GCC、Clang和Visual C++,都提供了对多个平台的支持。它们将C++源代码编译为机器码,使其能够在不同的操作系统上运行。

  3. 跨平台库和框架:许多开源库和框架,如Boost、Qt和STL,提供了跨平台的API和功能。这些库和框架可以在不同的操作系统上使用,使得开发者可以更方便地编写跨平台的C++应用程序。

  4. 操作系统抽象层:操作系统提供了一些抽象层,如POSIX(可移植操作系统接口),它定义了一组操作系统接口标准,使得应用程序可以在不同的POSIX兼容系统上运行。

通过这些机制,C++在不同的操作系统上能够编译和执行,从而实现了跨平台的特性。开发者可以编写一次C++代码,然后使用适当的编译器和库,在不同的平台上进行编译和运行,从而实现跨平台的应用程序。

C++编译器

C++编译器有很多种,以下是一些常见的C++编译器:

  1. GCC(GNU Compiler Collection):GCC是一个开源的编译器集合,包括GNU C++编译器(g++)。它是一个功能强大、广泛使用的编译器,在多个平台上都有支持。

  2. Clang:Clang是一个开源的C++编译器,由LLVM项目开发。它被设计为高度可扩展和可靠的编译器,支持C++11、C++14、C++17等标准。

  3. Visual C++:Visual C++是Microsoft Visual Studio集成开发环境(IDE)中的C++编译器。它提供了强大的开发工具和调试功能,适用于Windows平台的C++开发。

  4. Intel C++ Compiler:由英特尔开发的C++编译器,专为英特尔处理器优化。它提供了高性能和优化功能,并支持多个操作系统和平台。

  5. Xcode Clang:Xcode集成开发环境中的Clang编译器,适用于macOS和iOS平台的C++开发。它提供了先进的代码分析、调试和性能工具。

这些编译器都支持C++的不同版本和标准,并提供了各种优化和调试功能,可以根据个人需求和项目要求选择最适合的编译器。

C++库

C++的库是指提供了一系列函数、类和数据结构的代码集合,可以供开发者在自己的程序中使用。C++的库分为标准库和第三方库两种类型。

  1. 标准库:C++标准库是C++语言的一部分,包括了标准模板库(STL)和标准函数库两个主要组成部分。

    • 标准模板库(STL):STL提供了一系列通用的数据结构和算法,如容器(vector、list、map等)、迭代器、算法(排序、查找等)、函数对象等。这些组件可以帮助开发者更方便地管理数据和实现常见的操作。

    • 标准函数库:标准函数库提供了一系列常用的函数和类,用于处理输入输出、字符串处理、数学运算、时间日期、动态内存管理、异常处理等方面的操作。

  2. 第三方库:第三方库是由独立的开发者或组织创建的,不属于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简介:

  1. Windows API:Windows操作系统提供了Win32 API(也称为Windows API),它是使用C语言编写的一组函数和接口,用于访问和控制Windows操作系统的功能。它包括了各种功能,如窗口管理、文件操作、网络通信、进程管理等。

  2. POSIX API:POSIX(Portable Operating System Interface)是一组操作系统标准接口的规范,旨在提供可移植性和兼容性。POSIX API定义了一系列函数和接口,用于访问和控制UNIX、Linux等POSIX兼容操作系统的功能,如文件操作、进程管理、线程操作、信号处理等。

  3. macOS API:macOS操作系统是基于UNIX的,因此它可以使用POSIX API来访问和操作操作系统功能。此外,macOS还提供了一些特定于其平台的API,如Cocoa框架和Core Foundation框架,用于开发Mac应用程序。

  4. iOS API:iOS是苹果移动设备(iPhone、iPad等)的操作系统,它使用了类似于macOS的API,如Cocoa Touch框架和Core Foundation框架,用于开发iOS应用程序。

  5. Android API:Android操作系统提供了一组Java API和C/C++ API,用于开发Android应用程序。Java API用于应用程序的开发,C/C++ API用于底层的系统和硬件访问。

C++基本概念

注释

作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码

两种格式

  1. 单行注释// 描述信息

    • 通常放在一行代码的上方,或者一条语句的末尾,==对该行代码说明==

  2. 多行注释/* 描述信息 */

    • 通常放在一段代码的上方,==对该段代码做整体说明==

提示:编译器在编译代码时,会忽略注释的内容

变量

作用:给一段指定的内存空间起名,方便操作这段内存

语法数据类型 变量名 = 初始值;

示例:

#include<iostream>
using namespace std;int main() {//变量的定义//语法:数据类型  变量名 = 初始值int a = 10;cout << "a = " << a << endl;system("pause");return 0;
}

注意:C++在创建变量时,必须给变量一个初始值,否则会报错

常量

作用:用于记录程序中不可更改的数据

C++定义常量两种方式

  1. #define 宏常量: #define 常量名 常量值

            通常在文件上方定义,表示一个常量,会在预处理时进行替换
  2. const修饰的变量 const 数据类型 常量名 = 常量值

            通常在变量定义前加关键字const,修饰该变量为常量,不可修改

示例:

//1、宏常量
#define day 7int main() {cout << "一周里总共有 " << day << " 天" << endl;//day = 8;  //报错,宏常量不可以修改//2、const修饰变量const int month = 12;cout << "一年里总共有 " << month << " 个月份" << endl;//month = 24; //报错,常量是不可以修改的system("pause");return 0;
}

两种定义常量方式的区别

#defineconst都可以用来声明常量,但它们在实现和使用上有一些区别。

  1. #define是一个预处理指令,它在编译之前对代码进行文本替换。#define用于定义宏常量,通过编译器将宏名替换为相应的值。例如:

    #define PI 3.14159

    在代码中使用PI时,编译器会将其替换为3.14159#define没有类型检查,没有作用域限制,也没有存储空间。

  2. 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;
}

浮点数

作用:用于表示小数

浮点型变量分为两种:

  1. 单精度float

  2. 双精度double

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

数据类型占用空间有效数字范围
float4字节7位有效数字
double8字节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 ^ 2cout << "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字符
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL

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数字0000
\ddd8进制转义字符,d范围0~73位8进制
\xhh16进制转义字符,h范围0~9,a~f,A~F3位16进制

示例:

int main() {cout << "\\" << endl;cout << "\tHello" << endl;cout << "\n" << endl;
​system("pause");
​return 0;
}

字符串型

作用:用于表示一串字符

两种风格

  1. C风格字符串char 变量名[] = "字符串值"

    示例:

    int main() {
    ​char str1[] = "hello world";cout << str1 << endl;system("pause");
    ​return 0;
    }

注意:C风格的字符串要用双引号括起来

  1. 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; //1system("pause");
​return 0;
}

运算符

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

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

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

 

算术运算符

作用:用于处理四则运算

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

运算符术语示例结果
+正号+33
-负号-3-3
+10 + 515
-10 - 55
*10 * 550
/10 / 52
%取模(取余)10 % 31
++前置递增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 + 1cout << 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 - 2cout << "a = " << a << endl;
​// *=a = 10;a *= 2; // a = a * 2cout << "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 == 30
!=不等于4 != 31
<小于4 < 30
>大于4 > 31
<=小于等于4 <= 30
>=大于等于4 >= 11

示例:

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; // 1system("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 语句中使用breakcout << "请选择您挑战副本的难度:" << 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、在循环语句中用breakfor (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语句,以免造成程序流程混乱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VScode】超详细图片讲解下载安装、环境配置、编译执行、调试

这里是目录 VScode是什么&#xff1f;VScode的下载和安装环境介绍安装中文插件 配置VScodeC/C开发环境下载和配置MinGW-w64 编译器套件下载&#xff1a;配置&#xff1a; 安装C/C插件在VScode上编写代码设置C/C编译选项创建执行任务编译执行如果想写其他代码在同一个文件夹在不…

springboot 整合 Spring Security 中篇(RBAC权限控制)

1.先了解RBAC 是什么 RBAC(Role-Based Access control) &#xff0c;也就是基于角色的权限分配解决方案 2.数据库读取用户信息和授权信息 1.上篇用户名好授权等信息都是从内存读取实际情况都是从数据库获取&#xff1b; 主要设计两个类 UserDetails和UserDetailsService 看下…

新媒体营销模拟实训室解决方案

一、引言 随着互联网的发展&#xff0c;新媒体已成为企业进行营销和品牌推广的重要渠道。然而&#xff0c;对于许多企业来说&#xff0c;如何在新媒体上进行有效的营销仍是一大挑战。为了解决这个问题&#xff0c;我们推出了一款新媒体营销模拟实训室解决方案&#xff0c;以帮…

【文末送书】Python OpenCV从入门到精通

文章目录 &#x1f354;简介opencv&#x1f339;内容简介&#x1f6f8;编辑推荐&#x1f384;导读&#x1f33a;彩蛋 &#x1f354;简介opencv OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;提供了丰富的图像处理和…

java学习part31String

142-常用类与基础API-String的理解与不可变性_哔哩哔哩_bilibili 1.String 2.字符串常量池 变更储存区的原因是加快被gc的频率 比地址&#xff0c;equals比内容 3.字符串连接 s3s4都是字符串常量&#xff0c;后面几个会利用StringBuilder的toString&#xff08;&#xff09;&a…

JAVA全栈开发 day16_MySql01

一、数据库 1.数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作&#x…

C#网络编程TCP程序设计(Socket类、TcpClient类和 TcpListener类)

目录 一、Socket类 1.Socket类的常用属性及说明 2.Socket类的常用方法及说明 二、TcpClient类 三、TcpListener类 四、示例 1.源码 2.生成效果 TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在C#中&#xff0c;TCP程序设…

react-flip-move结合array-move实现前端列表置顶效果

你有没有遇到这样的需求&#xff1f;点击左侧列表项&#xff0c;则像聊天会话窗口一样将被点击的列表项置顶。 如果只是单纯的置顶的话&#xff0c;直接使用array-move就可以实现了&#xff0c;但置顶效果多少有点突兀~ 先上代码&#xff0c;直接使用array-move的情况&#xf…

数据可视化私有化部署:为何成本居高不下?

尽管在可视化设计这行干了好多年&#xff0c;也接手过不少项目&#xff0c;但昂贵的私有化部署费用总能让我发出由衷的感叹&#xff1a;“这几十万一年也太贵了&#xff01;”。可以预见&#xff0c;数据可视化软件私有化部署所带来的高昂成本&#xff0c;将是许多企业面临的问…

Jmeter进行压力测试不为人知的秘密

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…

每日一练【快乐数】

一、题目描述 202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这…

Elasticsearch高级

文章目录 一.数据聚合二.RestAPI实现聚合三.ES自动补全(联想)四.数据同步五.elasticsearch集群 一.数据聚合 在ES中的数据聚合&#xff08;aggregations&#xff09;可以近似看做成mysql中的groupby分组,聚合可以实现对文档数据的统计、分析、运算,常见的聚合的分类有以下几种…

基于APM(PIX)飞控和mission planner制作遥控无人车-从零搭建自主pix无人车普通舵机转向无人车-1(以乐迪crossflight飞控为例)

1.前期准备 准备通过舵机转向的无人车地盘、遥控器、地面站电脑、飞控等。安装驱动程序、端口程序、netframwork等&#xff0c;不再赘述。 2.安装固件 安装ardurover固件&#xff0c;如果在线失败&#xff0c;选择官方最新的固件下载到本地&#xff0c;选择本地安装。 3.调试…

智能仓库PTL管理系统

清晰电子墨水屏显示&#xff0c;无纸化作业&#xff0c;超低功耗 无线通信&#xff0c;穿透力强&#xff0c;极简部署 支持声光提醒&#xff0c;极大提高作业效率 适用场景&#xff1a;工厂&#xff0c;仓库&#xff0c;物流&#xff0c;货品分类等等

认识Docker

Docker 是世界领先的软件容器平台&#xff0c;所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 1.1 什么是容器? 先来看看容器较为官方 一句话概括容器&#xff1a;容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署。 容器镜像是轻量的、可执行的…

希宝猫罐头怎么样?专业人士告诉你质量好又便宜的猫罐头推荐

作为从业6年的宠物护理师来说&#xff0c;只买合适的&#xff0c;贵的不如好的&#xff0c;只要配方不出错营养跟得上&#xff0c;观察自家猫咪体质真的基本不怎么出错。希望大家看完这篇文章&#xff0c;各位铲屎官都能买到满意的猫罐头。那么希宝猫罐头在各方面表现怎么样呢&…

UI咨询公司-蓝蓝设计:顶级秘籍:提升UI设计吸引力的3大绝招

想要让你的UI设计在海量应用中脱颖而出&#xff0c;吸引用户眼球吗&#xff1f;如果你正在寻找提升UI设计吸引力的绝妙方法&#xff0c;那么你绝对不能错过本文&#xff01;我们将为你揭示顶级UI设计师都不会告诉你的3大绝招&#xff0c;让你轻松掌握提升UI设计吸引力的关键技巧…

网络运维与网络安全 学习笔记2023.11.30

网络运维与网络安全 学习笔记 第三十一天 今日目标 实现AP自动注册、配置WLAN业务参数、无线终端通过wifi互访 实现AP自动注册 项目背景 企业内网的大量AP已经通过DHCP的方式获得IP地址 为了实现后期大量AP的统一管理&#xff0c;希望通过AC实现集中控制 在AC设备上&#…

SpringBoot框架结合Redis实现分布式锁

一、SpringBoot结合 Redis实现分布式锁 1.1、什么是分布式锁 分布式锁&#xff0c;是在分布式的环境下&#xff0c;才会使用到的一种同步访问机制&#xff0c;在传统的单体环境里面&#xff0c;不存在分布式锁的概念&#xff0c;只有在分布式环境里面&#xff0c;才有分布式锁…