1、二级 C 语言-173 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:45,分数:100.00)1.以下不正确的定义语句是_。(分数:2.00)A.double x5=1.0,2.0,3.0,4.0,5.0);B.int y5=0,1,2,3,4,5);C.char c1=“1“,“2“,“3“,“4“,“5“;D.char c2=“a“,“b“,“c“);2.以下程序的输出结果为_。 #includestdio.h main() char*p=“abcdefgh“,“ijkl“,“mnop“,“qrst“,“uvwx“; int i; for(i=0;i3;i+)
2、 puts(pi); Aabcdefgh Bijkl C (分数:2.00)A.B.C.D.3.若有以下定义,则正确引用数组元素的是_。 int a5,*p=a;(分数:2.00)A.*,则不正确的叙述是_。(分数:2.00)A.数组 a 的每个元素的初值都是 0B.数组 a 的第一维大小为 1C.数组 a 的行数为 1D.只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 05.下列二维数组初始化语句中,不正确的是_。(分数:2.00)A.int b2=1,2,3,4,5,6,7;B.int b35=0,0,0;C.int b4=1,2,3,4,5),6);D.int b32=(
3、1,2),(3,4),(5,6);6.若二维数组 a 有 m 列,则在 aij前的元素个数为_。(分数:2.00)A.j*m+iB.i*m+jC.j*m+i+1D.i*m+j+l7.有以下程序: #includestdio.h main() int aa55=1,2,3,4,5,6,1,8,5,9,10,2,1,2,5,6; int i,s=0; for(i=0;i4;i+) s+=aai2; printf(“%d“,s); 程序运行后的输出结果是_。(分数:2.00)A.26B.19C.10D.208.以下程序的输出结果是_。 #includestdio.h main() int a33=0
4、,1,2,0,1,2,0,1,2,i,j,s=1; for(i=0;i3;i+) for(j=i;j=i;j+) s+=aiajj; printf(“%d/n“,s); (分数:2.00)A.3B.4C.1D.99.如下程序的输出结果是_。 #includestdio.h main() char ch25=“1234“,“5678“,*p2; int i,j,s=0; for(i=0;i2;i+) pi=chi; for(i=0;i2;i+) for(j=0;pij“/0“;j+=2) s=pij-“0“; printf(“%d“,s); (分数:2.00)A.6357B.6135C.1357
5、D.69135710.以下程序中函数 sort()的功能是对数组 a 中的数据进行由大到小的排序。 #includestdio.h void sort(int a,int n) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) t=ai;ai=aj;aj=t; main() int a10=1,2,3,4,5,6,7,8,9,10),i; sort( for(i=0;i10;i+) printf(“%d,“,ai); 程序运行后的输出结果是_。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,
6、4,3,2,1,C.1,8,7,6,5,4,3,2,9,10,D.1,2,10,9,8,7,6,5,4,3,11.已知“int a44;”,则不能等价表示数组元素 a33的是_。(分数:2.00)A.*(a3+3)B.*(*(a+3)+3)C.*B.int a2=1,2,3,4;C.int a22=1,2,3;D.int a2=1,2),3,4;13.已有声明“int a5;”,则以下表达式中不能正确取得 a1地址的是_。(分数:2.00)A.(分数:2.00)A.p11B.p+,*(p+1)C.w22D.w1+115.下列一维数组中的声明中正确的是_。(分数:2.00)A.int a;B.i
7、nt n=10,an;C.int a10+1=0;D.int a3=1,2,3,416.若已有声明“double a23=1,2,3,4,5,6);”,则下列表达式中不能正确引用 a11值的是_。(分数:2.00)A.*(a0+4)B.*(a1+1)C.*(*(a+3)+1)D.*(*a+4)17.已知某程序中有声明“int a4,j;”及语句“for(j=0;jA.int p4;B.int*p4;C.int*p4;D.int(*p)4;18.以下程序的输出结果是_。 #includestdio.h main() int x=10,20,30,40,50,60,*p=x; *(p+4)+=6;
8、 printf(“%d,%d“,*p,*(p+4); (分数:2.00)A.10,46B.10,56C.50,46D.50,5619.下面程序的输出结果是_。 #includestdjo.b main() int x=10,20,30,40,50,*p=x; printf(“%d“,*(p+2); (分数:2.00)A.10B.20C.30D.4020.以下不能正确定义二维数组的选项是_。(分数:2.00)A.int a22=1),2;B.int a2=1,2,3,4);C.int a22=1),2,3);D.int a2=1,2),3,4);21.以下能正确定义数组并正确赋初值的语句是_。(
9、分数:2.00)A.int N=5,bNN;B.int a12=1),3;C.int c2=1,2,3,4;D.int d32=1,2),3,4;22.若有定义:int*p3;,则以下叙述中正确的是_。(分数:2.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有 3 个指针B.定义了一个指针数组 p,该数组含有 3 个元素,每个元素都是基类型为 int 型的指针C.定义了一个名为*p 的整型数组,该数组含有 3 个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组具有 3 个 int 类型元素23.设有以下定义: int a33=1,2,3,4,5,6,
10、7,8,9; int(*ptr)3=a,*p=a0; 则下列能够正确表示数组元素 a12的表达式是_。(分数:2.00)A.*(*ptr+1)2)B.*(*(p+5)C.(*ptr+1)+2D.*(*(a+1)+2)24.设已有声明“int x=1,2,3,4,5,6),*p=”,则值为 3 的表达式是_。(分数:2.00)A.*+pB.*(p+)C.+*PD.(*p)+25.下面程序的输出结果是_。 #includestdio.h main() inl a=1,3,5,7,9),y,*p= y=*p-; printf(“%d,%d“,y,*p);(分数:2.00)A.5,5B.5,4C.5,
11、3D.4,426.执行下面程序段后 m 的结果为_。 static int a23=1,2,3,4,5,6);int m,*ptr=a; m=(*ptr)*(*(ptr+2)*(*(ptr+4);(分数:2.50)A.15B.48C.24D.6027.已知函数 fun 的定义如下: void fun(int x,int y), int k; for(k=0;ky;k+) Xk+=y; 若 main 函数中有声明“int a1=10:”及调用 fun 函数的语句,则正确的 fum 函数调用形式是_。(分数:2.50)A.fun(a,a0);B.fun(a0,a0);C.fun(D.fun(a0,
12、28.动态分配一整型数据长度的空间,使指针 P 指向该存储空间,则下列空缺处应填入的正确语句是_。 int*p; P=()malloc(sizeof(int);(分数:2.50)A.intB.int*C.(*int)D.(int*)29.若有下面程序段,则正确的输出是_。 char*p=“break“,a10=“1“,“2“,“3“,“4“); printf(“%c,%c“,p2,*(a+1);(分数:2.50)A.e,2B.e,1C.r,1D.r,230.下列语句不正确的是_。(分数:2.50)A.int n,an;B.char*p;C.int*ptr;D.int*p,x=2;p=31.已知
13、“int c34;”,则对数组元素引用正确的是_。(分数:2.50)A.c14B.c1.50C.c1+00D.以上表达都错误32.若有说明“int a34;”,则 a 数组元素的非法引用是_。(分数:2.50)A.a02*1B.a13C.a4-20D.a0433.在下列叙述中,错误的是_。(分数:2.50)A.C 语言中,二维数组或多维数组是按行存放的B.赋值表达式 b12=a23是正确的C.char a1;a0=“A“与 int a1;a0=“A“等价D.数组名后的方括号内可以为常量表达式,也可以为变量34.定义结构体数组 struct stu int num; char name20; x
14、5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“); for(i=1;i5;i+) printf(“%d%c“,xi.num,xi.name2); 程序执行后的输出结果是_。(分数:2.50)A.2A3N4E50B.1H213U4EC.1A2N3E40D.1A2N3E4035.下列二维数组初始化语句中,正确且与语句 int a3=1,2,3,4,5等价的是_。(分数:2.50)A.int a2=1,2,3,4,5;B.int a3=1,2,3,4,5,0;C.int a3=1,0,2,0,3,0;D.int a2=1,2,3),4,5,6;36.设变量均
15、已正确定义,若要通过 scanf(“%d%c%d%c“,语句为变量 a1 和 a2 赋数值 10和 20,为变量 c1 和 c2 赋字符 X 和 Y。下列所示的输入形式中正确的是(注:口代表空格字符)_。(分数:2.50)A.10X20YCRB.10X20YCRC.10XCR20YCRD.10XCR200YCR37.以下语句定义正确的是_。(分数:2.50)A.int a14=1,2,3,4,5;B.float a3=1,2,2,3,3,1;C.long a23=1,1,2,1,2,3,0,0;D.double a3=8;38.若已定义: int a=0,1,2,3,4,5,6,7,8,9),
16、*p=a,i; 其中 0i9,则对 a 数组元素不正确的引用是_。(分数:2.50)A.ap-aB.*( *y=s0; m+; void main() int a=1,2,3,4,5,k; int x; printf(“/n“); for(k=0;k=4;k+) sub(a, printf(“%d,“,x); (分数:2.50)A.1,1,1,1,1,B.1,2,3,4,5,C.0,0,0,0,0,D.4,4,4,4,4,40.下面程序的输出结果是_。 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a; printf(“%d/n“,*(p+2); (分数:2.5
17、0)A.3B.4C.1D.241.以下程序运行后的输出结果是_。 #includestdjo.h void reverse(int a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; mam() int b10=10,9,8,7,6,5,4,3,2,1);int i,s=0; reverse(b,10); for(i=0;i3;i+) s+=bi; printf(“%d/n“,s); (分数:2.50)A.27B.6C.25D.3042.下述程序的输出结果是_。 #includestdio.h void main() int
18、a5=1,2,3,4,5; int*p=a,*q= printf(“%d,“,*(p+); printf(“%d“,*q);(分数:2.50)A.2,2B.1,1C.3,4D.1,243.有以下程序: #includestdio.h main() FILE*fp;int a10=1,2,3,0,0,i; fp=fopen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); f
19、close(fp); for(i=0;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:2.50)A.1,2,3,0,0,0,0,0,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,1,2,3,0,0,44.若有说明“int m34=3,9,7,8.5),(*q)4;”和赋值语句“q=m;”,则对数组元素 mij(其中0=i3,0=j4)值的正确引用为_。(分数:2.50)A.(q+i)jB.*qijC.*(*qi+j)D.*(*(q+i)+j)45.以下程序输出的结果是_。 #inc
20、ludestdio.h #includestring.h main() char a7=“ABCD“,“EFGH“,“IJKL“,“MNOP“),k; for(k=1;k3;k+) printf(“%s/n“, A B C D (分数:2.50)A.B.C.D.二级 C 语言-173 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:45,分数:100.00)1.以下不正确的定义语句是_。(分数:2.00)A.double x5=1.0,2.0,3.0,4.0,5.0);B.int y5=0,1,2,3,4,5); C.char c1=“1“,“2“,“3“,“4“,“5
21、“;D.char c2=“a“,“b“,“c“);解析:2.以下程序的输出结果为_。 #includestdio.h main() char*p=“abcdefgh“,“ijkl“,“mnop“,“qrst“,“uvwx“; int i; for(i=0;i3;i+) puts(pi); Aabcdefgh Bijkl C (分数:2.00)A.B.C. D.解析:3.若有以下定义,则正确引用数组元素的是_。 int a5,*p=a;(分数:2.00)A.*,则不正确的叙述是_。(分数:2.00)A.数组 a 的每个元素的初值都是 0B.数组 a 的第一维大小为 1C.数组 a 的行数为 1D
22、.只有元素 a00和 a01可得到初值 0,其余元素均得不到初值 0 解析:5.下列二维数组初始化语句中,不正确的是_。(分数:2.00)A.int b2=1,2,3,4,5,6,7;B.int b35=0,0,0;C.int b4=1,2,3,4,5),6);D.int b32=(1,2),(3,4),(5,6); 解析:6.若二维数组 a 有 m 列,则在 aij前的元素个数为_。(分数:2.00)A.j*m+iB.i*m+j C.j*m+i+1D.i*m+j+l解析:7.有以下程序: #includestdio.h main() int aa55=1,2,3,4,5,6,1,8,5,9,
23、10,2,1,2,5,6; int i,s=0; for(i=0;i4;i+) s+=aai2; printf(“%d“,s); 程序运行后的输出结果是_。(分数:2.00)A.26B.19 C.10D.20解析:8.以下程序的输出结果是_。 #includestdio.h main() int a33=0,1,2,0,1,2,0,1,2,i,j,s=1; for(i=0;i3;i+) for(j=i;j=i;j+) s+=aiajj; printf(“%d/n“,s); (分数:2.00)A.3B.4 C.1D.9解析:9.如下程序的输出结果是_。 #includestdio.h main(
24、) char ch25=“1234“,“5678“,*p2; int i,j,s=0; for(i=0;i2;i+) pi=chi; for(i=0;i2;i+) for(j=0;pij“/0“;j+=2) s=pij-“0“; printf(“%d“,s); (分数:2.00)A.6357B.6135C.1357 D.691357解析:10.以下程序中函数 sort()的功能是对数组 a 中的数据进行由大到小的排序。 #includestdio.h void sort(int a,int n) int i,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(a
25、iaj) t=ai;ai=aj;aj=t; main() int a10=1,2,3,4,5,6,7,8,9,10),i; sort( for(i=0;i10;i+) printf(“%d,“,ai); 程序运行后的输出结果是_。(分数:2.00)A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.1,8,7,6,5,4,3,2,9,10, D.1,2,10,9,8,7,6,5,4,3,解析:11.已知“int a44;”,则不能等价表示数组元素 a33的是_。(分数:2.00)A.*(a3+3)B.*(*(a+3)+3)C.*B.int a2=1,
26、2,3,4;C.int a22=1,2,3; D.int a2=1,2),3,4;解析:13.已有声明“int a5;”,则以下表达式中不能正确取得 a1地址的是_。(分数:2.00)A.(分数:2.00)A.p11 B.p+,*(p+1)C.w22D.w1+1解析:15.下列一维数组中的声明中正确的是_。(分数:2.00)A.int a;B.int n=10,an;C.int a10+1=0; D.int a3=1,2,3,4解析:16.若已有声明“double a23=1,2,3,4,5,6);”,则下列表达式中不能正确引用 a11值的是_。(分数:2.00)A.*(a0+4)B.*(a1
27、+1)C.*(*(a+3)+1) D.*(*a+4)解析:17.已知某程序中有声明“int a4,j;”及语句“for(j=0;jA.int p4;B.int*p4; C.int*p4;D.int(*p)4;解析:18.以下程序的输出结果是_。 #includestdio.h main() int x=10,20,30,40,50,60,*p=x; *(p+4)+=6; printf(“%d,%d“,*p,*(p+4); (分数:2.00)A.10,46B.10,56 C.50,46D.50,56解析:19.下面程序的输出结果是_。 #includestdjo.b main() int x=1
28、0,20,30,40,50,*p=x; printf(“%d“,*(p+2); (分数:2.00)A.10B.20C.30 D.40解析:20.以下不能正确定义二维数组的选项是_。(分数:2.00)A.int a22=1),2;B.int a2=1,2,3,4);C.int a22=1),2,3);D.int a2=1,2),3,4); 解析:21.以下能正确定义数组并正确赋初值的语句是_。(分数:2.00)A.int N=5,bNN;B.int a12=1),3;C.int c2=1,2,3,4;D.int d32=1,2),3,4; 解析:22.若有定义:int*p3;,则以下叙述中正确的
29、是_。(分数:2.00)A.定义了一个基类型为 int 的指针变量 p,该变量具有 3 个指针B.定义了一个指针数组 p,该数组含有 3 个元素,每个元素都是基类型为 int 型的指针 C.定义了一个名为*p 的整型数组,该数组含有 3 个 int 类型元素D.定义了一个可指向一维数组的指针变量 p,所指一维数组具有 3 个 int 类型元素解析:23.设有以下定义: int a33=1,2,3,4,5,6,7,8,9; int(*ptr)3=a,*p=a0; 则下列能够正确表示数组元素 a12的表达式是_。(分数:2.00)A.*(*ptr+1)2)B.*(*(p+5)C.(*ptr+1)+
30、2D.*(*(a+1)+2) 解析:24.设已有声明“int x=1,2,3,4,5,6),*p=”,则值为 3 的表达式是_。(分数:2.00)A.*+pB.*(p+) C.+*PD.(*p)+解析:25.下面程序的输出结果是_。 #includestdio.h main() inl a=1,3,5,7,9),y,*p= y=*p-; printf(“%d,%d“,y,*p);(分数:2.00)A.5,5B.5,4C.5,3 D.4,4解析:26.执行下面程序段后 m 的结果为_。 static int a23=1,2,3,4,5,6);int m,*ptr=a; m=(*ptr)*(*(p
31、tr+2)*(*(ptr+4);(分数:2.50)A.15 B.48C.24D.60解析:27.已知函数 fun 的定义如下: void fun(int x,int y), int k; for(k=0;ky;k+) Xk+=y; 若 main 函数中有声明“int a1=10:”及调用 fun 函数的语句,则正确的 fum 函数调用形式是_。(分数:2.50)A.fun(a,a0);B.fun(a0,a0);C.fun( D.fun(a0,解析:28.动态分配一整型数据长度的空间,使指针 P 指向该存储空间,则下列空缺处应填入的正确语句是_。 int*p; P=()malloc(sizeof
32、(int);(分数:2.50)A.intB.int*C.(*int)D.(int*) 解析:29.若有下面程序段,则正确的输出是_。 char*p=“break“,a10=“1“,“2“,“3“,“4“); printf(“%c,%c“,p2,*(a+1);(分数:2.50)A.e,2 B.e,1C.r,1D.r,2解析:30.下列语句不正确的是_。(分数:2.50)A.int n,an; B.char*p;C.int*ptr;D.int*p,x=2;p=解析:31.已知“int c34;”,则对数组元素引用正确的是_。(分数:2.50)A.c14B.c1.50C.c1+00 D.以上表达都错
33、误解析:32.若有说明“int a34;”,则 a 数组元素的非法引用是_。(分数:2.50)A.a02*1B.a13C.a4-20D.a04 解析:33.在下列叙述中,错误的是_。(分数:2.50)A.C 语言中,二维数组或多维数组是按行存放的B.赋值表达式 b12=a23是正确的C.char a1;a0=“A“与 int a1;a0=“A“等价D.数组名后的方括号内可以为常量表达式,也可以为变量 解析:34.定义结构体数组 struct stu int num; char name20; x5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“); for
34、(i=1;i5;i+) printf(“%d%c“,xi.num,xi.name2); 程序执行后的输出结果是_。(分数:2.50)A.2A3N4E50 B.1H213U4EC.1A2N3E40D.1A2N3E40解析:35.下列二维数组初始化语句中,正确且与语句 int a3=1,2,3,4,5等价的是_。(分数:2.50)A.int a2=1,2,3,4,5;B.int a3=1,2,3,4,5,0; C.int a3=1,0,2,0,3,0;D.int a2=1,2,3),4,5,6;解析:36.设变量均已正确定义,若要通过 scanf(“%d%c%d%c“,语句为变量 a1 和 a2
35、赋数值 10和 20,为变量 c1 和 c2 赋字符 X 和 Y。下列所示的输入形式中正确的是(注:口代表空格字符)_。(分数:2.50)A.10X20YCR B.10X20YCRC.10XCR20YCRD.10XCR200YCR解析:37.以下语句定义正确的是_。(分数:2.50)A.int a14=1,2,3,4,5;B.float a3=1,2,2,3,3,1;C.long a23=1,1,2,1,2,3,0,0;D.double a3=8; 解析:38.若已定义: int a=0,1,2,3,4,5,6,7,8,9),*p=a,i; 其中 0i9,则对 a 数组元素不正确的引用是_。(
36、分数:2.50)A.ap-aB.*( *y=s0; m+; void main() int a=1,2,3,4,5,k; int x; printf(“/n“); for(k=0;k=4;k+) sub(a, printf(“%d,“,x); (分数:2.50)A.1,1,1,1,1, B.1,2,3,4,5,C.0,0,0,0,0,D.4,4,4,4,4,解析:40.下面程序的输出结果是_。 main() int a10=1,2,3,4,5,6,7,8,9,10,*p=a; printf(“%d/n“,*(p+2); (分数:2.50)A.3 B.4C.1D.2解析:41.以下程序运行后的输
37、出结果是_。 #includestdjo.h void reverse(int a,int n) int i,t; for(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; mam() int b10=10,9,8,7,6,5,4,3,2,1);int i,s=0; reverse(b,10); for(i=0;i3;i+) s+=bi; printf(“%d/n“,s); (分数:2.50)A.27B.6 C.25D.30解析:42.下述程序的输出结果是_。 #includestdio.h void main() int a5=1,2,3,4,5; int*p=a,
38、*q= printf(“%d,“,*(p+); printf(“%d“,*q);(分数:2.50)A.2,2B.1,1C.3,4D.1,2 解析:43.有以下程序: #includestdio.h main() FILE*fp;int a10=1,2,3,0,0,i; fp=fopen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“); fread(a,sizeof(int),10,fp); fclose(fp); for(i=0
39、;i10;i+) printf(“%d,“,ai); 程序的运行结果是_。(分数:2.50)A.1,2,3,0,0,0,0,0,0,0,B.1,2,3,1,2,3,0,0,0,0,C.123,0,0,0,0,123,0,0,0,0,D.1,2,3,0,0,1,2,3,0,0, 解析:44.若有说明“int m34=3,9,7,8.5),(*q)4;”和赋值语句“q=m;”,则对数组元素 mij(其中0=i3,0=j4)值的正确引用为_。(分数:2.50)A.(q+i)jB.*qijC.*(*qi+j)D.*(*(q+i)+j) 解析:45.以下程序输出的结果是_。 #includestdio.h #includestring.h main() char a7=“ABCD“,“EFGH“,“IJKL“,“MNOP“),k; for(k=1;k3;k+) printf(“%s/n“, A B C D (分数:2.50)A.B.C.D. 解析: