第4章数组c 习题答案解析1_第1页
第4章数组c 习题答案解析1_第2页
第4章数组c 习题答案解析1_第3页
第4章数组c 习题答案解析1_第4页
第4章数组c 习题答案解析1_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习题4

一、单项选择题

1.若有说明inta[3][4];则a数组元素的非法引用是【】

A.a[0][2*l]

B.a[l][3]

C.a[4-2][0]

D.a[O][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.charcl口=r1','2','3','4','5'};

D.charc2[]={r\xl0','\xa','\x8');

【答案】B

【解析】初始值的个数大广数组的大小,系统会出现编译错误。

4.对以下说明语句的正确理解是【】

inta[10]={6,7,8,9,10};

A,将5个初值依次赋给a[l]至a[5]

B.将5个初值依次赋给a[0]至a[4]

C.将5个初值依次赋给a[6]至a[10]

D.因为数组长度及初值的个数不相同,所以此语句不正确

【答案】B

5.若有说明:inta[][4]={0,0};则下面不正确的叙述是[]

A.数组a的每个元素都可得到初值0

D.二维数组a的第•维大小为1

C.当初值的个数能被笫二维的常量表达式的值除尽忖,所得商数就是笫一维的大小

D.只有元素a[0][0]和可得到初值,其余元素均得不到确定的初值

【答案】D

【解析】二.维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,

有2个初值说明是1行4列,所以第一•维为1。元素a[0][0]和贼初值为0,其余元素初侑系统默

认为0。

6.以下能对二维数组c进行正确的初始化的语句是【】

A.intc⑶口―}};

B.intc[][3]={{3},{3},⑷};

C.intc[3][2]={{3},{3}J4},{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]={{L2),{3,4},{5,6}};

D.inta[][3]={l,2,3,4,5,6):

【答案】C

8.阅读下面程序,则程序段的功能是【】

#includc<iostream>

usingnamespacesld;

intinainO

intc[]={23,1,56,234,7,0,34},i,j.t:

for(i=l;i<7;i++)

t=c[i];j=i-l;

while(j>=0&&t>c[j])

{c[j+l]=c[j];j—;}

c[j+l]=t;

for(i=0;i<7;i++)

cout<<c[i]«>\t';

putchar(,\n');

return0;

A.对数组元素的升序排列

B.对数组元素的降序排列

C.对数组元索的倒序排列

D.对数组元素的随机排列

【答案】B

【解析】每层外层for循环结束会增加对一个元素的排序,确定c〔0〕,c[l]的大小顺序,如图4T

所示。

图4T第一次排序

第二次将c[2]分别及前2两个元素比较,插入最前面,确定c[0]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[]=ztoyou\Or:

【答案】D

10.下述对C++语言字符数组的描述中错误的是【】

A.字符数组的下标从。开始

B.字符数组中的字符串可以进行整体输入/输出

C.可以在赋值语句中通过赋埔运算符“=”对字符数组搐体赋值

D,字符数组可以存放字符串

【答案】C

U.以下二维数组c的定义形式正确的是【】

A.intc[3][]

B.floatc[3,4]

C.doublec⑶⑷

D.floatc(3)(4)

【答案】C

12.已知:intc[3][4];则对数组元素引用正确的是1]

A.c[l][4]

B.c[1.5][0]

C.c[l+0][0]

D.以上表达都错误

【答案】C

13.若有以下语句,则正确的描述是【】

chara[]="toyou”;

