目录
1.总体概要
数组
数组概念
就是一组数据,是由一组具有相同数据类型的变量组成的。
数组定义方式
确定数组名称、元素类型、数组结构
//数据类型 数组名[长度]
int a[5];
注:数组长度只能是大于0的整数,且不能是变量和变量表达式
数组初始化
数组其它初始化方式
数组下标
数组元素在内存中是顺序、连续存储的,每个元素都有对应的编号,这个编号称为数组下标
注:数组下标从0开始且必须为整数!!! 因此下标范围是 0 ~ 数组长度-1
不过像int arr['1']; int arr['s']; 用字符char类型这样的定义是正确的
数组元素访问
格式:数组名称[下标表达式]
数组的存储空间
概念
数组元素在内存中是顺序、连续存储的,所以当数组初始化时,也是按照顺序来完成的。 逻辑上相邻的两个元素在物理地址上也是相邻的。
数组所占内存计算
等于所有元素所占内存之和
解析:首先分析double类型占多少字节,并计算数组长度,两者相乘即可,上述为8(double所占字节)×3(数组长度) = 24。 结果为A
数组注意事项(重点)
下标越界
注:下标为负数或者超过数组长度时,程序的编译不会出错,但运行时可能会发生意想不到的错误!
数组赋值
定义数组位置
字符串
字符数组
与字符串的联系
字符串:0个或1个或多个字符组成的一串字符,可以是字母、数字、中文或其他符号。C++中,字符串需要使用双引号包含。
使用字符数组保存字符串时,必须使用字符‘\0’结尾,‘\0’是字符串结尾的标记
字符数组初始化方式:
上述错误原因:字符数组的最后一个字符本身是没有限制的,但如果是用于保存字符串时,则必须使用字符‘\0’结尾
字符数组的操作函数
其中strlen是重点,它属于字符数组的方法,注意和字符串的length区别开来
解析:由于 arr
没有以‘\0’结束,strlen
函数的行为是未定义的。它可能会读取超出 arr
的内存,导致程序崩溃或返回意外的长度。
string字符串
string是一种数据类型,表示字符串 string类型的变量可以存储字符串
字符串初始化
遍历字符串
length()或size()获取长度
字符串输入
字符串常用操作函数
除此之外,还有:
substr(int pos,int n):pos表示指定位置下标,n是所需查找长度。表示从指定位置开始,查找字符串的子串
insert(int pos,string str2):pos表示指定位置下标,str是所要插入的字符串。表示给字符串在指定位置插入子串
erase(int pos,int n):pos表示指定位置下标,n是所要删除长度。表示从指定位置开始,删除字符串中的某些字符
replace():从指定位置开始,对字符串中指定字符进行替换
进制与进制转换
在GESP中,重点掌握二进制、十进制、十六进制间的相互转换即可
二进制与十进制互换
例题:
解析:37/2 = 18......1 18/2 = 9.......0 9/2 = 4......1 4/2 = 2......0 2/2 = 1......0 1/2 = 0......1
从后向前将余数整合,即100101,答案选B
带小数的转换
十进制转二进制:整数部分除2取余,逆序输出; 小数部分,乘2取整法,顺序输出
例题:
解析:首先将13.375分为两个部分(整数和小数),13和0.375,其中整数部分采用除2取余,逆序输出;小数部分采用乘2取整,顺序输出
13/2 = 6......1 6/2 = 3......0 3/2 = 1......1 1/2 = 0......1 (然后整数部分逆序:1101)
0.375×2 = 0.75 0.75×2 = 1.5 0.5×2 = 1 (然后小数部分顺序:011)
二进制转十进制:将二进制数按位权展开后求和 小数部分位权的权值从左往右依次为-1,-2,-3...
例题:
解析:主要分析权重即可,11.01 从右到左依次叠加,即:1×2的负二次方 + 0×2的负一次方+1×2的零次方 + 1×2的一次方 = 0.25 + 0 + 1 + 2 = 3.25
十六进制
特点:逢“十六”进一,它包括这些数:0~9 A~F或a~f,并且在代码中,常常用“0x”作为十六进制的标识,例如0x10,即标识“10”这个是十六进制的
十六进制与十进制的转换
十六进制与二进制的转换
例题:
解析:观察到0x,则可判断其为十六进制,则根据十六进制转十进制的方法,可以将其写成:
15×16的1次方+15×16的0次方 = 240+15 = 255
例题2:
解析:考察ASCALL码、十六进制的相关知识,由0x41为‘A’,则‘L’与其距离11个单位,因此正确答案应该为4C(这道题也可先将‘0x41’转换为十进制,再经过计算重新转换为十六进制)
带小数的转换
注:二进制、八进制、十进制、十六进制之间的转换,都可以先变成十进制,再转换为其它进制去计算
其中二进制与八进制 二进制与十六进制的转换是有技巧的: 八进制中的一位对应二进制的三位、十六进制中的一位对应二进制中的四位
例题:
解析:
我们可以将“1101111” 每四位作为一组拆分,其中1111作为一组、110不足四位则补为0110,
因此就是0110 1111,因此十六进制就对应为 0x6f, 正确答案选C
例题2:
解析:此题四个选项都是不同进制,此时将它们统一为一个进制去比较(如十进制)即可