南京某大学高级语言程序设计期末考试复习题_第1页
南京某大学高级语言程序设计期末考试复习题_第2页
南京某大学高级语言程序设计期末考试复习题_第3页
南京某大学高级语言程序设计期末考试复习题_第4页
南京某大学高级语言程序设计期末考试复习题_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高级语言程序设计期末考试

单选题

1,若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()

A.函数的实参和其对应的形参共占同一存储单元

B.形参只是形式上的存在,不占用具体存储单元

C.同名的实参和形参占同一存储单元

D.函数的形参和实参分别占用不同的存储单元

答案:D

解析:本题考查函数调用中有关实参和形参的概念。函数调用时的实参变量和形参变量分别占

用不同的存储单元,即使实参变量和形参变量的名相同,它们也分别占用不同的存储单元。形

参在所在函数被调用时分配存储单元,在调用结束后释放存储单元。综上所述,选项D叙述

正确。

2.下列语句定义p为指向float类型变量d的指针,其中哪一个是正确的()

A.floatd,*p=d;

B.floatd,*p=&d;

C.floatd,p=d;

D.float*p=&d,d;

答案:B

3.执行语句"k=5"3;"后,变量k的当前值是()

A.7

B.5

C.6

D.4

答案:C

4.以"只读”方式打开下列文本文件,下列语句中哪一个是正确的()

a:\aa.dat;"

A.fp=fbpen(/,a:\\aa.dat"、"ab");

B.fp=fbpen(wa:\aa.dat",zza,f);

C.q)=fopen(〃a:\aa.dat"、〃\vb〃);

D.f!)=fopen("a:\\aa.dat"、'T"):

A.A

B.B

C.C

D.D

答案:D

使用方式:r:只读,w:只写,+:读写,

b:二进制,a:追加。

路径出现在字符串中,按C语言的规定,

解析:其中的符号需要写成转义字符飞

5.有以下程序,以下叙述中正确的是()

#include<string.h>

mainO

{charp[]=('a','b','c'),q[10]=('a','b','c');

printf("%d%d\n",strlen(p),strlen(q));

)

A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3

B.由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3

C.由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3

D.由于p和q数组中都没有字符串结束符,故长度都不能确定

答案:B

解析:

0120123456789

Pabcqabc\0\0\0\0\0\0\0

此题考查的是字符数组赋初值。数组p和数组q初始化后的状态如图所示。数组长度在未指

定的情况下由初始化列表项中数据的个数决定,所以数组p时长度为3。由于数组p中没有字

符串结束符,所以strlen(p)的值不确定。定义的数组的同时对其进行部分初始化,没有初始化

的元素系统会自动初始化为0,0等价于字符串结束符,所以q数组中字符串长度为3。可见

选项B的叙述是正确的。

6.设inta=0,b=5;执行表达式++a||++b,a+b后,a,b和表达式的值分别是()

A.1,5,7

B.1,6,7

C.1,5,6

D.0,5,7

答案:C

7.错误的转义字符是()

A.f\09r

B.r\V

C.f\0r

D「\"

A.A

B.B

C.C

D.D

答案:A

转义字符由“反斜杠字符开始后跟单个字符

或若干个字符组成。其中,\ddd表示1〜3位

8进制数ddd对应的符号,\xhh表示1〜2位16

进制数hh对应的符号。8进制数中不能有9,

解析:所以选项A'O9r错误。

8.以下能正确定义一维数组的选项是()

A)intnum[];B)#defineN100

intnuni[N]:

C)intnuin[0..100];D)intN=100;

intnuin[N];

A.A

B.B

C.C

D.D

答案:B

解析:本题考核的知识点是一维数组的定义。选项A定义数组时省略了长度,而C语言中规

定,只有在定义并同时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成

员个数,故选项A错误;在C语言中规定,数组的长度必须是一个整数或整型常量,不能是

变量表达式,故选项C和选项D不正确。选项B中的N是一个符号常量,可以作为数组的长

度。所以,4个选项中选项B符合题意。

9,设struct{inta;charb;}Q,*p=&Q;错误的表达式是()

A.Q.aB.(*p).b

C.p->aD.*p.b

A.A

B.B

C.C

D.D

答案:D

10.设有以下说明语句typedefstruct{intn;charch[8];}PER;则下面叙述中

正确的是()

A.PER是结构体变量名

B.PER是结构体类型名

C.typedefstruct是结构体类型

D.struct是结构体类型名

答案:B

11.设变量已正确定义并赋值,以下正确的表达式是()

A)x=y*5=x+zB)int(15.80b5)

C)x=y+z+5'++yD)^25%5.0

A.A

B.B

D.D

答案:C

解析:C语言中,可以将一个表达式的值赋给一个变量,不能将一个表达式的值赋给一个表达

式或常量。选项A,将表达式x+z的值赋给表达式y*5,显然是一个非法的表达式。进行取余

(%)运算的两个数必须是整数,选项B和D都是非法的表达式。选项C是一个合法的逗号表

达式。

12.有以下程序,程序执行后的输出结果是()

#include"stdio.h"

mainQ

(FILE*fp,inti;

charch[]-?abcd,,,t;

fy=fopenCabc.da*”wb+”);

