C++语言入门_02
蓝桥云课学习记录
2021/11/18
基本的数据类型及表达式
数据是程序处理的对象,与其他高级语言类似,在 C++ 语言中不同类型数据的处理方式也是不同的。本次实验共有三个内容,一是介绍 C++ 语言的基本数据类型,二是介绍 C++ 中的变量与常量,三是介绍运算符和表达式。
知识点
基本数据类型
string类
结构体struct
变量和常量
运算符和表达式
一、基本数据类型
编写计算机程序的目的在于高效解决现实生活中的问题,正因如此,高级语言为我们提供了许多的数据类型。C++ 的数据类型分为基本数据类型和自定义数据类型,其基本数据类型如下:
数据类型名 | 长度(字节) | 取值范围 |
---|---|---|
char | 1 | -128~127 |
bool | 1 | true,false |
signed char | 1 | -128~127 |
unsigned char | 1 | 0 ~ 255 |
short | 2 | -32768 ~ 32767 |
unsigned short | 2 | 0 ~ 65535 |
int | 4 | -2147483648 ~ 2147483647 |
unsigned int | 4 | 0 ~ 4294967295 |
long | 4 | -2147483648 ~ 2147483647 |
unsigned long | 4 | 0 ~ 4294967295 |
float | 4 | 3.4E-38 ~ 3.4E+38 |
double | 8 | 1.7E-308 ~ 1.7E+308 |
long double | 8 | 1.7E-308 ~ 1.7E+308 |
由上表可知,C++ 的基本数据类型一般包括:bool、char、int、float 和 double。其中关键字 signed、unsigned、short、long 被称为修饰符。特别的,当用 short 或 long 修饰 int 时,int 可省略不写,表示短整型数据或长整型数据。
string 类
string 是 C++ 标准库的一个重要部分,主要用于字符串的处理,string 类的头文件为:#include。使用 string 可以对字符串的对象执行某些操作,例如拼接、查找等。
struct
struct 是由一系列相同或不同的数据类型组成的数据集合,也称结构体,是一种复合型的数据类型。
C++ 语言中 struct 的基本结构
struct struct_name
{
memberList
}varList
其中 struct 为结构体的关键字,struct_name 为结构体的名字,memberList 为结构体成员变量及成员函数的列表,varList 为结构体声明的变量。使用 varList.元素名 可调用结构体中的元素。
例如在实验环境中新建一个名为 stru.cpp 的文件并输入:
#include <iostream>
using namespace std;
struct shiyanlou //定义 shiyanlou 结构体。
{
int a; //定义 a 的数据类型为整型。
int pri() {return a;}//定义 pri() 的功能为返回 a 的值。
}s1;
int main()
{
cout<<"sbefore:"<<s1.pri()<<endl;
s1.a = 6;
cout<<"safter:"<<s1.pri()<<endl;
return 0;
}
其中 sbefore 输出未初始化变量的结果,safter 输出已初始化变量的结果:
sbefore:0
safter:6
C++ 语言中 struct 与 C 语言中 struct 的区别
在 C++ 语言中,可直接使用结构体名来声明变量;在 C 语言中,不能直接使用结构体名来声明变量,需前缀 struct。
C++ 语言的 struct 中既可以定义成员变量又可以定义成员函数;C 语言的 struct 中只能定义成员变量,不能定义成员函数。例如:
struct shiyanlou
{
int a;
int pri() {return a;}
}s1;
在 C++ 的编译过程中,此结构体不会出错。但若在 C 语言中,由于 int pri() {return a;} 为成员函数,会出现编译报错。
二、变量
1.引入库
变量来源于数学,是计算机语言中能储存计算结果且在程序执行过程中可以变化的量。变量需要用名字来标识且需指定相应的数据类型,变量声明的形式如下:
数据类型 变量名1,变量名2...
注意:变量的命名不是随意的,需遵守以下规则:
变量名只能包含字母(A-Z,a-z)和数字(0-9)或者下划线(_)。
变量名首位必须是字母或下划线。
不能使用 C++ 的关键字来命名变量,以免冲突。例如:struct。
变量名区分大小写。
例如声明两个 int 类型的变量:
int a_1,b
2.变量
变量分为局部变量与全局变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用,全局变量是可以被本程序所有对象或函数引用。
局部变量
局部变量 只作用于当前模块。例如新建一个名为 localvar.cpp 的文件并输入:
#include <iostream>
using namespace std;
int main()
{
int a = 2; //此局部变量只作用于当前模块。
cout<<a<<endl;
return 0;
}
在主函数 int main() 中定义了一个局部变量 a 且赋值为 2,若在主函数中对局部变量 a 进行输出,则直接输出 2。
程序结果:
2
全局变量
当两个或两个以上模块或函数需要用到同一个变量时,可以把变量定义为全局变量。例如新建一个名为 globalvar.cpp 的文件并输入:
#include <iostream>
using namespace std;
int global1 = 1; //定义全局变量 global1。
void func()
{
cout<<global1<<endl; //输出全局变量 global1 的值。
}
int main()
{
cout<<global1<<endl; //输出全局变量 global1 的值。
func(); //调用函数 func()。函数的调用会在后面的实验详细讲解,在此只做了解。
return 0;
}
上述代码中,void func() 和 int main() 都需要使用变量 global1,即定义其为全局变量,供多个模块使用。
程序结果:
1
1
重名现象
当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。我们修改 globalvar.cpp 文件为以下内容:
#include <iostream>
using namespace std;
int global1 = 1; //定义全局变量 global1。
void func()
{
cout<<global1<<endl; //输出全局变量 global1 的值。
}
int main()
{
int global1 = 10; //定义局部变量 global1 屏蔽全局变量 global1。
cout<<global1<<endl; //输出局部变量 global1 的值。
func(); //调用函数 func()。函数的调用会在后面的实验详细讲解,在此只做了解。
return 0;
}
我们在 int main() 中定义局部变量 int global1,此时出现重名现象。则 int main() 中 cout<<global1<<endl 输出的是 int main() 中局部变量 int global1 的值。
程序结果:
10
1
二、常量
常量是指具有固定值的表达式,其值在程序运行的整个过程中是不可改变的。常量一般分为整型常量、实型常量、字符常量、字符串常量和布尔常量。
1.常量分类
整型常量
即以文字形式出现的整数,包括正整数、负整数和零。在 C++ 中支持十进制、八进制和十六进制的整数。
十进制表示的整型常量:由 - / + 和 若干 0 - 9 的数字组合,例如:2、- 2、356 等。
八进制表示的整型常量:以 0 开头后跟若干个 0 - 7 数字,例如:0333、06 等。
十六进制表示的整型常量:以 0x 开头后跟 0 - 9 的数字及 A-F 的字母,例如:0x12、0x3A 等。
一般的,当十进制表示的整型常量为正整数时,可省略 +;八进制和十六进制通常表示无符号的整数,所以不必添加 - / +。
实型常量
即以文字形式出现的实数,包括一般形式和指数形式。
一般形式,即正常表达的数字,例如:3.14、- 6.78 等。
指数形式,通俗来说就是我们在数学中常用的 n 乘以 10 的 x 次方,例如:3.1E+6 表示的则是 3.1 乘以 10 的 6 次方,即 3100000;6.9E-2 表示的则是 6.9 乘以 10 的 - 2 次方,即 0.069。
字符常量
用单引号括起来的一个字符称为字符常量。例如:‘a’、‘D’ 等。
例如回车、换行、制表符等既无法显示又不能输入的特殊字符,需要利用 C++ 预定义的转义序列在程序中表示。下面是常用的预定义的转义序列表:
字符常量形式 | 含义 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\a | 响铃 |
\f | 换页 |
\ | 字符 ‘’ |
" | 双引号 |
’ | 单引号 |
例如:input:\n 则在输出字符串 'input:'后执行换行操作。
字符串常量
用双引号括起来的字符序列称为字符串常量。例如:“shiyanlou”、“an apple” 等。
若要在字符序列中包含双引号,例如表示语句:You choose “time” or “happy”,我们则需利用预定义的转义序列 " 来表示句中的双引号。定义其字符串常量为:“You choose “time” or “happy””。
布尔常量
布尔常量只有 TRUE 和 FALSE 两种。
2.常量声明
常量声明一般有两种方式,一是使用 #define 预处理、二是使用 const 关键字。
使用 #define 预处理
格式:#define name value
#define PI 3.14159
#define NEWLINE '\n'
使用 const 关键字
格式:const type name = value
const double pi = 3.14;
const char tab = '\t';
三、运算符与表达式
1.算数运算符和算数表达式
表达式是运算符及其运算数的序列,它指定一项计算。一般分为算数运算符和算数表达式、逻辑运算符和逻辑表达式、关系运算符和关系表达式、条件运算符和条件表达式。
算数运算符包括基本算数运算符和自增自减运算符;算数表达式一般由算数运算符、操作数和括号组成。下面是基本的算数运算符和算数表达式:
运算符名 | 语法 | 描述 | 表达式 |
---|---|---|---|
一元加 | +a | 正号 | +a = 6 |
一元减 | -a | 负号 | -a = -6 |
加 | a + b | 两数相加 | a + b = 6 |
减 | a - b | 两数相减 | a - b = 6 |
乘 | a * b | 两数相乘 | a * b = 8 |
除 | a / b | 两数相除 | a / b = 8 |
模 | a % b | 两数整除后取余 | a % b = 3 |
自增 | a++ 或 ++a | 整数本身加一 | a++ = 6 或 ++a = 6 |
自减 | a-- 或 --a | 整数本身减一 | a-- = 6 或 --a = 6 |
a++ 和 ++a 的区别:++a 称为前缀形式,在表达式计算之前完成自加运算;a++ 称为后缀形式,在表达式计算之后完成自加运算。同理,–a 和 a-- 亦如此,–a 在表达式计算之前完成自减运算;a-- 在表达式计算之后完成自减运算。例如新建 self.cpp 文档,输入:
#include <iostream>
using namespace std;
int main()
{
int i=1;
cout<<++i<<endl; //输出的 i 值为 2。
cout<<i++<<endl; //输出的 i 值为 2。
cout<<i<<endl;//输出的 i 值为 3。
}
其中 cout<<++i<<endl; 先为 i 加 1 再输出 i;cout<<i++<<endl; 先输出当前 i 的值后再为 i 加 1。
程序结果:
2
2
3
2.逻辑运算符和逻辑表达式
逻辑表达式是通过逻辑运算符将操作数或等式进行逻辑判断的语句。在下面基本的逻辑运算符和逻辑表达式中,我们假设布尔变量 a 为 TRUE,b 为 FALSE:
运算符 | 运算符名 | 描述 | 表达式及结果 |
---|---|---|---|
&& | 与 | 当且仅当所有操作数都为 TRUE,表达式才为 TRUE | (a && b) 为 FALSE |
ll | 或 | 任一操作数为 TRUE,表达式为 TRUE | (a ll b) 为 TRUE |
! | 非 | 取反。若操作数为 TRUE,表达式为 FALSE;若操作数为 FALSE,表达式为 TRUE | (!b) 为 TRUE |
3.关系运算符和关系表达式
关系表达式最终产生的是一个布尔结果,它使用关系运算符判断操作数值之间的关系。若关系正确,则结果为 TRUE,若关系错误,则结果为 FALSE。在下面基本的关系运算符和关系表达式中,我们假设 a 为 3,b 为 4:
运算符 | 运算符名 | 描述 | 表达式及结果 |
---|---|---|---|
== | 等于 | 判断两个操作数的值是否相等,如果相等则结果为 TRUE | (a == b) 为 FALSE |
!= | 不等于 | 判断两个操作数的值是否相等,如果不等则结果为 TRUE | (a != b) 为 TRUE |
> | 大于 | 判断左操作数的值是否大于右操作数的值,如果是那么结果为 TRUE | (a > b) 为 FALSE |
>= | 大于等于 | 判断左操作数的值是否大于或等于右操作数的值,如果是那么结果为 TRUE | (a >= b) 为 FALSE |
< | 小于 | 判断左操作数的值是否小于右操作数的值,如果是那么结果为 TRUE | (a < b) 为 TRUE |
<= | 小于等于 | 判断左操作数的值是否小于或等于右操作数的值,如果是那么结果为 TRUE | (a <= b) 为 TRUE |
4.条件运算符和条件表达式
在 C++ 中条件运算符 ? 是三元运算符,其表达式为:
条件表达式 ? 表达式1 : 表达式2
如果条件表达式的值为 TRUE ,则返回 表达式1 的值,否则返回 表达式2 的值。
例如新建 condition.cpp 文件,输入:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
int b = 3;
int c;
c=(a>b)? a : b; //如果a大于b则返回a,否则返回b
cout<<c;
}
c 用于接收三元运算符的返回值,又因为 a>b 的布尔值为 TRUE,所以返回 a 的值。
程序结果:
5
拓展
sizeof 运算符 用于计算 对象 类型或 表达式结果 类型在内存中所占的字节数,其形式为:sizeof (对象类型名) 或 sizeof(表达式)。
在 C++ 中逗号也是一个运算符,称为 逗号运算符,其形式为: 表达式1,表达式2。
定义了从左到右的求解顺序,例如 a = 1,a + 1 其值为 2。
C++ 中最简单的赋值运算符是 ‘=’。例如 a = (x=4) / (y=2) 表达的则是 x 赋值为 4,y 赋值为 2,a 赋值为 4 / 2,即 2。除了 =,C++ 中还有一些其他比较常用的赋值运算符:
运算符 | 运算符名 | 实例 | 等价于 |
---|---|---|---|
+= | 加赋值 | i += 5 | i = i + 5 |
-= | 减赋值 | i -= 5 | i = i - 5 |
*= | 乘赋值 | i *= 5 | i = i * 5 |
/= | 除赋值 | i /= 5 | i = i / 5 |
%= | 求余赋值 | i %= 5 | i = i % 5 |
总结
本次实验学习了以下几个知识点
- 基本数据类型
- string 类
- 结构体 struct
- 变量和常量
- 运算符和表达式
此次实验我们了解了 C++ 基本的数据类型,对比了 struct 在 C 和 C++ 中的不同之处,掌握了常量和变量的声明方式,细解了各种类型的运算符和表达式,实夯 C++ 语言之基。