参考答案_作业━━第 4 章(1)━━数组、字符数组
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考答案────数组、字符数组
【学习要点】
1.掌握一维数组的逻辑结构和物理结构。
2.掌握一维数组的定义、初始化及其使用。
3.掌握函数参数为数组时,函数参数的正确传递。
4.掌握数组应用的常用算法━━选择排序、冒泡排序、顺序查找、折半查找
5.掌握二维数组的逻辑结构和物理结构。
6.掌握二维数组的定义、初始化及其使用。
7.掌握字符数组的特点、定义、初始化及其使用,掌握字符数组的整体输入/输出。
8.掌握字符串处理的基本函数。
------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】
1.关于数组,下面描述中正确的是______。
A.与普通变量没什么区别
B.其元素的数据类型可相同,也可不同
C.可用数组名标识其元素
D.数组元素的数据类型是相同的
【答案】D
【解析】数组是一组具有线性关系且类型相同变量的集合体,用一个统一的数组名来命名,组成数组的变量称为数组元素,用数组名、方括号和下标来共同标识数组中的一个元素,下标代表该元素在数组中的位置(从0开始),数组元素也称为下标变量。
2.下面合法的数组定义是______。
A.int a[ ] = { 'A', 'B', 'C' } ;
B.int a[ 5 ] = { 0, 1, 2, 3, 4, 5 } ;
C.int a = { 'A', 'B', 'C' } ;
D.int a[ ] = { 0, 1, 2, 3, 4, 5 } ;
【答案】D
【解析】根据数组定义和初始化情况,数组类型与所赋初始数据的类型应一致。指定的数组长度应大于或等于花括号中的初始数据个数。定义数组时,可以不直接指定数组的长度,编译器会根据初值表中数据的个数来自动确定数组元素的个数。3.若有定义int a[ 2 ][ 4 ],则下面描述中不正确的是______。
A.数组a可以看成是由a[ 0 ]、a[ 1 ]两个元素组成的一维数组
B.a[ 0 ]代表一个地址常量
C.元素a[ 0 ]是由4个整型元素组成的一维数组
D.可用a[ 0 ]=5的形式给数组元素赋值
【答案】D
【解析】C++对二维数组的处理是将其看作一个特殊的一维数组,即这个数组中每个元素又是一个一维数组。所以二维数组a可认为是由两个元素a[ 0 ]、a[ 1 ]组成的一维数组,而数组元素a[ 0 ]和a[ 1 ]又是由4个int型元素组成的一维数组。C++规定了数组名代表地址常量,但数组名的值是不可改变的,故赋值语句a[ 0 ]=5 是非法的。
4.若有定义int a[ 3 ][ 4 ],则对数组a 的元素非法引用是______。
A.a[ 0 ][ 2*1 ]
B.a[ 0 ][ 4 ]
C.a[ 4-2 ][ 0 ]
D.a[ 1 ][ 3 ]
【答案】B
【解析】引用二维数组元素的格式为:数组名[ 下标表达式1 ][ 下标表达式2 ],而下标表达式可以是常量、变量,但其值必须是确定的整数且在该数组的定义范围之内,在程序执行过程中,C++对下标表达式的取值范围不作合法性检查,非法引用可能产生不可预知的运行时错误。
5.下面程序的运行结果是______。
#include
void main() { char s[ 10 ] ; s="abcd" ; cout<
A.abcd
B.不确定的值
C.数组s的首地址
D.编译出错
【答案】D
【解析】字符数组的赋值,不能通过赋值语句实现,可通过初始化或strcpy()函数来实现,即:可在程序前面加上#include
A.if ( s1>s2 )
B.if ( strcmp( s1, s2 ) )
C.if ( strcmp( s1, s2 ) > 0 )
D.if ( (s1-s2)> 0 )
【答案】C
【解析】两个字符串比较必须使用字符串比较函数strcmp( 字符串1,字符串2 ),比较的结果:相等时返回0;大于时返回正整数;小于时返回负整数。
7.若int a[3][4]={{1,2},{0},{4,6,8,10}}; 则a[1][2]、a[2][1]得到的初值分别是______。
【答案】0、6
【解析】在定义数组时,可对所有元素赋初值,也可只对前面部分的元素赋初值,而后面部分未给初值的元素,系统自动赋初值为0。二维数组中元素排列的顺序是以行为单位进行存放,按初值表中的{ }作为行元素进行赋初值。
8.语句cout < 【答案】5 【解析】按照C++中转义字符的规定,在字符串"\t\\\n\’\065\08AW" 中,含有\t、\\、\n、\'、\065转义字符,分别表示单个字符;\0也是转义字符,是字符串结束标志(\0不算在字符串长度之内),系统认为字符串到此结束,不计其后的8、A、W。注意:若将8改为7,而\07却是一个字符,加上A、W,此时字符串的长度是8。9.下面程序的运行结果是______。 #include #include void main() { char str[ 40 ]= "xyz", p1[ 20 ]= "abcd", p2[ ]= "ABCD" ; strcpy( str+2 , strcat( p1+2 , p2+1 ) ) ; cout << str << '\n' ; } 【答案】输出:xycdBCD 【解析】由于字符数组名str、p1、p2表示地址,同理表达式str+2、p1+2、p2+1的值也是地址,str+2表示字符串"xyz"中字符'z'的地址,p1+2表示字符串"abcd"中'c'的地址,p2+1表示字符串"ABCD"中字符'B'的地址,分别代表的字符串为"z"、"cd"、"BCD"。调用函数strcat(p1+2,p2+1)得到字符串"cdBCD",调用strcpy( )后,将刚才"cdBCD"拷贝到str中以'z'为起始地址的存储单元中,因此覆盖了str中从'z'开始的存储单元中的数据。 10.完善下面程序,功能是将十进制数转换为某个指定进制的数。 #include void main( ) { int num[ 50 ] , i=0 , base ; long n ; cout << ”请输入一个十进制数:” ; cin >> n ;