for(i=0;i<4;i++)fwrite(&ch[i],l,l,fy);

fseek(fp,-2L,SEEK_END);

fread(&t,l,l,fy);

fclose(fp);

print

}

A.d

B.c

C.b

D.a

答案:B

解析:执行for(i=0;i<4;i++)fwrite(&ch[i],Ll,fp);,循环变量i从0递增到3,在循环体中每次写

入ch[i]的值,循环结束时,文件中的内容应该为:abed。执行语句fseek(fp,.2L,SEEK_END);的作

用是将读写指针从文件末尾处向后前移动2个字节,指向字符执行fread(&t,l,l,fp);的作用

是从文件中读取1个字符到变量t中,变量t得到的是字符P。所以最终输出应该为:C。故

本题选B»

13.有以下程序#include"stdio.h"voidWriteStr(char*fn,char*str){FILE*fp;fp=fopen(fn,"w");

fputs(str,fp);fclose(fp);}main(){WriteStr("tl.dat","start");WriteStr("tl.dat","end");}程序运行后,

文件tl.dat中的内容是()

A.start

B.end

C.startend

D.endrt

答案:B

解析:语句fp=fopen(fn,"w");的作用是以"w"方式打开文件fn,如果文件不存在,则新建一个

文件,否则将删除文件原有的内容。语句fputs(str,fp);参数str中的内容写入文件。在主函数中

两次调用WriteStr函数,由于写入的是同一个文件tl.dat,故只有最后一次写入有效。所以,

应该选择B。

14.设inta⑶⑵;能正确表示a数组元素地址的是()

A,a[l]

B.a[3]

C.*a[2]

D.&a[3][2]

答案:A

15.设有定义:intk=0;,以下选项的四个表达式中与其他三个表达式的值不相同的是()

A)k++B)k+=l

C)++kD)k+1

A.A

B.B

C.C

D.D

答案:A

解析:本题考查的是自增运算。前缀自增运算时,表达式的值和变量自增之后的值相同;后缀

自增运算时,表达式的值为变量自增之前的值。选项A,k++是先取k的值作为表达式的值,

然后k的值再加1,所以该表达式的值是0,k的值是1。选项B,k+=l等价于k=k+l,表达式

和k的值均为1。选项C,++k是先将k的值再加1,再取k的值作为表达式的值,所以该表

达式和k的值是都1。选项D,k+1,该表达式为1,k的值不变,还是0。综上所述,正确答

案为Ao

16.C语句"x=y+++2;"相当于()

A.x=y+2;y=y+1;B.y=y+1;x=y+2;

C.x=歼2;++2;D.x=y;y=y+2;

A.A

B.B

C.C

D.D

答案:A

17.有以下程序,程序运行时,从键盘输入:01<回车〉,程序执行后的输出结果是()

main()

{chark;inti;

for(i=l;i<3;i++)

{scanf("%c”,&k);

switch(k)

(case'CTprintf("another\n");

caseT':printf("number\n");

A)anotherB)anotherC)anotherD)number

numbernumbernumbernumber

anothernumber

答案:C

18.设有以下说明语句typedefstructstudent{intn;charname[10];char

sex;}STU;则下面定义结构体变量a正确的是()

A.STUa;B.typedefstructstudenta;

C.typedefSTUa;D・studenta;

A.A

B.B

C.C

D.D

答案:A

19.以〃只写〃方式打开以下文本文件,下列语句中哪一个是正确的()

a:\aa.dat,

A.3=fopen(〃a:\\aa.dat〃,〃ab‘);

B.S=fopen(〃a:\aa.dat”,〃w');

C.m=foptn(〃a:\\aa.dat〃」w〃);

D.m=fopcn(〃a:\\aa.dat〃,T);

A.A

B.B

C.C

D.D

答案:C

20.有以下程序,程序运行后的输出结果是()

main。

(intk=4,n=0;

for(;n<k;)

(n++;

if(n%3!=0)continue;

k-;)

printf("%d,%d\nH,k,n);

)

A)1,1B)2,2

C)3,3D)4,4

A.A

B.B

C.C

D.D

答案:C

解析:

循环前k循环前

n<k循环次数nn°o3;=0continuek

的值n的值

40真第一次1真执行4

41真第二次7真执行4

47真第三次3假不执行3

33假结束

本题考核的知识点是for语句和continue语句的综合应用。在本程序的for循环中,用到了一

个continue语句,continue语句的作用是停止本次循环,即不执行循环体内continue语句后

面的其他语句,继续下次循环的条件判断。题中程序循环的执行过程如表示。循环结束时

printf语句输出k和n的值为3,3。可见选项C符合题意。

21.下列各语句定义了数组,其中一个不正确的是()

A.staticinta[5],b[2][3];

B.charno[30],rec[30,6];

C.intx口={2,4,6,8,10};

D.intx[10]={1,2,3,4,5};

答案:B

22.设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是()

A.auto

B.register

C.static

D.auto或register

答案:c

23.变量的指针含意是指变量的()

A.值

B.地址

C.存储

D.名字

答案:B

24.以下叙述中正确的是()

