2011年1月自考00342高级语言程序设计一试题及答案含解析_第1页
2011年1月自考00342高级语言程序设计一试题及答案含解析_第2页
2011年1月自考00342高级语言程序设计一试题及答案含解析_第3页
2011年1月自考00342高级语言程序设计一试题及答案含解析_第4页
2011年1月自考00342高级语言程序设计一试题及答案含解析_第5页
免费预览已结束,剩余5页可下载查看

付费下载

下载本文档

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

文档简介

高级语言程序设计(一)年月真题

0034220111

1、【单选题】下列运算符的操作数必须是整型的是()

!

A:

%

B:

=

C:

答D:案:C

解析:运算符%的含义是求取两个整数相除的余数,要求除数和被除数必须是整型。

2、【单选题】可用于C语言用户标识符的是()

void,define

2c,DO

A:

or,-abc

B:

as_b3,_123

C:

答D:案:D

解析:在C语言中,合法的标识符由字母、数字和下划线组成,并且第1个字符必须为字

母或下划线。选项A中void为C语言中的保留字,不能作为用户的标识符;选项B中2c

数字开头,不能作为用户的标识符。选项C中For的首字母是大写的,这和关键字for不

同,C语言中大小写字母是有区别的,For可以作为用户的标识符;但选项C中-abc的-开

头,不能作为用户的标识符。选项D的两个都可以用于C语言用户标识符。

3、【单选题】函数调用语句fun(fun(a,a+b,a+c),(a,b,c),5);中函数fun的参数个

数是()

3

4

A:

5

B:

6

C:

答D:案:A

解析:函数调用语句fun(fun(a,a+b,a+c),(a,b,c),5);中函数fun的参数个数有

3个分别是:fun(a,a+b,a+c)、(a,b,c)和5。

4、【单选题】设inta=0,b=1;,下列语句错误的是()

a=b=10;

a++;

A:

b+=a;

B:

(a+b)++;

C:

答D:案:D

解析:进行++的必须是变量,不能是表达式。比如a++相当于a=a+1;而(a+b)++相当于

(a+b)=(a+b)+1,显然是错误的,不能把一个值赋给一个表达式。

5、【单选题】能正确表达数学关系式0≤x<20的C语言表达式是()

0<=x<20

x>=0||x<20

A:

x>=0&&x<20

B:

!(x<=0)&&x<20

C:

答D:案:C

解析:数学关系式0≤x<20的含义是x大于等于0且x小于20,四个选项中只有选项C能

正确表达该数学关系式。特别要注意选项A,0<=x<20和数学关系式0≤x<20含义不同,C

语音表达式0<=x<20该式相当于“(0<=x)<20”。先计算“0<=x”,结果为1或0;再计

算该结果(1或0)<20的值,显然结果是“1”(真)。

6、【单选题】正确的C语言字符常量是()

‘\\\’

‘65’

A:

“A”

B:

‘/n’

C:

答D:案:A

解析:选项A.‘\\\’是转义字符常量;选项B.‘65’是错误表示;选项C.“A”是字符

串常量;选项D.‘/n’是错误表示,回车换行用转义字符‘\n’表示。

7、【单选题】设chars[]=“1234567”;,执行printf(“%d,%d\n”,strlen(s),

sizeof(s));后的输出结果是()

7,7

7,8

A:

8,7

B:

8,8

C:

D:

答案:B

解析:函数strlen(s)的功能是求取s中字符串的长度,字符串“1234567”的长度为7;

函数sizeof(s)的功能是计算数组s的长度,定义s数组时长度省略,实际长度是8,除

了存放1234567为还要存放字符串结束标记’\0’,所以7,8。

8、【单选题】设inta[]={12,34,56,78},*p=a;,下列表达式的值为56的是()

p[1+2]

*(a+2)

A:

a[3]

B:

*(p+3)

C:

答D:案:B

解析:选项A,相当于p[3],即a[3],值为78;选项B,相当于a[2],值为56;选项C

