C语言习题九数组的定义和使用

萌到你眼炸
969次浏览
2021年01月28日 20:26
最佳经验
本文由作者推荐

鼠的吉祥语-手续费英语

2021年1月28日发(作者:真心话大冒险片尾曲)
习题九


数组的定义和使用

1.
有以下程序

void f (int b[])
{ int i;
for(i=2;i<6;i++) b[i]* =2;}
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},i;
f(a);
for(i=0;i<10;i++) printf(
程序运行后的输出结果是
______
。

A
、
1,2,3,4,5,6,7,8,9,10, B
、
1,2,6,8,10,12,7,8,9,10,
C
、
1,2,3,4,10,12,14,16,9,10, D
、
1,2,6,8,10,12,14,16,9,10,
解析:本题在调用函数 时,实参是
&a[0]
的地址,即把
a[0]
的地址传给形参,由条件
i=2
且
i<6
得出函数
将对
a[2]
开始的
4
个元素
(
3
,
4
,
5
,
6
)
进行乘以
2
操作,
结果分别为:
a[2]=6
,
a[3]=8
,
a[4]=10
,
a[5]=12
。
a[ 0]
、
a[1]
、
a[6]
、
a[7]
、
a[8]
、
a[9]
的
值
并
没
有
发
生
变
化
,
所
以
最
后
的
输
出
结
果
为
:
1,2,6,8,10,12,7,8,9,10,< br>。故本题答案选
B
。

2.
有以下程序

main()
{ int a[4][4]={{1,4,3,2},{8,6,5,7}, {3,7,2,5},{4,8,6,1}},i,j,k,t;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i])
{t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;} /*
按列排序
*/
for(i=0;i<4;i++) printf(
}
程序运行后的输出结果是
______
。

A
、
1,6,5,7, B
、
8,7,3,1, C
、
4,7,5,2, D
、
1,6,2,1,
解析:
本题首先定义了一个
4
行
4
列的二维数组
a
,并用了三层 循环来进行按列由小到大排序操作。
外层
循环变量
i
表示数组的列,第二层循 环变量
j
表示数组的行,第三层循环用于求第
i
列第
j
行的 最小值,其中
通过
if
语句对相关数值进行比较和交换。然后再通过
for< br>语句对排序数组对角线上的值进行输出,即输出
a[0][0]
、
a[1][1 ]
、
a[2][2]
、
a[3][3]
。故本题答案选
A< br>。

3.
有以下程序