A.C语言程序将从源程序中第一个函数开始执行

B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C.C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束

D.main可作为用户标识符,用以命名任意一个函数作为主函数

答案:C

解析:本题考查的是C语言的特点。C程序是由若干个函数构成的。每个C程序有且仅有一个

主函数,该主函数的函数名规定为main。C程序的执行总是从主函数开始,并在主函数中结

束。主函数和其它函数的位置是任意的。其它函数总是通过函数调用语句被执行。综上所述,

选项C为正确答案。

25.若变量均己正确定义并赋值,以下合法的C语言赋值语句是()

A)x=y=5:

B)x=ii0o2.5;

C)x+n=i;

D)x=5=l+l;

A.A

B.B

C.C

D.D

答案:A

解析:本题考查的是赋值语句。在C语言的赋值表达式中,赋值对象必须是一个变量,不能

是常量或表达式。选项A中,将y==5的逻辑值(1或0)赋给变量X,是合法C语言赋值语句。

选项B,进行取余(%)运算的两个数必须是整数,x=n%2.5;是非法的C语句。选项C,将变

量i的值赋给表达式x+n显然是一个非法的C语言赋值语句;选项D,将4+1的值赋给常量5

也是一个非法的C语言赋值语句。故本题正确答案为A。

26.设函数定义如下:floatfl(floata,floatb){return(a+b);}若有floatx=l.l,y=2.2;,则以下语

句中正确的函数调用是()

A)pnntf("oof"、fl(x));

B)pnntf(z,oof\fl(<fcx,y));

C)nntf(/,oof\fl(*x,*y));

D)pnntf(//0of;fl(x,y));

A.A

B.B

C.C

D.D

答案:D

解析:在函数调用时,实参和形参的数据类型要一致,参数的个数要相等。选项A中fl(x)实

参比形参的数目少1个;选项B中仕(&x,y)实参和形参类型不一致;选项C中fl(*x,*y),对X、

y进行*运算是错误的。

27.以下能正确定义二维数组的是()

A)nita[][3]:

B)inta[][3]={2*3};

C)inta[][3]={};

D)inta[2][3]={{l},{2},{3,4});

A.A

B.B

C.C

D.D

答案:B

解析:本题考核的知识点是二维数组的定义和初始化。选项A和选项C在没有初始化的情况

下省略了第一维的长度,是非法的,故选项A和选项C错误;选项D中定义了一个2行3列

的数组,而在初始化的时候却赋了3行的值,显然不正确,故选项D错误;选项B初始化时,

只赋了一个值2*3的结果6,省略的第一维的长度为1,故选项B是正确的。

28.设intx,y;,下列语句正确的是

A.5=x;

B.x=y-;

C.(x+y)++;

D.x+y=100;

答案:B

29.有以下程序,执行后输出结果是()

main()

{char*p[10]={“abc”,"aabdfgTdcdbe”,“abbd",“cd”};

printfC%d\n,,,strlen(p[4]));

)

A.2

B.3

C.4

D.5

答案:A

解析:此题考查的是指针数组和strlen()函数的应用。此题中首先定义了一个长度为10的指针

数组,并对前五个元素进行了初始化,其中p⑷存放的是字符串"cd"的首地址。因此执行

strlen(p[4])后的返回值为字符串"cd"的长度为2。所以,执行程序后输出结果是2。

30.sizeof(double)是()

A.函数调用

B.int型表达式

C.double型表达式

D.非法表达式

答案:B

解析:sizeof(double)函数返回的是括号中数据类型的数据在内存中所占用的字节数,为整型数

据。所以sizeof(double)是int型表达式。

31.设加向]={58。},也={以四,9};则附数组的长度分别是()

A.4,3

B.3,3

C.3,4

D.4,4

答案:A

32.以"W”方式打开文本文件a:\aa.dat,若该文件已存在,则()。

A.新写入数据被追加到文件末尾

B.文件被清空,从文件头开始存放新写入数据

C.显示出错信息

D.新写入数据被插入到文件首部

答案:B

33.若定义函数:fun(inta,floatb){returna+b;}则该函数的数据类型是()

A.int

B.void

C.float

D.不确定

答案:A

解析:用return语句返回函数值时,若函数类型与return语句中表达式值的类型不一致,按

前者为准,自动转换。题中函数返回值类型省略,应为整型,return语句计算完a+b后,将结

果的数据类型转换为整型后返回。

34.以下叙述中错误的是()

A.用户定义的函数中可以没有return语句

B.用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值

C.用户定义的函数中若没有return语句,则应当定义函数为void类型

D.函数的return语句中可以没有表达式

答案:B

解析:用户定义的函数中可以没有return语句,这时应当定义函数为void类型,程序执行到

函数的最后一个}时,自动返回调用函数,没有确定的函数值。函数中可有多个return语句,

但每调用一次该函数,只能执行到一个return语句,返回一个函数值。return语句中可以不含

表达式,这时必须定义函数为void类型,它的作用只是使流程返回到调用函数,并没有确定

的函数值。另外,若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转

换一一函数调用转换。

35.设inti,j=2,*p=&i;,能将j的值赋给i的正确语句是

A.i=*p;

