C语言练习3数组参考解答.docx
《C语言练习3数组参考解答.docx》由会员分享,可在线阅读,更多相关《C语言练习3数组参考解答.docx(21页珍藏版)》请在冰豆网上搜索。
C语言练习3数组参考解答
C语言(数组)
一、选择题
1.设有程序:
main()
{inti,a[11];
printf("给数组赋值:
\n");
for(i=0;i<=10;i++)
scanf("%d",());
......
printf("输出数组:
\n");
for(i=0;i<=10;i++)
printf("%d,",());
}
则在程序中的两个园括号中分别应填入:
C
A)&a[i]和&a[i]
B)a[i]和&a[i]
C)&a[i]和a[i]
D)a[i]和a[i]
2.设已定义:
inta[15];则数组a占用的内存单元数是(C).
A)15B)16C)30D)32
3.阅读程序:
main()
{inta[2]={0},i,j,k=2;
for(i=0;ifor(j=0;jprintf("%d\n",a[k]);
}
以上程序的输出结果是(D).
A)1B)3C)2D)不确定的值
4.阅读程序:
f(intb[],intn)
{inti,r=1;
for(i=0;i<=n;i++)r=r*b[i];
returnr;
}
main()
{intx,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
printf("%d\n",x);
}
以上程序的输出结果是(D).
A)720B)6C)24D)120
5.以下定义语句中,错误的是(B).
A)inta[]={6,7,8};
B)intn=5,a[n];
C)chara[]="string";
D)chara[5]={'0','1','2','3','4'};
6.以下描述中正确的是(D).
A)数组名后面的常量表达式用一对圆括弧括起来
B)数组下标从1开始
C)数组下标的数据类型可以是整型或实型
D)数组名的规定与变量名相同
7.若定义数组并初始化chara[10]={'0','1','2','3','4','5','6','7','8','9'};指出以下错误语句(AB).
A)scanf("%c",a[0]);
B)scanf("%s",&a);
C)printf("%c",a[3]);
D)printf("%s",a);
8.若定义数组inta[10],其最后一个数组元素为(C).
A)a[0]
B)a[1]
C)a[9]
D)a[10]
9.若定义数组并初始化inta[10]={1,2,3,4},以下语句哪一个不成立(B)?
A)a[8]的值为0
B)a[1]的值为1
C)a[3]的值为4
D)a[9]的值为0
10.指出以下错误语句(A).
A)intn=10,a[n];
B)intn,a[10];
C)inta[10]={1,2,3};
D)inta[10]={1,2,3,4,5,6,7,8,9,10};
11.请读程序:
main()
{intn[2],i,j,k;
for(i=0;i<2;i++)n[i]=0;
k=2;
for(i=0;ifor(j=0;jprintf("%d\n",n[k]);
}
上面程序的输出结果是(A).
A)不确定的值B)3C)2D)1
12.若有以下的定义和语句:
intstr[12]={1,2,3,4,5,6,7,8,9,10,11,12};
charc='e',
则数值为2的表达式是(C).
A)str['g'-c]B)str[2]C)str['d'-'c']D)str['d'-c]
13.设有数组定义:
inta[5];则下列给数组元素赋值错误的是(B).
A)a[3]=93;
B)scanf("%c",a[3]);
C)a[3]=getchar();
D)a[3]='a'+3;
14.以下数组定义中错误的是(D).
A)#defineN30
inta[N+30];
B)#defineN30
inta[N];
C)inta[30];
D)inta[N];
15.在定义一个一维数组时,不能用来表示数组长度的是(D).
A)常量B)符号常量C)常量表达式D)已被赋值的变量
16.若float型变量占用4个字节,有定义floata[20]={1.1,2.1,3.1};则数组a在内存中所占的字节数是(D).
A)12B)20C)40D)80
17.设已定义:
intx[2][4]={1,2,3,4,5,6,7,8};则元素x[1][1]的正确初值是(A).
A)6B)5C)7D)1
18.设有定义:
inta[][3]={{1,2,3},{4,5,6},{7,8,9}};则a[1][2]的初值为(C).
A)2B)4C)6D)8
19.设有:
inta[4][5];则数组a占用的内存字节数是(C).
A)12B)24C)40D)20
20.以下数组定义中,不正确的是(B).
A)intb[3][4];
B)intc[3][]={{1,2},{1,2,3},{4,5,6,7}};
C)intb[200][100]={0};
D)intc[][3]={{1,2,3},{4,5,6}};
21.定义数组:
intx[2][3];则数组x的维数是
(2).
A)1B)2C)3D)6
22.若定义数组并初始化intb[2][3]={1,2,3,4,5,6},以下语句哪一个成立(C)?
A)表达式b[1][2]的值为1
B)表达式b[1][2]的值为4
C)表达式b[1][2]的值为6
D)表达式b[1][2]的值为2
23.若定义数组并初始化inta[2][3]={{1,2,3},{4,5,6}};
for(i=0;i<2;i++)
for(j=0;j<3;j++)
printf("%d",a[i][j]);语句的结果是哪一个(C)?
A)1,2,3,4,5,6
B)123456
C)123456
24.若定义数组并初始化inta[2][3]={{1,2,3},{4,5,6}};以下语句哪一个不成立(B)?
A)a数组中有6个元素
B)a[2][3]是a数组的最后一个元素的引用
C)a数组中每个元素都为整数
D)a数组是整型数组
25.定义如下变量和数组:
inti;
intx[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是(C).
for(i=0;i<3;i++)printf("%d",x[i][2-i]);
A)159B)147C)357D)369
26.如有以下定义:
doubles[][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};则数值为2的元素是(C).
A)s[1][3]B)s[0][3]C)s[0][2]D)s[1][2]
27.以下程序的输出结果是(A).
main()
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
for(i=1;i<3;i++)
for(j=0;j<=i;j++)
s+=a[i][j];
printf("%d",s);
}
A)18B)19C)20D)21
28.若已有charb[10][50];则该二维字符数组在内存所占字节数为(D).
A)10B)50C)60D)500
29.设有:
chara[10];下列语句那个是正确的(D)?
A)scanf("%s",a[0]);
B)scanf("%s",&a);
C)printf("%s",a[0])
D)printf("%s",a)
30.阅读程序:
main()
{chara[10];
inti;
for(i=1;i<=5;i++)
scanf("%c",&a[i]);
printf("%c",a[0]);
}
设从键盘输入字符串:
abcde,则程序的输出结果是(C).
A)aB)空格C)不确定D)0
31.合法的数组定义是(D).
A)inta[]="string";
B)inta[5]={0,1,2,3,4,5};
C)chara="string";
D)chara[]={'0','1','2','3'};
32.设有数组定义:
charstring[]="China";则数组string所占的空间为(B).
A)5个字节
B)6个字节
C)7个字节
D)10个字节
33.定义字符数组c:
charc[]={"clanguage"};数组c在内存中所占字节数是(C).
A)9 B)10 C)11 D)12
34.指出以下错误语句(C).
A)chara[10]={'0','1','2','3','4','5','6','7','8','9'};
B)chara[10]={'0','1','2','3'};
C)chara[2]={"1","2"};
D)chara[2]={'a’,'b’};
35.若定义数组并初始化chara[10]={"hello"},该数组的元素个数是(A).
A)10
B)5
C)6
D)7
36.若定义数组并初始化chara[10]={"HELLO"},该数组的元素中a[2]是(A).
A)'L'
B)'E'
C)'H'
D)'O'
37.若定义数组并初始化intb[10]={1,2,3,4},以下哪几个语句成立(ACD)?
A)b[8]的值为0
B)b[1]的值为1
C)b[3]的值为整数
D)b[10]不是b数组中的元素
38.若定义数组inta[10];指出下列错误语句:
ABCD
A)a数组共有10个元素,其引用方法是:
a[1],a[2]...a[10];
B)a数组是整型数组,其元素自动初始化为0;
C)a数组最后一个元素的引用方法是a[10];
D)a数组第一个元素的引用方法是a[1];
二、判断题
1.数组是数目固定的若干变量的有序集合,数组中各元素的类型可以不同。
错
2.数组是C语言的一种构造数据类型,其元素的类型可以是整型、实型、字符型甚至结构类型。
对
3.设需定义一个有15个元素的数组a,并对其前5个元素赋初值,可用如下语句实现:
inta[]={1,2,3,4,5};错
4.数组定义时,只允许使用常量表达式定义数组的大小,其值必须是正整数,而不能用变量来定义数组长度。
对
5.C语言数组的下标从0开始,下标必须是整数型的常量或变量。
对
6.数组是数目固定、类型相同的若干变量的有序集合。
数组中的每一个数(变量)称为数组元素,数组中的所有元素都属于同一种数据类型。
对
7.数组元素下标的下界是固定的,总是为0。
对
8.一维数组在引用时下标的范围是:
0<=下标<数组的长度。
对
9.若有数组定义为:
inta[100];则该数组的下界为0,上界为100。
数组元素下标范围是:
下界<=下标<上界。
对
10.设已定义:
doublea[5][5];则数组a在内存中的存放顺序是:
a[0][0],a[0][1],a[0][2],...,a[4][3],a[4][4]。
对
二.填空题
1.在C语言中,二维数组的元素在内存中的存放顺序是按行的顺序依次存放。
2.若有定义:
doublex[3][5],则x数组中行下标的下限为0,列下标的下限为0。
3.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]的值为0,a[2][1]得到的值为6。
4.字符串”ab\n\\012\\”的长度是8。
5.下面程序段的运行结果是he。
charx[]=”theteacher”;
inti=0;
while(x[++i]!
=’\0’)
if(x[i-1]==’t’)printf(“%c”,x[i]);
6.欲为字符串S1输入”HelloWorld!
”,其语句是scanf(“%s”,S1);。
7.欲将字符串S1复制到字符串S2中,其语句是strcpy(S2,S1);。
8.如果在程序中调用了strcat函数,则需要预处理命令#include。
如果调用了gets函数,则需要预处理命令#include。
9.C语言数组的下标总是从0开始,不可以为负数;构成数组各个元素具有相同的数据类型。
10.字符串是以‘\0’为结束标志的一维字符数组。
有定义:
chara[]=””;则a数组的长度是0。
三.程序阅读题
1.写出下面程序的运行结果。
main()
{inta[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++){
for(j=1;j<6;j++)
printf(“%2d”,a[i][j]);
printf(“\n”);
}
}
运行结果:
2.写出下面程序的运行结果。
main()
{inti=0;
chara[]=”abm”,b[]=”aqid”,c[10];
while(a[i]!
=’\0’&&b[i]!
=’\0’){
if(a[i]>=b[i])c[i]=a[i]-32;
elsec[i]=b[i]-32;
i++;
}
c[i]=’\0’;
puts(c);
}
运行结果:
AQM
3.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果。
main()
{chars[80];
inti=0;
gets(s);
while(s[i]!
=’\0’){
if(s[i]<=’z’&&s[i]>=’a’)
s[i]=’z’+’a’-s[i];
i++;
}
puts(s);
}
运行结果:
AzyD
4.写出下面程序的运行结果。
main()
{inti,c;
chars[2][5]={“8980”,”9198”};
for(i=3;i>=0;i--){
c=s[0][i]+s[1][i]-2*’0’;
s[0][i]=c%10+‘\0’;
}
for(i=0;i<=1;i++)puts(s[i]);
}
运行结果:
注:
s数组中每个字符的ASCII值为:
5.当运行下面程序时,从键盘上输入748915↙,则写出下面程序的运行结果。
main()
{inta[6],i,j,k,m;
for(i=0;i<6;i++)
scanf(“%d”,&a[i]);
for(i=5;i>=0;i--){
k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf(“%d”,a[m]);
printf(“\n”);
}
}
运行结果:
四.程序填空题
1.下面程序可求出矩阵a的主对角线上的元素之和,请填
(2)空使程序完整。
main()
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【i==j】)
sum=sum+【a[i][j]】;
printf(“sum=%d”,sum);
}
2.下面程序将十进制整数n转换成base进制,请填(3)空使程序完整。
main()
{inti,base,n,j,num[20];
scanf(“%d”,&n);
scanf(“%d”,&base);
do{
i++;
num[i]=【n%base】;
n=【n/base】;
}while(n!
=0);
for(【j=i;j>0;j--】)
printf(“%d”,num[j]);
}
3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完整。
main()
{inta[10],max,min,i,j,k;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
max=min=a[0];
for(i=0;i<10;i++){
if(a[i] if(a[i]>max){max=a[i];【k=i】;}
}
【max=a[j];a[j]=a[k];a[k]=max;】
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
4.下面程序的功能是在一个字符串中查找一个指定的字符,若字符串中包含该字符则输出该字符在字符串中第一次出现的位置(下标值),否则输出-1,请填
(2)空使程序完整。
#include
main()
{charc=’a’;/*需要查找的字符*/
chart[50];
inti,j,k;
gets(t);
i=【strlen(t)】;
for(k=0;k
if(【t[k]==c】)
{j=k;break;}
elsej=-1;
printf(“%d”,j);
}
5.下面程序用“顺序查找法”查找数组a中是否存在某一关键字,请填
(2)空使程序完整。
main()
{inta[10]={25,57,48,371,123,291,18,22,44};
inti=0,x;
scanf(“%d”,&x);
【a[10]=x】;
while(a[i]!
=x)i++;
if(【i<10】)printf(“found=%d\n”,i);
elseprintf(“can\’tfound!
\n”);
}
6.以下程序是将字符串b的内容连接字符数组a的内容后面,形成新字符串a,请填
(2)空使程序完整。
main()
{chara[40]=”Great”,b[]=”Wall”;
inti=0,j=0;
while(a[i]!
=’\0’)i++;
while(【b[j]!
='\0'】){
a[i]=b[j];i++;j++;
}
【a[i]='\0'】;
printf(“%s\n”,a);
}
五、编程题
[1]输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。
用下标为0元素统计字符“0”的个数,下标为1的元素统计字符“1”的个数,...。
#include
#defineN80
voidmain()
{
charchs[N];
inti,count[10];
printf("Inputastring:
");
scanf("%s",chs);
for(i=0;i<10;i++)count[i]=0;
for(i=0;i{
count[chs[i]-'0']++;
}
for(i=0;i<10;i++)
if(count[i])printf("%dcounts:
%d\n",i,count[i]);
}
[2]编写程序求任意方阵每行、每列、两对角线元素之和。
#include
#defineN5
#defineM5
voidmain()
{
inta[N][M]={{3,4,7,8,9},
{6,8,2,1,3},
{8,5,4,3,2},
{7,6,9,1,5},
{5,6,4,1,7}};
ints1[N];//存放每行的和
ints2[M];//存放每列的和
intsum1=0,sum2=0;//存放两对角线的和