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 7

int 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 ^ 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字符
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; //1
    
    system("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 + 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 == 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; // 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语句,以免造成程序流程混乱

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三极管在数字电路中的应用

一、认识三极管 三极管拥有3个引脚&#xff0c;分别对应3个级&#xff1a;基极(Base)、发射极&#xff08;Emitter&#xff09;、集电极(Collector)&#xff0c;如下图所示&#xff1b;下图横向左侧的是基极&#xff0c;带箭头的那个引脚就是发射极&#xff0c;另一个就是集电…

从零开始搭建博客网站-----登陆页面

登录按钮以及背景图设置 安装element-plus和css插件 npm install element-plus --save npm install sass --save npm install sass-loader --save在main.js里引用 寻找背景图存入assets文件下&#xff0c;并且在Login.vue里设置背景图和登录按钮 设置的背景图的大小没有起…

基于ResNet18网络完成图像分类任务

目录 1 数据处理 1.1 数据集介绍 1.2 数据读取 1.3 构造Dataset类 2 模型构建 3 模型训练 4 模型评价 5 模型预测 6 什么是预训练模型和迁移学习 7 比较“使用预训练模型”和“不使用预训练模型”的效果。 总结 在本实践中&#xff0c;我们实践一个更通用的图像分类任务…

物联网开发(一)新版Onenet 基础配置

onenet新创建的账号&#xff0c;没有了多协议接入&#xff0c;只有新的物联网开放平台 第一讲&#xff0c;先给大家讲一下&#xff1a;新版Onenet 基础配置 创建产品 产品开发-->创建产品 产品的品类选择个&#xff1a;大致符合你项目的即可&#xff0c;没有影响 选择智…

构建第一个ArkTS应用(纯HarmonyOS应用)

1. 安装开发工具 在华为开发者官方上下载HarmonyOS应用专用的开发工具&#xff0c;链接地址&#xff1a;HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 要想使用开发工具让项目跑起来&#xff0c;需要10G的磁盘空间。开发工具需要的磁盘空间为2.36G&#xff1b;SDK需…

Python笔记1.2(with open() as file和open()、logging、os、shutil、glob、decode和encode)

Python笔记1.1&#xff08;字符串日期转换、argparse、sys、overwrite、eval、json.dumpsloads、os.system(cmd)、zfill、endswith、深浅拷贝&#xff09; Python笔记2&#xff08;函数参数、面向对象、装饰器、高级函数、捕获异常、dir&#xff09; Python笔记1.2 13、with …

Linux(12):磁盘配额(Quota)与进阶文件系统管理

磁盘配额&#xff08;Quota&#xff09;的应用与实作 Quota 的一般用途&#xff1a; 针对 www server &#xff0c;例如:每个人的网页空间的容量限制&#xff1b; 针对 mail server&#xff0c;例如:每个人的邮件空间限制。 针对 file server&#xff0c;例如:每个人最大的可用…

Python 爬虫 之scrapy 框架

文章目录 常用的命令开始爬虫请求与响应让控制台只输出想要的信息创建一个py 文件来帮忙运行爬虫 工作原理图实战 常用的命令 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;以下是一些常用的Scrapy命令&#xff1a; 开始的时候 用 cd 进入你想创建scrapy 的文件夹 &a…

Java中各种数据类型之间的转换

低类型向高类型自动进行转换&#xff0c;高类型向低类型的准换会丢失数据&#xff0c;整数到字符类型的转换将获取对应编码的字符。 进行高精度向低精度的强制类型准换时&#xff0c;需要将想要转换成的数据类型加一个括号()。 如何完成自动转换呢&#xff1f; 转换前的数据类…

Linux 下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器&#xff1a; 管理服务器节点服务器托管服务器 示例和关系如下图&#xff1a; 对应三类服务器&#xff0c; 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…

系统地自学 Python

文章目录 如何系统地自学 Python1. 选择合适的 Python 版本2. 安装 Python 和必要的工具3. 学习 Python 的基础知识4. 学习 Python 的高级特性5. Python 的应用领域6. 保持良好的学习习惯 如何系统地自学 Python Python 是一种广泛使用的编程语言&#xff0c;它具有简洁、易读、…

微服务的应用架构

架构描述的是在更高层次将应用拆分为子系统或模块的方法&#xff0c;以及这些子系统之间的交互关系。在一个基于微服务架构构建的应用中&#xff0c;每个服务都需要有自己的架构。 事实上&#xff0c;单体应用在复杂度较低时&#xff0c;它的生产效率是要高于微服务的。只有在…

【Go语言 map源码分析】

map底层数据结构 我们在之前学习C中的map时知道了 map的底层其实是有两种数据结构 这取决于我们要求它有序还是无序 如果说我们要求map是有序的它的底层数据结构就是红黑树如果说我们要求map是无序的它的底层数据结构就是哈希表 但是Go语言中的map数据结构有点特殊 如下图 …

QueryRunner报红处理

如图&#xff0c;有同学反映QueryRunner报红&#xff0c;就是没有导包 自己去找项目的地址&#xff0c;找到web文件夹下的WEB-INF 把这些jar包都粘贴进去&#xff0c;以后项目基本都会用到的&#xff0c;资源自己去找 粘贴好后打开文件的Project Structure 点击Dependencies 点…

github打不开,全网最简单解决方法,没有之一

下载watt toolkit&#xff0c; 选择‘github’&#xff0c;点击‘一键加速’&#xff0c; 具体步骤如下&#xff1a;去电脑微软商店下载watt toolkit&#xff0c;或者直接打开网址https://apps.microsoft.com/detail/9MTCFHS560NG?hlen-us&glUS 如图&#xff0c;点击安装i…

洛谷 B2006 地球人口承载力估计 C++代码

目录 前言 思路点拨 AC代码 结尾 前言 今天我们来做洛谷上的一道题目。 网址&#xff1a;地球人口承载力估计 - 洛谷 题目&#xff1a; 思路点拨 经典牛吃草问题。 解设一个人一年吃一份草。 则x*a-y*b为会多出的草&#xff0c;为什么会多呢&#xff1f;是因为每年都有…

Vue3-路由

VueRouter4路由语法解析 1.创建路由实例由createRouter实现 2.路由模式 1&#xff09;history模式使用createWebHistory()&#xff1a;地址栏不带# 2&#xff09;hash模式使用createWebHashHistory()&#xff1a;地址栏带# 3&#xff09;参数是基础路径&#xff0c;默认/ …

智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC

@[toc] 智跃人力资源管理系统GenerateEntityFromTable.aspx接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者…

弦理论的技术探索

弦理论的技术探索 一、引言 弦理论,作为现代物理学中的一个重要分支,旨在揭示宇宙的终极规律。它认为,宇宙中的一切物质和能量都是由微小的弦振动产生的。本文将深入探讨弦理论的技术层面,包括其数学基础、物理应用以及计算机模拟等方面。 二、弦理论的数学基础 弦理论的…

【Delphi】中使用Indy进行UDP广播通信

目录 一、服务器端&#xff08;接收端&#xff09; 二、客户端&#xff08;广播端&#xff09; Delphi中进行UDP广播通信函数代码&#xff1a; 一、服务器端&#xff08;接收端&#xff09; 在主界面上返放置一个TIdUDPServer控件&#xff0c;设置好该控件的监听端口&#…