B.*p=j;

C.i=&j;

D.*i=*p;

答案:B

36.有以下程序,程序的运行结果是()

痴elude<stdio.h>

main()

(FILE*fp;inta[10]=(l,2,3),i,n;

§)=fopen;

for(i=0;i<3;i++)

fpnntf(fp,"%dM,a[i]);

fynntf(fp/W);

fclose(S);

fy=fopen(*'dl.daf/T');

fscanf(;

fclose(母i);

printf;

)

A.12300

B.123

C.1

D.321

答案:B

解析:for(i=0;i<3;i++)fprintf(fp,w%dw,a[i]);的功能是将a[0}、a[l],a⑵的值1、2、3写到

fp所指的文件dl.dat中。fscanf(fp,"%d",&n);的功能是将fp所指的文件dl.dat中的1、2、3

按照%d的格式输出,所以输出的结果为:123。

37.有以下程序,若要使程序的输出值为2,则应该从键盘给n输入的值是()

main()

(ints=0,a=l,n;

scanf("%d",&n);

do

{s+=l;a=a-2;)

while(a!=n);

printf("%d\n",s);

)

A.0

B.-l

C.-3

D.-5

答案:C

解析:本题考核的知识点是do—while循环的使用。根据题目要求,最后要使输出的s值为2,

在程序中改变s的值语句只有循环体中的s+=l;语句,而初始s的值为0,显然要使s的值变

为2,该语句必须执行两次,而do-while的特点是先执行循环体语句,然后再判断while循环

条件。所以只需要while后面括号的循环判断表达式的值为真成立一次且只能为真一次,将四

个选项中的内容依次代入该程序中不难得到只有n=-3刚好使循环判断条件a!=n为真一次。

故4个选项中选项C符合题意。

38.下列语句错误的是

A.inta[]={l,2};

B.char*a[3];

C.intn=5,a[n];

D.chars[10]={"test"};

答案:C

39.表达式!x||a==b等效于()。

A.!((x||a)==b)

B.!(x||a)==b

C.!(x||(a==b))

D.(!x)11(a==b)

答案:D

40.以下定义语句中正确的是()

A)inta=b=0;B)charA=65+1,b-b*;

C)floata=l,*b=&a,*c=&b;D)doublea=O.O;b=l,l;

A.A

B.B

C.C

D.D

答案:B

高级语言程序设计期末考试

单选题

1.有以下程序,以下叙述中正确的是()

#include<string.h>

mainO

{charp[]=('a','b','c'),q[10]=('a','b','c');

printf("%d%d\n",strlen(p),strlen(q));

)

A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3

B.由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3

C.由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3

D.由于p和q数组中都没有字符串结束符,故长度都不能确定

答案:B

解析:

0120123456789

abcabc\0\0\0\0\0\0

此题考查的是字符数组赋初值。数组p和数组q初始化后的状态如图所示。数组长度在未指

定的情况下由初始化列表项中数据的个数决定,所以数组p时长度为3。由于数组p中没有字

符串结束符,所以strlen(p)的值不确定。定义的数组的同时对其进行部分初始化,没有初始化

的元素系统会自动初始化为0,0等价于字符串结束符,所以q数组中字符串长度为3。可见

选项B的叙述是正确的。

2.已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为

大写字母的表达式是()

A)kk>=,A,&&kk<=,Z,

B)!(kk>=*AIIkk〈='Z')

C)(kk+32)>=*a'&«&(kk+32)<=*z'

D)isalpha(kk)&&(kk<91)

A.A

B.B

C.C

D.D

答案:B

3.下列数组定义错误的是

A.inta[2][3];

B.intc[2][3]={0};

C.intb[][3]={0z17,3);

D.intd[3][卜{{1,2},{1,2,3},{1,2,3,4}};

答案:D

4.设intk;,则语句for(k=0;k=l;k++);和语句for(k=0;k==l;k++);执行的次数分别是()

A.无限和0

B.0和无限

C.都是无限

D.都是0

答案:A

5.有定义语句:chars[10];,若要从终端给s输入5个字符,错误的输入语句是()

A)gets(&s[0]);

B)scanf(M%sw,s+l);

C)gets(s);