charb[]=(-o—yJo\—

A.a数组和b数组的长度相同

B.a数组长度小于b数组长度

C.a数组长度大于b数组长度

D.a数组等价于b数组

【答案】C

【解析】a数组中存放的是字符串,数组大小为6个字节空间,分别存

放'",'o'Jy',',u'和'\0',b数组的长度为5个字节空间,只存

放't'o'y'u',5个字符。

二、填空题

1.若有说明:inta口=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<iostream>

usingnamespacesld;

intmainO

{intk,p,s[]={l,-9,7,2,-10,3);

for(p=0,k=p;p<6;p++;

if(s[p]>s[k])

cout«k<<endl;

return0:)

【答案】k=D;

5.下面程序是删除输入的字符串中字符’H',请填空。

#includc<iostream>

usingnamespacestd;

intmainO

{chars[80]:

inti,j;

gets(s);

for(i=j=0;s[i]!=,\0f:i+-)

i£(s[i]!=’H')

()

s[j]=z\(r;

puts(s);

return0;}

【答案】s[j++]=s[i];

【解析】此处相当于补充了2条语句,等价于s[j]=s[i];j++:0

6.已知:chara[20]="abc”,b[20]="defghi”;则执行cout«strlen(strcpy(a,b));语句后的输

出结果为.

【答案】6

7.有如下定义语句:int皱口[3]={12,23,3定又5,6,78,89,45};,则45在数组22中的行列坐标各

为________。

【答案】2和2

8.若二维数组a有m列,则计算任一元素在数组中相对位置的公式为(假设a[0][0]位于

数组的第一个位置上)_______。

【答案】i*m+j+l

9.定义如下变址和数组:

intk;

inta[3][3]={9,8,7,6,5,4,3,2,1);

则语句for(k=0;k<3;k++)cout«a[k][k];的输出结果是。

【答案】951

【解析】定义的二维数组可以描述一个方阵:

987

654

321

语句功能是实现该方阵主对角线上元素的输出。

10.已知:chara[15],b[15]=(*Ilovechina”己则在程序中能将字符串Ilovechina赋给数组a

的语句是________。

【答案】strcpy(a,b):

三、读程序写结果

1.程序代码如下

ttinclude<iostream>

usingnamespacestd;

intmainO

chararr[2][4];

strcpy(arr[0:,"you"):

strcpy(arrf1],"mo");

arr[0][3]=,:

cout«arr[0]«endl;

return0:

【答案】you&mc

2.程序代码如下:

»include<iostream)

usingnamespacestd:

intmainO

chara[]={'a','b','c','d','c','f',

inti,j;

i=sizeof(a);

j-Gtrlcn(a);

cout«i«*,*«j«erdl:

return0;

【答案】9,8

3.程序代码如下:

ttinclude<iostream>

usingnamespacestd:

intmainO

inti;

inta[3][3]={1,2,3,4,5,6,7,8,9}:

for(i=0;i<3:i++)

cout«a[2-i][i];

return0;

【答案】753

【解析】程序功能是实现一个方阵次对角线上元素的输出。

4.程序代码如下:

ttinclude<iostream>

usingnamespacesld;

intmainO

chara[30]=*nicetoneetyou!*;

strcpy(a+strlen(a)/2,*you*);

cout<<a«endl;

return0;

【答案】nicetoyou

5.程序代码如下:

Hincludc<iostream>

usingnamespacestd;

intmainO

intk[30]-(12,324,45,6,768,98,21,34,453,156);

intcount=0,i=0:

whilc(k[i])

if(k[i]%2=0|k[i]%5=0)

counl++:

i++;

cout«count«*.w«i«endl:

return0;

【答案】8,10

6.程序代码如下:

#includedoslream〉

usingnamespacestd:

intmainO

chara[30],b[30]:

inik;

gets(a);

gcts(b);

k=strcmp(a,b);

if(k>0)puts(a):

elseif(k<0)puts(b):

return0;

输入love

China

输出结果是?

【答案】love

【解析】strcmp(a,b)函数功能是比较a和b字符串的大小,比较是逐个字符的比较,比较方法是

ASCH码值做减法,k=r-O,所以结果输出字符串a。

四、编程题

1.编程实现功能:删去•维数组中所rr相同的数,使之只剩•个。数组中的数已按由小到大的顺序

排列,函数返回棚除后数组中数据的个数。

例如,若•维数组中的数据是:

2223445666677899101010

删除后,数组中的内容应该是:

2345678910.,

思路:fun函数的2个形式参数,分别接收数组名,印数组的首地址,和数组中存放的原始数据的

个数,fun函数对原始数组按题目处理后,在生函数中输出的数组a就是处理后的数组,这里函数之间参

数传递属于地址传递。

程序代码如下:

»include<iostream)

usingnamespacestd;

constN=80:

intfun(inta口,intn)

(inti,j=l;

for(i=l:i<n:i++)

if(a[j-l]!=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;

coul<<"原始数组中的数据是:"Gendl;

for(i=0:i<19;i++)

n=fun(a,n);

cout«"\n删除后,数组中的数据是:*<<endl;

for(i=0:I<n;i++)

cout«a[i]«*":

cout«endl:

return0;

2.编程实现功能:从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算学生的平均

成绩,并输出低于平均分的学生成绩。

思路:使用循环输入学生的成绩,注意循环条件有2个,分别是输入成绩个数大于数组的大小和输

入成绩为负数时结束,同时记录输入成绩的个数n。结束输入后,计算平均值和筛选小广60分的成绩并输

出。

程序代码如下:

ttinclude<iostream〉

usingnamespacestd;

intmain()

{constN=800;

floatx[N],sum=0,ave,a;

intn=0,i;

cout<<”输入学生成绩:\<endl;

cin>>a;

while(a>=0&&n<N)

{sum+=a:

x[n]=a;

n++;

cin»a;

CQUt«"输入的"<<n<<"名学生成绩为:”;

for(i=0;i<n;i++)

cout«x[i]«*

cout«endl:

avc=sum/n;

cout<X”平均分:*«ave«endl;

coul«”低于平均分的成绩:”;

for(i=0:i<n:i++)

if(x[i]<ave)cout«x[i]«^*;

cout«cndl;

return0;

3.编程实现功能:对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字

符的ASCII码值之差。例如:输入的两个字符串分别为abcdofg和abcccf,则输出为7。

思路:题目要求实现的功能,相当于字符串处理函数strcmp的功能,即:

图,卜3字符串比较示意图

使用循环逐个比较两个字符串的每个字符,当字符出现不相等时,跳出循求不相同的两个字符的

ASCII码值的差输出。

程序代码如下:

ttinclude<iostream>

usingnamespacestd;

^include“string,h”

intmain()

{charstrl[80],str2[80],c:inti=0,s:

gets(strl):

gets(str2);

while((strlfi]■--str2[i])&&(strl[i]!->\0'))

i++;

s=strl[i]-str2[i]:

cout«s«endl;

return0;

4.编程实现功能:求二维数组周边元素之和。

思路:二维数组中的数据可以看成一个二维矩阵,例如下面的二维数组,输出周边元素之和为:

sumF8,用两个并列的for循环实现求累加和。

1234

2345

3456

4567

程序代码如下:

ttinclude<iostream>

usingnamespacestd:

^include"string』”

constM=4;

constN=4;

intmain()

{inta[M][N],i,j,sum=0:

for(i=0;i<M;i++)

for(j=0;j<N;j++)

cin»a[i][j];

for(i=0:i<N:i++)/*求笫1行和第4行元素和*/

(sum+=a[0][i];

sum+=a[M-l][i];

for(i=l;i<M-l;i++)/*求第l列和第4列元素和,

但不包括a[0][0],a[3][0],a[0][3],a[3][3]四个角上的元素”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论