【C++】C++程序设计入门二-灵析社区

跟着小潘学后端

前言

在上一节中,我们选了一个问题,演示了如何根据问题编写c++程序,并在过程中讲解了部分知识。本节内容旨在上一节基础上继续讲解程序设计入门的基础知识。
本篇有的知识难度比较高,可以先不学,后续对C++其他知识比较熟练后再学习。

一、变量

1.导入

在初等数学中,变量是表示数字的字母字符,具有任意性未知性


上图中,我们使用N表示了购买苹果的数量。当我们需要算总价的时候,直用N*2就能得到。

假如老鼠发现了一堆糖果,糖果有N颗。它一次可以背走a颗糖果。你能完成下方的表格吗?

运走糖果的次数1次2次8次X次
剩余的糖果数N-a???

如果你能完成上述问题,我们就可以学习C++中的变量了。

2.变量

C++为什么需要变量?实际上和我们冬天一样的,都是因为

真的离不开。

比如,我们去超市买东西。

结账的时候,收银员需要知道购买的物品和价格,这些信息可以用变量来存储。我们可以用一个变量来存储购买的物品名称,另一个变量来存储价格,这样就可以方便地进行计算和管理。

如果没有变量,超市收银员就需要记住所有的物品和价格,我觉得超市收银员还没上岗就疯了。

通过例子我们可以看到为了社会和平,需要变量。

2.1 变量的作用

C++ 变量是程序中用于存储数据值的一种占位符,可以理解为用来存储东西的箱子

我们在使用变量的时候,使用的不是这个箱子,而是箱子里面的东西。
当然有了变量以后,为了防止它丢,C++还会记下它的地址,当我们想用它的时候能马上找到它。

2.2 变量的定义

那我们如何拥有一个属于我们自己的变量呢?其实这件事就和养宠物是一样的。
养宠物之前我们是不是得先想一下养个什么种类的宠物,是养猫呢?还是养小狗呢?

选好养什么宠物后,是不是还得给宠物取个名字,旺财、来福、咪咪等等。
好吧,我不擅长取名字QAQ。取好名字以后,就可以把宠物买回家了。

在创建变量的时候有几个点需要注意:

1. 变量没有定义之前不能使用。

感觉说了一句废话,宠物都没有买回家怎么摸?但实际上是初学者容易出现的错误。比如没有区分大小写或者中途改了变量的名字又忘记改其他地方就有可能出现找不到变量的情况。

2. 变量名具有唯一性。

这个也很简单,一个宠物对应一个名字要区分开,总不能养了5只猫全叫“咪咪”吧。
虽然不能5只猫不能同时叫咪咪,但是可以把咪咪这个名字从原来的猫给其他猫。这就是变量的重新赋值,具体操作后面会讲。

3. 多个变量名之间用逗号“,”隔开,结尾用分号“;”结束。

你可以试试不隔开,然后你就会隔开了。

3. 变量名应该见名知意,不要随意乱取。

比如不要给你家咪咪,取个旺财或者来福这种一听就是小狗的名字。也不要jahsfadshsdajdsis 这样去叫你家的宠物,别人来你家做客想和你的宠物互动都跟唐僧过81难一样。

4. 变量名不要用数字开头,可以用数字结尾。

会报错,别试了。

5. 呃,先到这吧,多了你们也记不住。

在 C++中变量定义后如果不赋值,那么他的值是随机的,因此变量定义后,在使用之前一定要赋值(多定义几个变量,不赋值试试看)

二、常量

常量和变量一听名字就知道两个差不多,不同的是常量在程序执行期间其值不会发生改变,也就是不能重新赋值。

常量可以分为字面常量和符号常量两种类型。

C++中的字面常量不需要定义。字面常量是指在程序中直接使用的常量值,例如整型常量、字符型常量、字符串常量等。这些常量的值在程序编译时就已经确定了,因此不需要进行定义。例如:

int num = 10; // 定义一个整型变量num并初始化为10
int result = num + 20; // 使用字面常量20进行计算

