国家二级C语言(数组)机试模拟试卷5
选择题
1.若有定义:int x[10],*pt=x;,则对x数组元素的正确引用是( )。(D)
A. pt+3
B. *&x[10]
C. *(pt+10)
D. *(x+3)
解析:没有A选项的引用形式。*与&放在一起作用抵消,但x[10]下标10超出了数组下标范围,所以B选项错误。最大只能引用到x[9],而*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。D选项正确。
2.有以下程序:
#inelude<stdio.h>
main( )
{
int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)
s+=*(t+i);
prinff(\\(B)
A. 20
B. 25
C. 45
D. 36
解析:统计1~9这9个数中的奇数和,此题考查指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此*(t+i)代表数组的第i+1个元素。程序的运行结果是1+3+5+7+9=25。
3.有以下程序:
#include<stdio.h>
main( )
{
int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)
e[s[i]]++;
for(i=1;i<5;i++)
prinff(\\(B)
A. 2 3 4 4
B. 4 3 3 2
C. 1 2 3 4
D. 1 1 2 3
解析:在for(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2,因此B选项正确。
4.下列定义数组的语句中正确的是( )。(A)
A. #define N10
int x[N];
B. int N=10;
int x[N];
C. int x[0..10];
D. int x[];
解析:数组说明的一般形式为:类型说明符数组名[常量表达式]。B选项中N是变量,不能用变量定义数组长度。C选项中数组长度是一串非法的数字。定义数组时必须为其指明长度,D选项中的数组长度为空,所以非法。
5.下列选项中能正确定义数组的语句是( )。(D)
A. int num[0…2008];
int num[N];
B. int num[];
int num[N];
C. int N=2008;
D. #define N2008
解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中的数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。D选项正确。
6.若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是( )。(B)
A. #define n5
int a[2*n];
B. int n=10,a[n];
int a[N];
C. int a[5+5];
D. #define N10
解析:一维数组的定义方式为:类型说明符数组名[常量表达式];注意定义数组时,元素个数不能是变量,因此应该选择B选项。
7.设有定义:doublea[10],*s=a;,以下能够代表数组元素a[3]的是( )。(B)
A. (*s)[3]
B. *(s+3)
C. *s[3]
D. *s+3
解析:题中,首先定义了double型的数组a,并将数组首地址赋给指针s。s[3]能够表示a[3],故选项A、C不能表示a[3];选项D的*s+3=a[0]+3。故本题答案为B选项。
8.有以下程序:
#include<stdio.h>
main( )
{
int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++)
printf(\\(A)
A. 3 5 7
B. 7 5 3
C. 3 6 9
D. 7 5 1
解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结束,即t[2][0]=3、t[1][1]=5、t[0][2]=7,因此A选项正确。
9.下列定义语句中错误的是( )。
B
解析:二维数组定义的一般形式是:类型说明符数组名[常量表达式1][常量表达式2]。其中常量表达式1表示第一维下标的长度,常量表达式2衷示第二维下标的长度。如对二维数组的全部元素赋初值,则第一维的长度可以不给出。但如果对x[4][]赋值,只确定行数,丽不确定列数,就无法正确赋值。因此B选项正确。
10.下列定义数组的语句中错误的是( )。
D
解析:D选项中x[2][3]定义的是一个2行3列的二维数组,而在给数组元素赋值时却赋成了3行,所以错误。
11.下列定义数组的语句中错误的是( )。
B
解析:B选项中定义的数组为2行4列,而赋值时赋成了3行,所以出错。
12.若有定义语句:char s[10]=\\(A)
A. 7
B. 8
C. 9
D. 10
解析:strlen( )函数是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中的字符串从第一个字符开始,遇到第一个结束标识’\0’为止,注意’\0’不占字符串长度,所以字符串长度为7,因此A选项正确。
13.有以下程序:
#include<stdio.h>
#include<string.h>
main( )
{
char p[20]={’a’,’b’,’c’,’d’},q[]=\\(C)
A. 11
B. 9
C. 6
D. 7
解析:strcpy:字符串复制函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符’\0’);strcat:字符串连接函数。执行完语句strcat(p,r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,e;执行语句strcpy(p+strlen(q),q);得到的结果是将q所指向的字符串复制至p+strlen(q)开始的存储位置,因为strlen的值为3,即p+3开始存储q中的元素,所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的存储元素为a,b,c,
14.有以下程序(strcat函数用于连接两个字符串):
#include<stdio.h>
#include<string.h>
本文档预览:3600字符,共7154字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载