D)scanf("%s”,s[l]);

A.A

B.B

C.C

D.D

答案:D

6,表达式strlen("hello")的值是()。

A.4

B.5

C.6

D.7

答案:B

7.有以下程序#includemain(){FILE*fp;inti,a[6]={l,2,3,4,5,6};

fp=fopen(〃d3.dat",〃wb+〃);fwrite(a,sizeof(int),6,fp);fseek(fp,sizeof(int)*3,SEEK_SET);/*i^

语句使读文件的位置指针从文件头向后移动3个int型数据*/fread(a,sizeof(int),3,fp);

fclose(fp);for(i=0;i<6;i++)printf("%d,〃,a[i]);}程序运行后的输出结果是()

A.4,5,645,6,

B.1,2,3,4,5,6,

C.4,5,6,1,2,3,

D.6,5,432,1,

答案:A

解析:执行语句fwrite(a,sizeof(int),6,fp);的作用是将数组a中的6个元素写入到fp所指文件

d3.dat中,使文件d3.dat中的数据变为123456«执行语句fseek(fp,sizeof(int)*3,SEEK_SET);将文

件的位置指针指向d3.dat中的数据4所在的位置。执行语句fread(a,sizeof(int),3,fp);的作用是

将fp所指文件位置指针的当前位置开始的3个整型数(4,5,6)存到数组a(代表数组首地

址)的前三个元素中,这样数组a中6个元素的值分别为4,5,6,4,5,6,最后程序的输出结果为

4,5,6,4,5,6,。所以,本题选择A。

8.完成C源文件编辑后、到生成执行文件,C语言处理系统必须执行的步骤依次为()

A.连接、编译

B.编译、连接

C.连接、运行

D.运行

答案:B

9.设inta[5][5],*b[5],(*c)[5]=a;则被分别称为是()

A.数组、数组指针、指针数组

B.数组、指针数组、指针函数

C.数组、数组指针、函数指针

D.数组、指针数组、数组指针

答案:A

10.若变量已正确定义,有以下程序段,其输出结果是()

inta=3,b=5,c=7;

if(a>b)a=b;c=a;

if(c!=a)c=b;

printf0%d,%d,%d\n”,abc);

A.程序段有语法错

B.3,5,3

C.3,5,5

D.3,5,7

答案:B

11.表达式strlen(〃hello〃)的值是()

A.4

B.5

C.6

D.7

答案:B

12.设函数中有整型变量n,为保证其在未赋值的情况下初值为0,应选择的存储类别是()

A.auto

B.register

C.static

D.auto或register

答案:C

13.执行语句〃k=14八15;〃后,变量k的当前值是()o

A.1

B.8

C.7

D.2

答案:A

有以下程序

14.#include"stdio.h"main(){FILE*fp;inta[10]={l/2/3,0/0}J;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;i<10;i++)printf("%d",a);}程序的运行结果是()

A.1,23,0,0,0,0,0,0,0,

B.1,23,1,2,3,0,0,0,0,

C.123,0,0,0,0,123,0,0,0,0,

D.1,23。01,230。

答案:D

解析:语句fwrite(a,sizeof(int),5,fp);的作用是将数组a的前5个整数元素写入fp所指的文件中,

程序连续执行了两次该语句后,fp所指文件d2.dat中的内容为1230012300。接着程序关闭了

fp所指文件,又重新以只读方式打开使得文件的位置指针指向文件的开头。执行语句

fread(a,sizeof(int),10,fp);的作用是将fp所指文件中的10个整数存入到数组a首地址开始的内存

中,这样数组a的10个元素为{1,2,3,0,0,1,2,3,0,0}。所以程序的运行结果为1,2,3,0,0,1,2,3,0,0,。

故本题选择Do

15.若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是()

A.EOF

B.—1

C.非零值

D.NULL

答案:C

16.有以下程序,程序运行后的输出结果是()

fun(inta,intb)

{if(a>b)return(a);

elsereturn(b);

)

main。

(intx=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);

printf("%d\n",r);

)

A.3

B.6

C.8

D.12

答案:D

解析:本题考查的是函数的返回值作为函数实参的应用。fun(inta,intb)的功能是返回a和b

中两个数中较大的数。语句r=fun(fun(x,y),2*z);中fun(x,y)函数的返回值和2*z作为fun()函数

的两个参数。在内层fun(x,y)即fun(3,8)函数中,返回值为8。此时,外层fun(x,y)函数

两个参数为8和2*z=12,所以r=fun(fun(x,y),2*z);相当于r=fun(8,12),而fun(8,12)返回值为

12,因此最后r的值为12。所以,4个选项中选项D符合题意。

17.设有定义:intk=O;,以下选项的四个表达式中与其他三个表达式的值不相同的是()

A)k++B)k+=l

C)++kD)k+1

A.A

B.B

C.C

D.D

答案:A

解析:本题考查的是自增运算。前缀自增运算时,表达式的值和变量自增之后的值相同;后缀

自增运算时,表达式的值为变量自增之前的值。选项A,k++是先取k的值作为表达式的值,

然后k的值再加1,所以该表达式的值是0,k的值是1„选项B,k+=l等价于k=k+l,表达式

和k的值均为1。选项C,++k是先将k的值再加1,再取k的值作为表达式的值,所以该表

达式和k的值是都1。选项D,k+1,该表达式为1,k的值不变,还是0。综上所述,正确答

案为Ao

18.设inti,j=2,*p=&i;,能将j的值赋给i的正确语句是

A.i=*p;

B.*p=j;

C.i=&j;

D.*i=*p;

答案:B

19.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是

11110000c若要求将a的高4位取反,低4位不变,所要执行的运算是()

A)aAbB)a|b

C)a&bD)a<<4

A.A

B.B

C.C

D.D

答案:A

20.若有定义:floatx=1.5;inta=l,b=3,c=2;,则正确的switch语句是()

A)switcli(x)B)switch((int)x):

{case1.0:piintf(“料n");{case1plintf("*\n");

case2.0:piintf("**\n");}case2:pnntf(u**\nw);}

C)switch(a+b)D)switcli(a+b)