在上面的代码中,20就是一个整型字面常量,它直接出现在程序中进行计算,而不需要进行定义。

如果要在程序中多次使用同一个常量值,可以使用const关键字定义一个符号常量。比如计算圆的面积、周长、体积,我们需要多次用到圆周率。圆周率又是一个确定的值,我们就可以把圆周率定义为符号常量,这样可以提高程序的可读性和可维护性。例如:

#include <iostream>
using namespace std;

const double PI = 3.14159265358979323846; // 定义圆周率常量

int main() {
    double r, c, s, v;
    cout << "请输入圆的半径:";
    cin >> r;
    c = 2 * PI * r; // 计算圆的周长
    s = PI * r * r; // 计算圆的面积
    v = 4.0 / 3.0 * PI * r * r * r; // 计算圆的体积
    cout << "圆的周长为:" << c << endl;
    cout << "圆的面积为:" << s << endl;
    cout << "圆的体积为:" << v << endl;
    return 0;
}

C++中定义符号常量的方法有两种:使用const关键字和使用宏定义。使用const关键字定义符号常量的语法格式如下:

const 数据类型 常量名 = 常量值;

只是在变量的定义基础上加了const关键字,需要注意的是常量名全部大写,养成良好的代码习惯。

关于宏定义方式,感兴趣的同学可以自行百度,更推荐使用const。

三、标识符

其实标识符就是我们前面讲到的变量名。准确的说变量名则是标识符的一种。

数据类型 变量名 = 值;

标识符是用来标识变量、函数、类、结构体等各种程序实体的名称。

标识符必须以字母、下划线或者汉字开头,后面可以跟字母、下划线、数字或者汉字。C++标识符是区分大小写的,长度没有限制。以下是一些C++标识符的命名规则:

  1. 标识符不能是C++关键字,例如if、else、while等。
  2. 标识符不能包含空格。
  3. 标识符不能以数字开头。
  4. 标识符不能包含特殊字符,例如@、#、$等。
  5. 标识符应该具有描述性,能够清晰地表达其含义。

以下是一个C++标识符的例子:

int myVariable = 10;

在这个例子中,myVariable是一个标识符,用来标识一个整型变量。

四、关键字

C++关键字是指在C++编程语言中具有特殊含义的保留字,这些关键字不能作为标识符使用。

C++中的关键字包括:auto、bool、break、case、catch、char、class、const、constexpr、continue、decltype、default、delete、do、double、dynamic_cast、else、enum、explicit、export、extern、false、float、for、friend、goto、if、inline、int、long、mutable、namespace、new、nullptr、operator、private、protected、public、register、reinterpret_cast、return、short、signed、sizeof、static、static_assert、static_cast、struct、switch、template、this、thread_local、throw、true、try、typedef、typeid、typename、union、unsigned、using、virtual、void、volatile、wchar_t、while等。

并不需要将关键字全部记住,在Dev C++中关键字都会被不同的颜色和字体粗细区别出来。

五、字符串(难度较高)

C++中的字符串是由一系列字符组成的。字符串可以使用字符数组string类来表示。

5.1 使用字符数组表示字符串

5.1.1 什么是数组

数组,就是一个集合,里面存放了相同类型的数据元素。

大家都去买过电池吧,一个包装里面有很多块电池,电池都是5号属于相同类型的,并且连续排列在一起。我们就可以把数组和这种包装好的电池结合在一起理解。


特点1:数组中的每个数据元素都是相同的数据类型

特点2:数组是由连续的内存位置组成的

5.1.2 字符数组使用方法

字符数组:存储字符的数组

1. 定义字符数组

定义字符数组的语法如下:

char array_name[array_size];

其中,array_name是字符数组的名称,array_size是字符数组的大小,即字符序列的长度。例如,定义一个长度为10的字符数组可以这样写:

char str[10];

2. 初始化字符数组

字符数组可以通过以下方式进行初始化:

2.1. 直接赋值

char str[] = "hello";

2.2. 逐个赋值

char str[6];
str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0'; // 字符串以'\0'结尾

