第4章数组c习题答案解析文档格式.docx
《第4章数组c习题答案解析文档格式.docx》由会员分享,可在线阅读,更多相关《第4章数组c习题答案解析文档格式.docx(18页珍藏版)》请在冰点文库上搜索。
C.当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小
D.只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值
【解析】二维数组初始化时,行大小可以省略,被省略的大小根据初值的个数系统来确定,本题中,有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}};
【解析】二维数组初始化时,行大小可以省略,列大小不可以省略,所以
答案中初始值行数多于数组大小中的行大小,也是错误的。
另外初始化时,
空位置,故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<
iostream>
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++)cout<
<
c[i]<
\t'
;
putchar('
\n'
);
return0;
}
A.对数组元素的升序排列
B.对数组元素的降序排列
C.对数组元素的倒序排列
D.对数组元素的随机排列
【解析】每层外层for循环结束会增加对一个元素的排序,确定c[0],c[1]
4-1所示。
c[0]|c[1]
c[2]c[3]
c[4]
c[5]
c[6]
23
1
56
2347
70
34
n
1<
图4-1第一次排序
第二次将c[2]分别与前2两个元素比较,插入最前面,确定c[0],c[1],c[2]
A答案错误。
C初值之间不能有
的大小顺序,如图
的大小顺序,如
图4-2所示。
c[0]
c[1]
c[2]
c[3]
c[5]c[6]
56\
234
34]
37
23<
134i
名
t=56
图4-2第二次排序
以此类推,外层6次循环后,将无序的数组实现大到小的降序排列。
9.下列选项中错误的说明语句是【】
A.chara[]={'
t'
,‘00'
y'
,‘o'
,‘u'
,‘
B.chara[]={"
toyou\0"
};
C.chara[]="
D.chara[]=,toyo;
10.下述对C++语言字符数组的描述中错误的是【】
A.字符数组的下标从0开始
B.字符数组中的字符串可以进行整体输入/输出
C.可以在赋值语句中通过赋值运算符“=对字符数组整体赋值
D.字符数组可以存放字符串
11•以下二维数组c的定义形式正确的是【】
A.intc[3][]
B.floatc[3,4]
C.doublec[3][4]
D.floatc(3)(4)
12.已知:
intc[3][4];
则对数组元素引用正确的是【】
A.c[1][4]
B.c[][0]
C.c[1+0][0]
D.以上表达都错误
13.若有以下语句,则正确的描述是【】
chara[]="
toyou"
charb[]={'
,‘o'
,‘y'
,‘u'
A.a数组和b数组的长度相同
B.a数组长度小于b数组长度
C.a数组长度大于b数组长度
D.a数组等价于b数组
【解析】a数组中存放的是字符串,数组大小为6个字节空间,分别存放’t'
和y0'
,'
o'
b数组的长度为5个字节空间,只存放’t'
o'
,5个字符。
o'
'
u'
二、填空题
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中最大元素的下标,请填空。
{intk,p,s[]={1,-9,7,2,-10,3};
for(p=0,k=p;
p<
6;
p++)if(s[p]>
s[k])
cout<
k<
endl;
return0;
【答案】k=p;
5.下面程序是删除输入的字符串中字符’,请填空。
intmain(){chars[80];
\inti,j;
gets(s);
for(i=j=0;
s[i]!
=0'
;
if(s[i]!
='
H'
)
s[j]=0'
;
puts(s);
【答案】s[j++]=s[i];
【解析】此处相当于补充了2条语句,等价于s[j]=s[i];
j++;
。
6.已知:
chara[20]="
abc"
b[20]="
defghi"
则执行cout<
strlen(strcpy(a,b));
语句后的输出结果
为。
'
、/
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<
a[k][k];
的输出结果是。
【答案】951
【解析】定义的二维数组可以描述一个方阵:
/987
/654\
/321\
/语句功能是实现该方阵主对角线上元素的输出。
\
10.已知:
chara[15],b[15]={"
llovechina"
则在程序中能将字符串Ilovechina赋给数组a的
语句是。
【答案】strcpy(a,b);
三、读程序写结果
1.程序代码如下
chararr[2][4];
strcpy(arr[0],"
you"
strcpy(arr[1],"
me"
arr[0][3]='
arr[0]<
【答案】you&
me
2.程序代码如下:
chara[]={'
a'
'
b'
c'
d'
e'
f'
g'
'
h'
\O'
inti,j;
i=sizeof(a);
j=strlen(a);
i<
"
"
j<
【答案】9,8
3.程序代码如下:
inti;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;
a[2-i][i];
【答案】753
【解析】程序功能是实现一个方阵次对角线上元素的输出。
4.程序代码如下:
chara[30]="
nicetomeetyou!
strcpy(a+strlen(a)/2,"
you"
a<
【答案】nicetoyou
5.程序代码如下:
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++;
count<
【答案】8,10
6.程序代码如下:
\/
chara[30],b[30];
gets(a);
gets(b);
k=strcmp(a,b);
if(k>
0)puts(a);
elseif(k<
0)puts(b);
输入love
China
输出结果是?
【答案】love
【解析】strcmp(a,b)函数功能是比较a和b字符串的大小,比较是逐个字符的比较,比较方
法是ASCII码值做减法,k=T-C>
,所以结果输出字符串a。
四、编程题
1•编程实现功能:
删去一维数组中所有相同的数,使之只剩一个。
数组中的数已按由
小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,若一维数组中的数据是:
2223445666677899101010
删除后,数组中的内容应该是:
2345678910。
思路:
fun函数的2个形式参数,分别接收数组名,即数组的首地址,和数组中存放的
原始数据的个数,fun函数对原始数组按题目处理后,在主函数中输出的数组a就是处理后
的数组,这里函数之间参数传递属于地址传递。
程序代码如下:
constN=80;
intfun(inta[],intn)
{inti,j=1;
n;
i++)
if(a[j-1]!
=a[i])a[j++]=a[i];
returnj;
{inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10},i,n=19;
原始数组中的数据是:
"
19;
a[i]<
n=fun(a,n);
\n删除后,数组中的数据是:
endl;
2•编程实现功能:
从键盘上输入若干个学生的成绩,当输入负数时表示输入结束,计算学生的平均成绩,并输出低于平均分的学生成绩。
使用循环输入学生的成绩,注意循环条件有2个,分别是输入成绩个数大于数组的大小和输入成绩为负数时结束,同时记录输入成绩的个数n。
结束输入后,计算平均值和
筛选小于60分的成绩并输出。
intmain()
{constN=800;
floatx[N],sum=O,ave,a;
intn=0,i;
输入学生成绩:
cin>
>
a;
while(a>
*N)
{sum+=a;
x[n]=a;
n++;
cin>
输入的"
n<
名学生成绩为:
for(i=0;
i<
n;
i++)cout<
x[i]<
ave=sum/n;
平均分:
ave<
低于平均分的成绩:
if(x[i]<
ave)cout<
3•编程实现功能:
对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码值之差。
例如:
输入的两个字符串分别为abcdefg和abceef,则
输出为-1。
题目要求实现的功能,相当于字符串处理函数strcmp的功能,即:
图4-3字符串比较示意图
使用循环逐个比较两个字符串的每个字符,当字符出现不相等时,跳出循求不相同的两
个字符的ASCII码值的差输出。
#include"
{charstr1[80],str2[80],c;
inti=O,s;
gets(str1);
gets(str2);
while((str1[i]==str2[i])&
(str1[i]!
\0'
))i++;
s=str1[i]-str2[i];
s<
4•编程实现功能:
求二维数组周边元素之和。
二维数组中的数据可以看成一个二维矩阵,例如下面的二维数组,输出周边元素
之和为
:
sum=48,用两个并列的for循环实现求累加和。
2
3
4
5
6
7
usingnamespacestd;
constM=4;
constN=4;
{inta[M][N],i,j,sum=O;
M;
i++)for(j=0;
j<
N;
j++)
cin>
>
a[i][j];
i++)/*求第1行和第4行元素和*/
{sum+=a[0][i];
sum+=a[M-1][i];
for(i=1;
M-1;
i++)/*求第1列和第4列元素和,
/但不包括a[0][0],a[3][0],a[0][3],a[3][3]四个角上的元素*/
{sum+=a[i][0];
sum+=a[i][N_1];
二维数组周边元素之和为:
sum<
5.编程求出3阶方阵的两条对角线上元素之和。
程序代码如下:
{intarr[3][3]={0,2,2,3,4,4,5,6,6},a=0,b=0,i,j;
for(j=0;
j++)if(i==j)a=a+arr[i][j];
i++)for(j=2;
j>
=0;
j--)
/*求主对角线上元素和*/
/*求次对角线上元素和*/
if(i+j==2)b=b+arr[i][j];
主对角线元素和为:
次对角线元素和为:
b<
6.编程序求Fibonacci数列的前10项,并按每行数列的定义为:
3个数的格式输出该数列。
Fibonacci
1(n=1)
fn=“1(n=2)
-fn-1+fn-2(n>
2)
iomanip>
intmain()
{inti;
longf[10]={1,1};
for(i=2;
30;
f[i]=f[i-2]+f[i-1];
10;
{if(i%3==0)cout<
\n"
cout<
setw(12)<
f[i];