的值显然是78;选项D,相当于p[3],即a[3],值为78。

9、【单选题】对二维数组正确定义并初始化的是()

inta[][3]={1,2,3,4,5,6};

inta[3][3]=(1,2,3,4,5,6);

A:

inta[3][]={{l,2,3},{4,5,6}};

B:

inta[3][3]={a,b,c,d,e,f,g};

C:

答D:案:A

解析:选项A正确,对定义二维数组的同时进行初始化,其第1维可以省略,选项A中省

略的第1维的长度为2。选项B错误,初始化数组用“{}”而不是“()”。选项C错

误,不论什么情况,定义二维数组时也不能省略第2维的长度。选项D错误,定义a是整

型数组,初始化的不是整数。

10、【单选题】设doublex=5.168;,执行printf(“%5.3f\n”,(int)(x*10+0.5)/

10.0);后的输出结果是()

5.218

5.210

A:

5.200

B:

5.168

C:

答D:案:C

解析:求解过程:(int)(x*10+0.5)/10.0=(int)(5.168*10+0.5)/10.0

=(int)(51.68+0.5)/10.0=(int)(52.18)/10.0=52/10.0=5.200。

11、【单选题】关于函数,下列叙述正确的是()

一个函数中可以定义其它的函数

程序总是从main()函数开始执行

A:

main()函数也可以被其它函数调用

B:

一个C程序可以有多个main()函数

C:

答D:案:B

解析:一个C程序只能有一个main()函数;C程序总是从main()函数开始执行,并在

main()函数中结束;main()函数可以调用其它函数调,其它函数之间可以相互调用,但不

能调用主函数;函数不可以嵌套定义(在一个函数中定义其它的函数),但可以嵌套调

用。

12、【单选题】设charch=‘a’;,执行printf(“%d,%c\n”,ch,ch+2);后的输出

结果是()

97,c

97,99

A:

a,c

B:

a,a+2

C:

答D:案:A

解析:按%d的格式输出,输出的是‘a’对应的ASCII码的值97,ch+2的值是‘c’,

按%c的格式输出是字符c,所以选项A正确。

13、【单选题】下列叙述正确的是()

continue语句的作用是跳出循环体

while循环语句的循环体至少执行一次

A:

do-while循环语句的循环体至少执行一次

B:

switch语句中的每个case语句组必须含有break语句

C:

答D:案:C

解析:continue语句的作用是结束本次循环,转去执行下一次循环;do-while循环语句

的循环体至少执行一次;while循环语句的循环体至少执行0次;switch语句中的case

语句组可以含有break语句,也可以不含有break语句。

14、【单选题】设struct{intx;inty;}m[2]={7,3,2,1};,执行printf(“%

d\n”,m[0].x/m[1].x*m[0].y);后的输出结果是()

10.5

9

A:

8.0

B:

7

C:

答D:案:B

解析:m是一个结构体数组,m[0].x/m[1].x*m[0].y=7/2*3=3*3=9。

15、【单选题】设inta=l,b=2,c=3;,执行表达式(a>b)&&(c=1)后c的值是()

0

1

A:

2

B:

3

C:

答D:案:D

解析:用&&对两个表达式进行计算时,若第一个表达式的值为“假”,则运算结果与第二

个表达式的值无关,结果肯定为“假”,所以C语言规定此时第二个表达式将不再计算。

计算表达式(a>b)&(c=1),先计算a>b,值为0,表达式的值就是0,第二个表达式c=1不

再进行计算,变量c仍然保持原来的值3。

16、【问答题】#include<stdio.h>voidmain(){inta=0,b=2,c=3;switch(a)

