参考答案_作业━━第 4 章(1)━━数组、字符数组

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 ,并将s="abcd"; 改为strcpy( s , “abcd” ); 后程序的运行结果是abcd。6.若有定义char s1[ 10 ], s2[ 10 ],能判断字符串s1是否大于字符串s2的是______。

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 ;

相关文档
最新文档