main()
{ int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf(
}
程序执行后的输出结果是
______
。

A
、
7 5 3 B
、
3 5 7 C
、
3 6 9 D
、
7 5 1

解析:本题考查的是二维数组的应用。将初始值放 在一对大括号内,按数组元素排列的顺序对各元素
赋值,
二维数组中行下标可以省略,
但列下标必须要指定,
由此题可以看出数组
t
是一个三行三列的二维数
组,执 行
for
循环语句
t[2-i][i]
分别为
t[2][0]
,
t[1][1]
,
t[0][2]
,得出输出结果为
3 5 7
。故本题答案
为
B
。

4.
有以下程序

#include
main()
{ char p[]={'a','b','c'},q[10]={'a','b','c'};
printf(
以下叙述中正确的是
______
。

A< br>、在给
p
和
q
数组置初值时,系统会自动添加字符串结束符,故输出的 长度都为
3
B
、由于
p
数组中没有字符串结束符,长度不能确定; 但
q
数组中字符长度为
3
C
、由于
q
数组中没有 字符串结束符,长度不能确定;但
p
数组中字符长度为
3
D
、由于
p
和
q
数组中没有字符串结束符,故长度都不能确定





解析:
strlen
是计算以

结束 的字符串的长度的函数,
函数的值为字符串中实际长度,
不包括

。
题 中

虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前
3
个
存储单元,其余存储单元系统自动加上

,故数组
q
的长度为
3
;由于
p
数组中没有字符串结束符,故字符
串的长度不能确定。故本题答 案为
B
。

5.
有以下程序

void sort(int a[],int n)
{int i,j,t;
for(i=0;ifor(j=i+1;jif(a[i]main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(aa+2, 5);
for(i=0;i<10;i++) printf(
printf(
程序 运行后的输出结果是
______
。

A
、
1,2,3,4,5,6,7,8,9,10, B
、
1,2,7,6,3,4,5,8,9,10,
C
、
1,2,7,6,5,4,3,8,9,10, D
、
1,2,9,8,7,6,5,4,3,10,




解析:

程序中
sort
函数的作用是将指定的数由大到 小排序。
主调函数

5);
中的实参
aa+2
是指
a a[2]
的地址,将其传给了形参
a[]
,使得形参中
a[0]
的值 为主函数中
aa[2]
的值,即
3
;实参中的
5
传给
形参中的
n
,在
sort
函数中起着限制循环次数的作用,即使得参加排序 的只有
5
个数,从
aa[2]
到
aa[6]
,所
以 本题输出的结果是
1,2,7,6,5,4,3,8,9,10,
。

故本题答案为
C
。

6.
有以下程序

main()
{char p[]={'a','b','c'},q[]=
p rintf(
程序运行后的输出结果是
______
。

A
、
4 4 B
、
3 3 C
、
3 4 D
、
4 3




解析:本题考查的是字符数组。字符数组有两种定义方式:一种是逐个字符赋给数组中各元素 ,如本
题中

的定义,
由于定义时没有给出数组大小,
此时字符个数就 是数组的长度;
另一种
是将字符串作为字符数组来处理,
如题中

的定 义形式。
C
语言规定,
字符串以
'0'
作为结束符,
并占用 一个存储空间。
sizeof()
函数是计算变量或数组所分配到的内存空间的大小,
故本题的输出结果是
3
4
。

故本题答案为
C
。

7.
已有定义:
char a[]=
,以下叙述中正确的是
______
。

A
、数组
a
和
b
的长度相同
B
、
a
数组长度小于
b
数组长度

C
、
a
数组长度大于
b
数组长度
D
、上述说法都不对

解析:本题考查的是数组定义。
C
语言规定< br>'

0'
为字符串结束标志,系统对字符串常量自动加一个
'
< br>0'
为结束符。所以
a
数组长度为
4
,而
b
数组长度为
3
(此处的数组长度与
strlen
函数所求的长度不同,此处的 长
度是指数组占内存空间的大小),故
a
数组长度大于
b
数组长度。 故本题答案为
C
。

8.
以下叙述中错误的是
______
。

A
、对于
d ouble
类型数组,不可以直接用数组名对数组进行整体输入或输出

B
、数组名代表的是数组所占存储区的首地址,其值不可改变

C
、 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出

下标越界

的出
错信息

D
、可以通过赋初值的方式确定数组元素的个数
< br>解析:本题考查的是数组的概念。在
C
语言中,如果出现下标越界的情况,系统不管在编 译还是执行
时都不会给出

下标越界

的错误提示。故本题答案为
C
。

9.
以下能正确定义一维数组的选项是
______
。

A
、
int a[5]={0,1,2,3,4,5}; B
、
char a[]={0,1,2,3,4,5};
C
、
char a={'A','B','C'}; D
、
int a[5]=




解析:本题考查 的是数组的定义。选项
A
中定义的是
5
个数组元素,但赋值的时候赋的是6
个元素,所
以出错;选项
C
不符合数组定义形式,数组名后应加上
[]

;选项
D
的类型说明符错误,如果用
char定义就
对了;选项
B
中的
0,1,2,3,4,5
分别表示对应 字符的
ASCII
码,所以选项
B
是正确的。故本题答案为
B
。

10.
以下能正确定义二维数组的是
______
。

A
、
int a[][3]; B
、
int a[][3]={2*3};
C
、
int a[][3]={}; D
、
int a[2][3]={{1},{2},{3,4}};


解析:本题考查的是二维数组的定义。选项
B
不符合二维数组的定义规范,选项
C
中不能赋空值,选项
D
中
a[2][3]
表示
a
是一个
2
行
3
列的数组,而后面赋值却赋了
3
行,故本题 答案为
A
。

11.
有以下程序

main()
{ int x[]={1,3,5,7,2,4,6,0},i,j,k;
for(i=0;i<3;i++)
for (j=2;j>=i;j--)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for (i=0;i<8;i++) printf(
printf(
程序运行后的输出结果是
______
。

A
、
75310246 B
、
01234567 C
、
76310462 D
、
13570246

解析:本题考查的是排序算法。故本题答案为
A
。

12.
有以下程序:

void sort(int a[],int n)
{ int i,j,t;
for(i=0;i for(j=i+2;j if(a[i]

鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语


鼠的吉祥语-手续费英语