{case0:switch(b==2){casel:printf(“*”);break;case2:printf

(“%”);break;}case1:switch(c){casel:printf(“$”);break;case2:

printf(“&”);break;default:printf(“#”);}}printf(“\n”);}

答案:*#

解析:本题考核的知识点是switch语句的嵌套应用。外层switch语句后面括号里的a的

值为0,所以执行从case0:后面的语句开始执行,而case0:后面语句也为switch语

句,这个switch语句后面括号里的b==2的值为1,执行该switch语句里的case1:输出

“*”,遇到break语句,退出内层switch语句,由于外层switch语句的case0后面没

有break语句,则继续执行下面的语句,即case1:后面的语句,又是switch语句,由于

c的值是3,所以执行default:后面的语句printf(“#”);输出“#”,所以程序的输出

结果是*#。

17、【问答题】#includevoidfun(int*a,int*b,intx,inty){*a=x+y;*b=x-

y;}voidmain(){intc=8,d=4;fun(&c,&d,5,10);printf(“%d,%d”,c,

d);}

答案:c=15,d=-5

解析:

本题考查的是函数调用的问题。主函数中执行语句fun(&c,&d,5,10);,指针变量a和

b分别指向变量c和d,形参x和y的值分别为10和5,执行语句*a=x+y;*b=x-y;后,

指针变量a和b所指内存单元的值分别变为15和-5,由于指针变量a和b所指内存单元

就是变量c和d的存储位置,所以回到主函数后,变量c和d的值变成了15和-5。

18、【问答题】#include<stdio.h>intfun(intx){intp;if(x==1)return2;

elsep=x-fun(x-2);rerurnmp;}voidmain(){printf(“%d\n”,fun(9));}

答案:6

解析:主函数中调用fun(9)函数,fun()函数中是一个递归调用的过程:fun(9)=9-

fun(7)=9-(7-fun(5))=9-(7-(5-fun(3)))=9-(7-(5-(3-fun(1))))=9-

(7-(5-(3-2)))=9-(7-(5-1))=9-(7-4)=9-3=6

19、【问答题】#include<stdio.h>inta=10;voidf(){inta=30;printf(“%

d,”,a);}voidmain(){f();printf(“%d\n”,a);}

答案:30,10

解析:本题考查的是局部变量和全局变量的区别。若在函数中定义与全局变量名字相同局

部变量,则全局变量在该函数中将不起作用。在主函数中调用f()函数,执行f()函数

printf(“%d,”,a);输出的是在f()函数中定义的变量a的值30。在主函数中执行

printf(“%d\n”,a);输出的是全局变量a的值10。所以程序输出结果为30,10。

20、【问答题】将数组a中元素按下图循环左移一位并输出。

#include

<stdio.h>voidmain(){intj,k,a[5]={1,2,3,4,5};k=a[0];for(j=0;

j<5;j++)a[j]=______;/*第一空*/a[4]=______;/*第二空*/for

(j=0;j<5;j++)printf(“%5d”,_______);/*第三空*/printf(“\n’’);}

答案:a[j+1]ka[j]

解析:第一个for循环负责将a[1]、a[2]、a[3]、a[4]四个元素依次左移1位,所以第一

空应该填a[j+1]。接下来应该将事先保存到变量k的原来a[0]的值赋给a[4],所以第二

空应该填k,注意不能填a[0]。第二个for循环负责输出循环左移后数组5个元素,所以

第三空应该填a[j]。

21、【问答题】计算并输出1!+2!+3!+4!+5!的值。#include<stdio.h>intf(inta)

{staticintc=1;c=c*a;return_____;/*第一空*/}voidmain(){inti,k;

k=_________;/*第二空*/for(i=2;i<=5;i++)k+=f(________);/*第三空*/

printf(“%d\n”,k);}

答案:c1i

解析:f()函数负责计算a的阶乘并返回,所以第一空应该填c。主函数中的for循环中

i从2到5调用for分别求2~5阶乘并累加到变量k中,调用f函数的实参应该是i,所

以第三空应该填i;而1的阶乘显然没有计算在内,所以第二空应该填1,为k赋值为1。

22、【问答题】将文本文件fin.dat中的数字字符找出并写入文本文件fnum.dat中。

#include<stdio.h>voidmain(){charch;FILE*fin,*fnum;fin=fopen