{case1:printf("*\n");{case1:piintf(u*\nw);

case2+1:pnntf(u**\nw);}casec:printf();}

A.A

B.B

C.C

D.D

答案:C

解析:本题考查的是switch语句。switch后的括号中只能是整型或字符型表达式,选项A中

使用的是实型变量x,故不正确。选项B在switch的括号后面多了一个分号,故也不正确。

switch的case标号后只能是常量或常量表达式,而不能是变量,所以选项D也不正确。故应

该选择C。

21.以下叙述中错误的是()

A.C语言中对二进制文件的访问速度比文本文件快

B.C语言中,随机文件以二进制代码形式存储数据

C.语句FILEfp定义了一个名为fp的文件指针

D.C语言中的文本文件以ASCII码形式存储数据

答案:c

解析:C语言中,文本文件当输出时,数据转换成一串字符,每个字符以字符的ASCII码值存

储到文件中,一个字符占一个字节。当输入时,又把指定的一串字符按类型转换成数据,并存

入内存;二进制文件的数据不经过任何转换、按计算机内的存储形式直接存放到磁盘上。所以

C语言中对二进制文件的访问速度比文本文件快。可见选项A和D叙述是正确的。C语言中,

随机文件以二进制代码形式存储数据。定义文件类型指针变量的一般形式为:FILE*指针变量

名;因此选项C叙述是错误的。综上,应该选择C。

22.设struct{inta;charb;}Q,*p=&Q;错误的表达式是()

A.Q.a

B.(*p).b

C.p->a

D.*p.b

答案:D

23.以下能正确定义字符串的语句是()

A)charstr[]={<\064,};

B)charstr=''\x43”:

C)char*':

D)charstr|J-

A.A

B.B

C.C

D.D

答案:D

解析:

此题考查的是字符串的概念。

在C语言中,字符串是由一个字符指针或字符数组名所指向的地址开始的。

以ASCH码为0的字符结束的一段连续的内存中所存储的内容。

所以正确定义一个字符串,其实就是定义一个字符指针或字符数组。

同时分配一定内容给它,并且在内容的最后插入一个,©字符

(也可以不分配内容,只插入一个字符来表示一个空字符串)。

选项B和C均为字符的定义,故可排除;

选项A虽然是定义并初始化了一个字符数组,但没有插入'0,字符,故不正确;

选项D虽然只用“\0”初始化了一个字符数组,但它所表示的是一个合法的空字符串。

故应该选择D。

24.设inta=3;,执行语句printf("%d\n",a+(a-=a*a));后输出结果是

A.-12

B.-6

C.0

D.12

答案:A

25执行语句"for(s=0,i=l;i<=10;i=i+3)s+=广后,变量s、i的当前值是()

A.22,13

B.12,10

C.22,10

D.12,13

答案:C

26.有以下程序,程序执行后的输出结果是()

#include"stdio.h"

mainO

(FILE*fp;inti;

charch[]mabcd”,t;

用=fopen("abc.daf'wb+”);

for(i=0;i<4;i++)fwrite(&ch[i],l,l,用);

fseek(fp,-2L,SEEK_END);

fread(&t,l,l,fy);

fclose(fp);

printfC%c\n,,,t);

}

A.d

B.c

C.b

D.a

答案:B

解析:执行for(i=0;i<4;i++)fwrite(&ch[i],l,l,fp);,循环变量i从0递增到3,在循环体中每次写

入ch[i]的值,循环结束时,文件中的内容应该为:abed。执行语句fseek(fp,-2L,SEEK_END);的作

用是将读写指针从文件末尾处向后前移动2个字节,指向字符执行fread(&t,l,l,fp);的作用

是从文件中读取1个字符到变量t中,变量t得到的是字符所以最终输出应该为:c。故

本题选Bo

27.有以下程序,程序运行后的输出结果是()

#include<stdio.h>

#include<string.h>

StructA

(mta;charb[10];doublec;};

StructAf(structAt);

main。

(structAa={100l,"ZhangDa",1098.0);

a=f(a);printf("%d,%s,%6,1f\n",a.a,a,b,a,C);

)

structAf(structAt)

{t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;returnt;)

A.1001,ZhangDa,1098.0

B.1002,ZhangDa,1202.0

C.1001,ChangRong,1098.0

D.1002,ChangRong,1202.0

答案:D

解析:执行语句a=f(a);先将函数中变量a的值传给函数f中为结构体变量t,后变量t又被

重新赋值并将t的值返回到主函数赋给变量a,所以程序运行后的输出结果是

1002,ChangRong,1202.0o

28.在嵌套使用if语句时,C语言规定else总是()

A.和之前与其具有相同缩进位置的if配对

B.和之前与其最近的if配对

C.和之前与其最近的且不带else的if配对

D.和之前的第一个if配对

答案:C

解析:本题考查的是if语句的嵌套。在嵌套的if语句中,else总是与它上面最近的且不带else

的if配对。因此本题的正确答案为选项C。

29.某文件中定义的静态全局变量(或称静态外部变量),其作用域是()

A.只限某个函数

B.本文件

C.跨文件

D.不限制作用域

答案:C

