第4章数组c++习题答案解析.docx
- 文档编号:10978101
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:16
- 大小:51.53KB
第4章数组c++习题答案解析.docx
《第4章数组c++习题答案解析.docx》由会员分享,可在线阅读,更多相关《第4章数组c++习题答案解析.docx(16页珍藏版)》请在冰豆网上搜索。
第4章数组c++习题答案解析
习题4
一、单项选择题
1.若有说明inta[3][4];则a数组元素的非法引用是【】
A.a[0][2*1]
B.a[1][3]
C.a[4-2][0]
D.a[0][4]
【答案】D
【解析】数组下标从0开始,a[0][4]的列下标越界。
2.在C++语言中,引用数组元素时,其数组下标的数据类型允许是【】
A.整型常量
B.整型表达式
C.整型常量或整型表达式
D.任何类型的表达式
【答案】C
3.以下不正确的定义语句是【】
A.doublex[5]={2.0,4.0,6.0,8.0,10.0};
B.inty[5]={0,1,3,5,7,9};
C.charc1[]={′1′,′2′,′3′,′4′,′5′};
D.charc2[]={′\x10′,′\xa′,′\x8′};
【答案】B
【解析】初始值的个数大于数组的大小,系统会出现编译错误。
4.对以下说明语句的正确理解是【】
inta[10]={6,7,8,9,10};
A.将5个初值依次赋给a[1]至a[5]
B.将5个初值依次赋给a[0]至a[4]
C.将5个初值依次赋给a[6]至a[10]
D.因为数组长度与初值的个数不相同,所以此语句不正确
【答案】B
5.若有说明:
inta[][4]={0,0};则下面不正确的叙述是【】
A.数组a的每个元素都可得到初值0
B.二维数组a的第一维大小为1
C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小
D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值
【答案】D
【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有2个初值说明是1行4列,所以第一维为1。
元素a[0][0]和a[0][1]赋初值为0,其余元素初值系统默认为0。
6.以下能对二维数组c进行正确的初始化的语句是【】
A.intc[3][]={{3},{3},{4}};
B.intc[][3]={{3},{3},{4}};
C.intc[3][2]={{3},{3},{4},{5}};
D.intc[][3]={{3},{},{3}};
【答案】B
【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以A答案错误。
C答案中初始值行数多于数组大小中的行大小,也是错误的。
另外初始化时,初值之间不能有空位置,故D错误。
7.以下不能对二维数组a进行正确初始化的语句是【】
A.inta[2][3]={0};
B.inta[][3]={{1,2},{0}};
C.inta[2][3]={{1,2},{3,4},{5,6}};
D.inta[][3]={1,2,3,4,5,6};
【答案】C
8.阅读下面程序,则程序段的功能是【】
#include
usingnamespacestd;
intmain()
{
intc[]={23,1,56,234,7,0,34},i,j,t;
for(i=1;i<7;i++)
{
t=c[i];j=i-1;
while(j>=0&&t>c[j])
{c[j+1]=c[j];j--;}
c[j+1]=t;
}
for(i=0;i<7;i++)
cout< putchar('\n'); return0; } A.对数组元素的升序排列 B.对数组元素的降序排列 C.对数组元素的倒序排列 D.对数组元素的随机排列 【答案】B 【解析】每层外层for循环结束会增加对一个元素的排序,确定c[0],c[1]的大小顺序,如图4-1所示。 图4-1第一次排序 第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0],c[1],c[2]的大小顺序,如图4-2所示。 图4-2第二次排序 以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。 9.下列选项中错误的说明语句是【】 A.chara[]={′t′,′o′,′y′,′o′,′u′,′\0′}; B.chara[]={"toyou\0"}; C.chara[]="toyou\0"; D.chara[]=′toyou\0′; 【答案】D 10.下述对C++语言字符数组的描述中错误的是【】 A.字符数组的下标从0开始 B.字符数组中的字符串可以进行整体输入/输出 C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D.字符数组可以存放字符串 【答案】C 11.以下二维数组c的定义形式正确的是【】 A.intc[3][] B.floatc[3,4] C.doublec[3][4] D.floatc(3)(4) 【答案】C 12.已知: intc[3][4];则对数组元素引用正确的是【】 A.c[1][4] B.c[1.5][0] C.c[1+0][0] D.以上表达都错误 【答案】C 13.若有以下语句,则正确的描述是【】 chara[]="toyou"; charb[]={′t′,′o′,′y′,′o′,′u′}; A.a数组和b数组的长度相同 B.a数组长度小于b数组长度 C.a数组长度大于b数组长度 D.a数组等价于b数组 【答案】C 【解析】a数组中存放的是字符串,数组大小为6个字节空间,分别存放′t′,′o′,′y′,′o′,′u′和′\0′,b数组的长度为5个字节空间,只存放′t′,′o′,′y′,′o′,′u′,5个字符。 二、填空题 1.若有说明: inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是________。 【答案】3 2.设有数组定义: chararray[]="China";则数组array所占的空间为________个字节。 【答案】6 3.假定int类型变量占用两个字节,其有定义: intx[10]={0,2,4};,则数组x在内存中所占字节数是________。 【答案】20 4.下面程序的功能是输出数组s中最大元素的下标,请填空。 #include usingnamespacestd; intmain() {intk,p,s[]={1,-9,7,2,-10,3}; for(p=0,k=p;p<6;p++) if(s[p]>s[k])________ cout< return0;} 【答案】k=p; 5.下面程序是删除输入的字符串中字符′H′,请填空。 #include usingnamespacestd; intmain() {chars[80]; inti,j; gets(s); for(i=j=0;s[i]! =′\0′;i++) if(s[i]! =′H′) {________} s[j]=′\0′; puts(s); return0;} 【答案】s[j++]=s[i]; 【解析】此处相当于补充了2条语句,等价于s[j]=s[i];j++;。 6.已知: chara[20]="abc",b[20]="defghi";则执行cout< 【答案】6 7.有如下定义语句: intaa[][3]={12,23,34,4,5,6,78,89,45};,则45在数组aa中的行列坐标各为________。 【答案】2和2 8.若二维数组a有m列,则计算任一元素a[i][j]在数组中相对位置的公式为(假设a[0][0]位于数组的第一个位置上)________。 【答案】i*m+j+1 9.定义如下变量和数组: intk; inta[3][3]={9,8,7,6,5,4,3,2,1}; 则语句for(k=0;k<3;k++)cout< 【答案】951 【解析】定义的二维数组可以描述一个方阵: 987 654 321 语句功能是实现该方阵主对角线上元素的输出。 10.已知: chara[15],b[15]={"Ilovechina"};则在程序中能将字符串Ilovechina赋给数组a的语句是________。 【答案】strcpy(a,b); 三、读程序写结果 1.程序代码如下 #include usingnamespacestd; intmain() { chararr[2][4]; strcpy(arr[0],"you"); strcpy(arr[1],"me"); arr[0][3]='&'; cout< return0; } 【答案】you&me 2.程序代码如下: #include usingnamespacestd; intmain() { chara[]={'a','b','c','d','e','f','g','h','\0'}; inti,j; i=sizeof(a); j=strlen(a); cout< return0; } 【答案】9,8 3.程序代码如下: #include usingnamespacestd; intmain() { inti; inta[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) cout< return0; } 【答案】753 【解析】程序功能是实现一个方阵次对角线上元素的输出。 4.程序代码如下: #include usingnamespacestd; intmain() { chara[30]="nicetomeetyou! "; strcpy(a+strlen(a)/2,"you"); cout< return0; } 【答案】nicetoyou 5.程序代码如下: #include usingnamespacestd; intmain() { intk[30]={12,324,45,6,768,98,21,34,453,456}; intcount=0,i=0; while(k[i]) { if(k[i]%2==0||k[i]%5==0) count++; i++; } cout< return0; } 【答案】8,10 6.程序代码如下: #include usingnamespacestd; intmain() { chara[30],b[30]; intk; gets(a); gets(b); k=strcmp(a,b); if(k>0)puts(a); elseif(k<0)puts(b); return0; } 输入love↙ China↙ 输出结果是? 【答案】love 【解析】strcmp(a,b)函数功能是比较a和b字符串的大小,比较是逐个字符的比较,比较方法是ASCII码值做减法,k='l'-'C'>,所以结果输出字符串a。 四、编程题 1.编程实现功能: 删去一维数组中所有相同的数,使之只剩一个。 数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,若一维数组中的数据是: 2223445666677899101010 删除后,数组中的内容应该是: 2345678910。 思路: fun函数的2个形式参数,分别接收数组名,即数组的首地址,和数组中存放的原始数据的个数,fun函数对原始数组按题目处理后,在主函数中输出的数组a就是处理后的数组,这里函数之间参数传递属于地址传递。 程序代码如下: #include usingnamespacestd; constN=80; intfun(inta[],intn) {inti,j=1; for(i=1;i if(a[j-1]! =a[i])a[j++]=a[i]; returnj; } intmain() {inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19; cout<<"原始数组中的数据是: "< for(i=0;i<19;i++) cout< n=fun(a,n); cout<<"\n删除后,数组中的数据是:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 c+ 习题 答案 解析