C++语言入门_02基本的数据类型及表达式

C++语言入门_02

蓝桥云课学习记录
2021/11/18

基本的数据类型及表达式

数据是程序处理的对象,与其他高级语言类似,在 C++ 语言中不同类型数据的处理方式也是不同的。本次实验共有三个内容,一是介绍 C++ 语言的基本数据类型,二是介绍 C++ 中的变量与常量,三是介绍运算符和表达式。

知识点
基本数据类型
string类
结构体struct
变量和常量
运算符和表达式


一、基本数据类型

编写计算机程序的目的在于高效解决现实生活中的问题,正因如此,高级语言为我们提供了许多的数据类型。C++ 的数据类型分为基本数据类型和自定义数据类型,其基本数据类型如下:

数据类型名长度(字节)取值范围
char1-128~127
bool1true,false
signed char1-128~127
unsigned char10 ~ 255
short2-32768 ~ 32767
unsigned short20 ~ 65535
int4-2147483648 ~ 2147483647
unsigned int40 ~ 4294967295
long4-2147483648 ~ 2147483647
unsigned long40 ~ 4294967295
float43.4E-38 ~ 3.4E+38
double81.7E-308 ~ 1.7E+308
long double81.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 += 5i = i + 5
-=减赋值i -= 5i = i - 5
*=乘赋值i *= 5i = i * 5
/=除赋值i /= 5i = i / 5
%=求余赋值i %= 5i = i % 5

总结

本次实验学习了以下几个知识点

  1. 基本数据类型
  2. string 类
  3. 结构体 struct
  4. 变量和常量
  5. 运算符和表达式

此次实验我们了解了 C++ 基本的数据类型,对比了 struct 在 C 和 C++ 中的不同之处,掌握了常量和变量的声明方式,细解了各种类型的运算符和表达式,实夯 C++ 语言之基。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值