2.3. 使用字符串常量初始化

char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};

3.访问字符数组

可以使用下标运算符[]来访问字符数组中的元素。例如,访问字符数组str中的第一个字符可以这样写:

char ch = str[0];

4.输出字符数组

char str[] = "Hello World"; // 定义一个字符数组
cout << str << endl; // 输出字符串

5.字符数组作为函数参数

字符数组可以作为函数的参数传递。例如,以下函数将打印出传入的字符串:

void printString(char str[]) {
    cout << str << endl;
}

5.2 使用string类表示字符串

C++中的string类是一个非常常用的字符串处理类。string类提供了一系列的成员函数,可以方便地进行字符串的操作,例如查找、替换、插入、删除等等。

1. 字符串的定义和初始化

#include <string>
using namespace std;

string str1; // 定义一个空字符串
string str2 = "hello"; // 定义并初始化一个字符串
string str3("world"); // 使用构造函数定义并初始化一个字符串

2. 字符串的输入和输出

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

string str;
cin >> str; // 从标准输入读入一个字符串
cout << str << endl; // 输出字符串到标准输出

3. 保留空格的字符串输入

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

string str;
getline(cin, str); // 从标准输入读入一个字符串,保留空格
cout << str << endl; // 输出字符串到标准输出

4. 字符串的拼接

#include <string>
using namespace std;

string str1 = "hello";
string str2 = "world";
string str3 = str1 + " " + str2; // 字符串拼接

5. 字符串的查找和替换

#include <string>
using namespace std;

string str = "hello world";
int pos = str.find("world"); // 查找子串的位置
str.replace(pos, 5, "you"); // 替换子串

6. 字符串的反转

#include <algorithm>
#include <string>
using namespace std;

string str = "hello";
reverse(str.begin(), str.end()); // 反转字符串

7. 字符串的截取

#include <string>
using namespace std;

string str = "hello world";
string sub = str.substr(6, 5); // 截取子串

六、表达式

C++表达式是由运算符和操作数组成的式子,可以用来进行各种数学和逻辑运算。

6.1 算术表达式(必须掌握)

C++算术表达式是由运算符和操作数组成的表达式,可以进行加法、减法、乘法、除法和求模等基本算术运算。以下是一些C++算术表达式的例子:

1.加法运算

int num1 = 6;int num2 = 8;
int sum = num1 + num2;
cout << "Sum: " << sum << endl; // 输出:Sum: 14

2.减法运算

int num1 = 8;
int num2 = 6;
int diff = num1 - num2;
cout << "Difference: " << diff << endl; // 输出:Difference: 2

3.乘法运算

int num1 = 6;
int num2 = 8;
int product = num1 * num2;
cout << "Product: " << product << endl; // 输出:Product: 48

4.除法运算

int num1 = 8;int num2 = 6;
int quotient = num1 / num2;
cout << "Quotient: " << quotient << endl; // 输出:Quotient: 1

5.求模运算

int num1 = 8;
int num2 = 6;
int remainder = num1 % num2;
cout << "Remainder: " << remainder << endl; // 输出:Remainder: 2

6.2 关系表达式(必须掌握)

C++中的关系表达式用于比较两个值之间的关系,返回一个布尔值(true或false)。常见的关系表达式包括:

  1. 相等关系(==):判断两个值是否相等,如果相等则返回true,否则返回false。
  2. 不等关系(!=):判断两个值是否不相等,如果不相等则返回true,否则返回false。
  3. 大于关系(>):判断左侧的值是否大于右侧的值,如果是则返回true,否则返回false。
  4. 小于关系(<):判断左侧的值是否小于右侧的值,如果是则返回true,否则返回false。
  5. 大于等于关系(>=):判断左侧的值是否大于或等于右侧的值,如果是则返回true,否则返回false。
  6. 小于等于关系(<=):判断左侧的值是否小于或等于右侧的值,如果是则返回true,否则返回false。

例如,下面的代码演示了如何使用关系表达式判断一个数的奇偶性:

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    if (n % 2 == 0) {
        cout << "even" << endl;
    } else {
        cout << "odd" << endl;
    }
    return 0;
}