(“fin.dat”,________);/*第一空*/fnum=fopen(“fnum.dat”,“w’’);

while(!feof(_______))/*第二空*/{ch=fgetc(fin);if(______)fputc(ch,fnum);

/*第三空*/}fclose(fin);fclose(fnum);}

答案:"r"、fin、ch>='0'&&ch<='9'

解析:由于是将文本文件fin.dat中的数字字符找出并写入文本文件fnum.dat中,所以

fin.dat文件以只读方式打开,第一空填“r”。while(!feof(_______))含义是当fin所

指文件为到文件尾,继续执行循环,所以第二空填fin。if(______)用来判断读入的字符

是否是数字字符,如果是数字字符,则写入文本文件fnum所指文件中,所以第三空填

ch>='0'&&ch<='9'。

23、【问答题】从键盘输入代表平面上某点的横坐标x和纵坐标y,输出x和y的值并按下

列要求输出相应的标志。当x>0且y>0,属于第一象限,输出标志“A’’当x<0且y>0,属

于第二象限,输出标志“B”当x<0且y<0,属于第三象限,输出标志“C”当x>0且y<0,

属于第四象限,输出标志“D”当x=0或y=0,不属于任何象限,输出标志“E”

答案:#include<stdio.h>voidmain(){intx,y;scanf("%d%d",&x,&y);/*输入x和y

的值*/if(x>0&&y>0)printf("A\n");/*属于第一象限*/elseif(x<0&&y>0)

printf("B\n");/*属于第二象限*/elseif(x<0&&y<0)printf("C\n");/*属于第

三象限*/elseif(x>0&&y<0)printf("D\n");/*属于第四象限*/else

printf("E\n");/*不属于任何象限*/}

解析:输入两个数之后,使用if语句依次判断它们所属的象限即可。

24、【问答题】从键盘输入一个4行5列的二维整型数组,输出其每一行的最小值。

答案:#include<stdio.h>voidmain(){inti,j,a[4][5],min;for(i=0;i<4;i++)/*输

入4行5列的数据*/{for(j=0;j<5;j++)scanf("%d",&a[i][j]);}for(i=0;i<4;i++)

{min=a[i][0];/*假设每行的第1个数为当前最小的*/for(j=1;j<5;j++)/*依次读取

每行的其他元素,如果比当前最小的值小,则更新min*/{if(a[i][j]<min)

min=a[i][j];}printf("第%d行最小数为%d\n",i+1,min);}}

解析:先用一个双重循环输入4行5列的数据。然后再用一个双重循环读取数组中的每一

个元素,在读取每行数据时,先假设每行的第1个数为最小的,然后用该行的每个数与最

小的比较,从而找出每行的最小值。

25、【填空题】表达式3!=6的值是_______________。

答案:1

解析:3不等于6成立,表达式3!=6的值为1。

26、【填空题】设inta=15;,执行printf(“%d\n”,a>>2);后的输出结果是

____________。

答案:3

解析:a>>2的含义是按位右移2位,先将a的值15转换为2进制数00001111,按位右

移2位变为:00000011,按照%d格式输出结果是3。

27、【填空题】设char*str=“People”;,执行printf(“%s\n”,str+4);后的输出

结果是____________。

答案:le

解析:str是字符串“People”的首地址,str+4是字符串“People”中l的地址,按%s

输出从l开始的字符串,输出结果是le。

28、【填空题】执行下面程序段,输出“FIFA”的行数是____________。inti,j;

for(i=0;i<5;i++)for(j=1;j

答案:6

解析:i=0和1时,内层循环1次也不执行;i=2时,内层循环执行1次,输出1行

“FIFA”;i=3时,内层循环执行2次,输出2行“FIFA”;i=4时,内层循环执行3

次,输出3行“FIFA”;一共输出了6行“FIFA”。

29、【填空题】的C语言表达式是____________。

答案:1.0/(x+y)

温馨提示

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

评论

0/150

提交评论