30.若定义函数:fun(inta,floatb){returna+b;}则该函数的数据类型是()

A.int

B.void

C.float

D.不确定

答案:A

解析:用return语句返回函数值时,若函数类型与return语句中表达式值的类型不一致,按

前者为准,自动转换。题中函数返回值类型省略,应为整型,return语句计算完a+b后,将结

果的数据类型转换为整型后返回。

31.C语句〃x*=y+2;〃还可以写作()

A.x=x*y+2;

B.x=2+y*x;

C.x=x*(y+2);

D.x=y+2*x;

答案:C

32.设intx=10,y=3;,执行语句printed,%d\n",-y);后输出结果是

A.9,2

B.9,3

C.10,2

D.10,3

答案:C

33,有以下程序,程序运行后的输出结果是()

main。

(charp[]=('a',•b','c'),q[]=,,abc";

printf("%d%d\n",sizeof(p),sizeof(q));

);

A.44

B.33

C.34

D.43

答案:C

此题考查的是数组长度和字符串长度。

题目中的charq[]="abc”;

等价于charp[]={'a','b','c',''0'卜,

所以数组p的长度是3o数组q的长度是4,

运算符sizeof的功能是求变量在内存中占用的字节数。

所以sizeof(p)的值为3,size。f(q)的值为4,。

解析:程序运行后的输出结果是34。

34.正确的字符型常量是

A.'\010'

B.'68'

C."B"

D.GO

答案:A

35.有以下程序语句,程序的运行结果是()

#include<stdio.h>

main()

{FILE*fp;inta[10]=(l,2,3,4,5),i,n;

§)=fopen("dLdatVW);

for(i=0;i<3;i++)

fyrintf<fpr%dw,a[i]);

ftinntf;

fclose(S);

§)=fopen("dl.dat"V);

fscanf;

fclose(本);

printf("%d\n”,n〉;

)

A.1234500

B.12345

C.1

D.54321

答案:B

36.有以下程序,程序运行后的结果是()

#include<stdio.h>

voidfun(int*s,intnl,intn2)

{mt

i=nl;j=n2;

while(i<j)(t=s[i];s[i]=s[j];s[j]=t;i++;j-;)

)

main()

(mta[10]=(l,2,3,4,5,6,7,8,9,01,k;

fun(a,0,3);fun(a,4,9);fun(a,0,9);

for(k=0;k<10;k++)

printf;pnntf(“\n");

)

A.0987654321

B.4321098765

C.5678901234

D.0987651234

答案:C

37.表达式!x||a==b等效于()。

A.!((x||a)==b)

B.!(x||a)==b

C.!(x||(a==b))

D.(!x)11(a==b)

答案:D

38.错误的转义字符是()

A.f\09r

B.N

C.f\0r

D「\”

A.A

B.B

C.C

D.D

答案:A

转义字符由“反斜杠字符开始后跟单个字符

或若干个字符组成。其中,\ddd表示1〜3位

8进制数ddd对应的符号,\xhh表示1〜2位16

进制数hh对应的符号。8进制数中不能有9,

解析:所以选项A\09「错误。

39.数组定义为"inta[4][5];",下列哪一个引用是错误的()。

A.*a

B.*(*(a+2)+3)

C.&a[2][3]

D.++a

答案:D

40.以下叙述中正确的是()

A.C语言中的文件是流式文件,因此只能顺序存取数据

B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数

D.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失

答案:D

解析:C语言中的文件可以顺序存取数据,也可以随机可以存取数据,因此选项A不正确。在

打开一个己存在文件时,若指定使用方式的参数"a"或"a+",则进行写操时会追加到文件末尾,

而不会覆盖原有内容,所以选项B不正确。当以读写方式打开一个文件时,进行写操作后,

可以通过语句rewind(fp);将文件位置指针移到文件开头,这样读到第1个数据,故选项C也

不正确。当对文件的读(写)操作完成之后,必须利用fclose()函数将它关闭,否则可能导

致数据丢失,可见选项D叙述是正确的。

高级语言程序设计期末考试

单选题

1.有以下程序main(){intp[8]={ll,12,13,14,15,16,17,18},i=O,j=O;while(i++<7)if(p[i]%2)j+=p[i];

printf("%d",j);}程序运行后的输出结果是()

A.42

B.45

C.56

D.60

答案:B

解析:本题考查的是while语句和if语句的综合应用。程序中while的循环条件是i++<7,由于

程序开始时将i初始化为0,而且循环体中没有改变变量i的语句,只有循环条件中i的自增,

所以当i从0自增到6时该循环的循环体一共被执行了7次,但是在循环体中,i的值为从1

到7。在循环体中只有一条if语句,其条件表达式为p[i]%2,当p[i]为奇数时,p[i]除以2余1,

条件表达式的值为"真",所以整个循环语句所做的事就是:累计p[l]~p⑺之间的奇数到变量j

中。所以最后j的值应该为13+15+17=45。选B符合题意。

2.设有如下程序段chars[20]="Bejing",*p;p=s;则执行p=s;语句后,以下叙述正确的是()

A.可以用*p表示s[0]

B.s数组中元素的个数和p所指字符串长度相等

C.s和p都是指针变量

D.数组s中的内容和指针变量p中的内容相等

答案:A

3.C源程序中不能表示的数制是()

A.二进制

B.八进制

C.十进制

D.十六进制

答案:A

解析:C源程序中,可以表示十进制数,如+15、-2.1;可以表示八进制整数(在前面加0),

例如00、015;可以表示十六进制整数(在前面加Ox),如0x0、Oxff;但不能表示二进制数。

4.设inta[3][2];能正确表示a数组元素地址的是()

A,a[l]

B.a[3]

C.*a[2]

D.&a[3][2]

答案:A

5.C语句"x=y+++2;"相当于()

A.y+2;y=y+l;B.y=y+1;x=y+2;

C.x=y+2;++2;D.x=y;y=y+2;

A.A

B.B

C.C

D.D

答案:A

6.在C语言中,正确的说法是()

A.函数内部和外部定义的变量同名是合法的

B.只要形参和实参都是变量,那么形实结合一定是地址传递

C.变量的定义和声明(也称说明)功能是相同的

D.没有return的函数就失去了返回功能

答案:A

7.有以下程序,执行后的结果是()

main。

{chars[]="abcde

s+=2;

printf("%d\n",s[0]);

A.输出字符a的ASCII码

B.输出字符c的ASCII码

C.输出字符c

D.程序出错

答案:D

解析:此题考查了数组名的概念。在C语言中,数组名类似于一个指向数组首地址的指针常

量,一旦定义就不能修改其内容。所以此题中的s+=2;语句让数组名s的内容加2是错误的,

编译无法通过。故应该选择D。

8.有以下程序,程序运行后的输出结果是()

main。

(inta=l,b;

for(b=l;b<=10;b++)

(if(a>=8)break;

if(a%2==l)(a+=5;continue;}

a-=3;

)

printf("%d",b);

)

A.3

B.4

C.5

D.6

答案:B

9.有以下程序,程序执行时,给变量x输入10,程序的输出结果是()

intfun(intn)

{if(n==l)return1;

else

return(n+fun(n-1)),

)

mainQ

{intx;

scanf("%d”,&x);

x=fun(x);

printf("%出n”,x);

)

A.55

B.54

C.65

D.45

答案:A

,、fl〃=1(初始值)

I〃+力〃K〃-1)n工1(递归关系)

解析:

此题考查的是递归算法的分析。在一个递归算法中,至少要包含一个初始值和一个递归关系,

此题的递归算法可以这样来表示,如下图。不难看出,该递归算法实现的是计算l+2+3...+n,

而且n必须大于0,否则会陷入死循环。故题目输出的结果是1+2+3…+10=55。

10.有如下程序main(){intx=l,a=0,b=0;switch(x){case0:b++;case1:

a++;case2:a++;b++;}printf("a=%d,b=%d\n〃,a,b);}该程序的输出结果是

()

A.a=2,b=l

B.a=l,b=l

C.a=l,b=0

D.a=2,b=2

答案:A

11.以下能正确定义二维数组的是()

A)inta[][3];

B)inta[][3]={2*3};

C)intaD[3]={};

D)inta[2][3]={{l},{2},{3,4}};

A.A

B.B

C.C

D.D

答案:B

解析:本题考核的知识点是二维数组的定义和初始化。选项A和选项C在没有初始化的情况

下省略了第一维的长度,是非法的,故选项A和选项C错误;选项D中定义了一个2行3列

的数组,而在初始化的时候却赋了3行的值,显然不正确,故选项D错误;选项B初始化时,

只赋了一个值2*3的结果6,省略的第一维的长度为1,故选项B是正确的。

12.设intk;,则语句for(k=0;k=l;k++);和语句for(k=0;k==l;k++卜执行的次数分别是()

A.无限和0

B.0和无限

C.都是无限

D.都是0

答案:A

13.执行语句"for(s=0,i=l;i<=10;i=i+3)s+=丁后,变量s、i的当前值是()

A.22,13

B.12,10

C.22,10

D.12,13

答案:C

14.以下叙述中错误的是()

A.C语言中对二进制文件的访问速度比文本文件快

B.C语言中,随机文件以二进制代码形式存储数据

C.语句FILEfp定义了一个名为fp的文件指针

D.C语言中的文本文件以ASCII码形式存储数据

答案:C

解析:C语言中,文本文件当输出时,数据转换成一串字符,每个字符以字符的ASCII码值存

储到文件中,一个字符占一个字节。当输入时,又把指定的一串字符按类型转换成数据,并存

入内存;二进制文件的数据不经过任何转换、按计算机内的存储形式直接存放到磁盘上。所以

C语言中对二进制文件的访问速度比文本文件快。可见选项A和D叙述是正确的。C语言中,

随机文件以二进制代码形式存储数据。定义文件类型指针变量的一般形式为:FILE*指针变量

名;因此选项C叙述是错误的。综上,应该选择C。

15.以"W"方式打开文本文件a:\aa.dat,若该文件已存在,则()。

A.新写入数据被追加到文件末尾

B.文件被清空,从文件头开始存放新写入数据

C.显示出错信息

D.新写入数据被插入到文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论