6.3 赋值表达式(必须掌握)

C++赋值表达式返回的是一个被修改后的左操作数,即一个左值。这意味着,C++中的赋值表达式可以作为另一个表达式的一部分,并且可以在表达式中多次使用。例如:

int x = 5;int y = (x = 3); // y的值为3,x的值也为3

在这个例子中,赋值表达式(x = 3)将3赋值给了变量x,并返回了x的新值3,这个值被赋给了变量y。因此,y的值为3,x的值也为3。

另外,需要注意的是,在C++中,赋值表达式的优先级比大多数运算符都要低,因此在使用时需要注意加上括号。

6.4 逻辑表达式(必须掌握)

C++中的逻辑表达式用于执行布尔逻辑运算。常用的逻辑运算符包括:

逻辑与(&&):当且仅当两个操作数都为true时,结果才为true。
逻辑或(||):当两个操作数中至少有一个为true时,结果为true。
逻辑非(!):对操作数取反,如果操作数为true,则结果为false;如果操作数为false,则结果为true。
例如:

int a = 5, b = 3;
bool c = (a < b) && (a > 0); // 结果为false
bool d = (a > b) || (b < 0); // 结果为true
bool e = !(a == b); // 结果为true

需要注意的是,逻辑运算符的优先级低于算术运算符和关系运算符,但高于赋值运算符。因此,在使用逻辑运算符时,建议使用括号来明确优先级。

6.5 三目运算表达式(难度较高)

C++中的三目运算符是一种简洁的条件表达式,它可以根据条件的真假来返回两个不同的值。其语法格式如下:

条件表达式 ? 表达式1 : 表达式2

其中,条件表达式的值为真时返回表达式1的值,否则返回表达式2的值。例如:

int a = 10, b = 20;
int max = (a > b) ? a : b; // 如果a > b,则返回a的值,否则返回b的值

在上面的例子中,如果a > b,则max的值为a,否则max的值为b。

三目运算符可以嵌套使用,例如:

int a = 10, b = 20, c = 30;
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);

在上面的例子中,如果a > b,则判断a是否大于c,如果是,则max的值为a,否则max的值为c;否则判断b是否大于c,如果是,则max的值为b,否则max的值为c。

6.6 位运算表达式(难度较高)

C++提供了6种位运算符,分别是按位与(&)、按位或(| )、按位异或(^)、取反(~)、左移(<<)、右移(>>)。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char、short、int与long类型。下面是一些位运算的例子:

1.按位与(&):两个操作数的每一位进行与运算,结果为1则该位为1,否则为0。

int a = 5; // 二进制表示为101
int b = 3; // 二进制表示为011
int c = a & b; // 二进制表示为001,即1

2.按位或(|):两个操作数的每一位进行或运算,结果为0则该位为0,否则为1。

int a = 5; // 二进制表示为101
int b = 3; // 二进制表示为011
int c = a | b; // 二进制表示为111,即7

3.按位异或(^):两个操作数的每一位进行异或运算,结果为相同则为0,不同则为1。

int a = 5; // 二进制表示为101
int b = 3; // 二进制表示为011
int c = a ^ b; // 二进制表示为110,即6

4.取反(~):对操作数的每一位进行取反运算,即0变为1,1变为0。

int a = 5; // 二进制表示为101
int b = ~a; // 二进制表示为11111111111111111111111111111010,即-6

5.左移(<<):将操作数的二进制表示向左移动指定的位数,右侧用0填充。

int a = 5; // 二进制表示为101
int b = a << 2; // 二进制表示为10100,即20

6.右移(>>):将操作数的二进制表示向右移动指定的位数,左侧用0或1填充(取决于操作数的符号位)。

int a = 5; // 二进制表示为101
int b = a >> 2; // 二进制表示为1,即1

七、课后作业

八、总结

以上就是今天要讲的内容,本文在上一节的基础上继续讲解C++入门的基础知识。

阅读量:516

点赞量:0

收藏量:0