蓝桥杯零基础到获奖-第2章 C++ 数据类型

蓝桥杯零基础到获奖-第2章 C++ 数据类型



前言

这一篇会详细介绍c+的数据类型,然后再附上一些相关题目


一、数据类型

C++中提供了丰富的数据类型来描述⽣活中的各种数据。⽐如:可以使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓 “类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

下⾯主要探讨简单数据类型。
在这里插入图片描述

1.字符型

在这里插入图片描述
在键盘上可以敲出各种字符,如: a , q , @ , # 等,这些符号都被称为字符,字符是⽤单引号括
起来的,如: ‘a’ , ‘b’ , ‘@’ 。为了能说明这些字符,给他们抽象出⼀种类型,就是字符型,C语⾔中就是 char 。


ASCII编码
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。

在这里插入图片描述
这些表没有必要背记住几个常用的就行了
参考:https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:

• 字符 A~Z 的ASCII码值从 65~90
• 字符 a~z 的ASCII码值从 97~122
• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是 32
• 数字字符 0~9 的ASCII码值从 48~57
• 换⾏ \n 的ASCII值是: 10
• ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察


2. 整型

整型类型是对所有整数的抽象,为了能对整数形成统⼀的类型标识,就有整型;在 C 和 C++ 中 整型被分为四⼤类: short 、 int 、 long 、 long long 。

在这里插入图片描述
常用的其实就是int long的话在一些题目里面有用,数据比较大的时候


3.浮点型

浮点型式对所有实数(⼩数)的抽象,为了能对实数进⾏统⼀的类型标识,就有了浮点型。浮点型有三种:

在这里插入图片描述
代码演⽰:

#include<iostream>
using namespace std;
int main()
{
	 char c = 'a';
	 short s = -10;
	 int i = -10;
	 long l = -10;
	 long long ll = -10;
	 float k = 3.14f;
	 double d = 3.14;
	 long double ld = 3.14;
	 
	 return 0;
}

在C/C++中⼩数的书写形式:

3.14; //编译器会默认识别为double类型
3.14f; //编译器会默认识别为float类型
1e5; //这种写法是科学计数法的形式,意思是1.0*10^5
1e5+10; //1*100000+10 == 100010
1.23e5+10; //1.23*100000+10 = 123010

4 .布尔类型

C++有⼀种类型叫: bool (布尔类型),布尔类型的变量的值可以是 true 或 false ,这种类型类型的变量专⻔⽤来表⽰真或假的。当然在C和C++中,0表⽰假,⾮0表⽰真,有时候不使⽤ bool 类型也能表达相同的逻辑。

代码演⽰:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	bool flag = true;
	if (flag)
		printf("I like C++!\n");
	return 0;
}

5.signed 与 unsigned

signed 和 unsigned 关键字修饰字符型和整型类型的。
signed 关键字,表⽰⼀个类型带有正负号,包含负值;⽐如:温度、银⾏存款。unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数,⽐如:年龄。有了 signed 和 unsigned 的修饰,字符和整型类型其实更加丰富,可以有以下这些:

//字符型
char
signed char //有符号的字符类型
unsigned char //⽆符号的字符类型
//短整型
short [int]
[signed] short [int] //有符号的短整型
unsigned short [int] //⽆符号的短整型
//整型
int
[signed] int //有符号的整型
unsigned [int] //⽆符号的整型
//⻓整型
long [int] 
[signed] long [int] //有符号的⻓整型
unsigned long [int] //⽆符号的⻓整型
//更⻓的整型
long long [int]
[signed] long long [int] //有符号的
unsigned long long [int] //⽆符号的

对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int 。由于这是默认情况,关键字 signed ⼀般都省略不写,但是写了也不算错。

signed int a; //等同于int a,⼀般不写signed

int 类型也可以不带正负号,只表⽰⾮负整数。这时就必须使⽤关键字 unsigned 声明变量。

unsigned int a; // unsigned int:⽆符号整数类型

变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。⽐如,16位的 signed short int 的取值范围是: -32768~32767 ,最⼤是 32767 ;⽽
unsigned short int 的取值范围是: 0~65535 ,最⼤值增⼤到了 65535 。32位的 signed int 的取值范围可以参看 climits 中给出的定义。下⾯的定义是Dev-C++环境中, climits 中相关定义,其实如果仔细看 climits 中也是包含的
limits.h 。

#define SHRT_MIN (-32768) //有符号16位整型的最⼩值
#define SHRT_MAX 32767 //有符号16位整型的最⼤值
#define USHRT_MAX 0xffffU //⽆符号16位整型的最⼤值
#define INT_MIN (-2147483647 - 1) //有符号整型的最⼩值
#define INT_MAX 2147483647 //有符号整型的最⼤值

6. 数据类型⻓度

每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不
同,存储的数据范围就有所差异。

6.1 sizeof 操作符

sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算特定数据类型的⻓度的,单位是字节。sizeof 操作符的操作数可以是类型,也可是变量名或者表达式, sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的。

sizeof( 类型 )
sizeof 表达式

sizeof 的计算结果是 size_t 类型的, size_t 指的是⽆符号整数(该类型包含了所有可能的
unsigned int , unsigned long , unsigned long long 等类型,具体是取决于编译器
的)。

代码演⽰:

#include <iostream>
using namespace std;
int main()
{
	 int a = 10;
	 cout << sizeof(a) << endl;
	 cout << sizeof a << endl; //a是变量的名字,可以省略掉sizeof后边的(),但不
	建议去掉
	 cout << sizeof(int) << endl;
 	return 0;
}

6.2 各数据类型⻓度

#include <iostream>
using namespace std;
int main()
{
 cout << sizeof(char) << endl;
 cout << sizeof(bool) << endl;
 cout << sizeof(short) << endl;
 cout << sizeof(int) << endl;
 cout << sizeof(long) << endl;
 cout << sizeof(long long) << endl;
 cout << sizeof(float) << endl;
 cout << sizeof(double) << endl;
 cout << sizeof(long double) << endl;
 return 0;
}

在DevC++下的输出:

1
1
2
4
4
8
4
8
16

该如何理解这些数据类型的⻓度呢?其实我们使⽤这些数据类型可以向内存申请空间(就是创建变
量),不同的数据类型⼀次性申请的空间⼤⼩是有差异的。你可以这样理解:
在这里插入图片描述


7.练习

练习1:整数

https://ac.nowcoder.com/acm/problem/21985

#define _CRT_SECURE_NO_WARNINGS 
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    cin >> a;
    cout << a;
    return 0;
}

练习2:打印字符

https://www.luogu.com.cn/problem/B2018

#define _CRT_SECURE_NO_WARNINGS 
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a;
    cin >> a;
    printf("%c", a);
    return 0;
}

练习3:倒序

https://ac.nowcoder.com/acm/problem/21993

#define _CRT_SECURE_NO_WARNINGS 
#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a, b, c;
	cin >> a >> b >> c;
	cout << c <<' ' << b << ' ' << a;
	
}


练习4:整型数据类型存储空间⼤⼩

练习4:整型数据类型存储空间⼤⼩

#include <iostream>
using namespace std;
int main()
{
 	int n = 0;
	 short s = 0;
 	cout << sizeof(n) << " " << sizeof(s) << endl;
 
 	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值