C语言32次笔试试题与答案解析.docx

上传人:b****4 文档编号:4817650 上传时间:2023-05-07 格式:DOCX 页数:18 大小:30.60KB
下载 相关 举报
C语言32次笔试试题与答案解析.docx_第1页
第1页 / 共18页
C语言32次笔试试题与答案解析.docx_第2页
第2页 / 共18页
C语言32次笔试试题与答案解析.docx_第3页
第3页 / 共18页
C语言32次笔试试题与答案解析.docx_第4页
第4页 / 共18页
C语言32次笔试试题与答案解析.docx_第5页
第5页 / 共18页
C语言32次笔试试题与答案解析.docx_第6页
第6页 / 共18页
C语言32次笔试试题与答案解析.docx_第7页
第7页 / 共18页
C语言32次笔试试题与答案解析.docx_第8页
第8页 / 共18页
C语言32次笔试试题与答案解析.docx_第9页
第9页 / 共18页
C语言32次笔试试题与答案解析.docx_第10页
第10页 / 共18页
C语言32次笔试试题与答案解析.docx_第11页
第11页 / 共18页
C语言32次笔试试题与答案解析.docx_第12页
第12页 / 共18页
C语言32次笔试试题与答案解析.docx_第13页
第13页 / 共18页
C语言32次笔试试题与答案解析.docx_第14页
第14页 / 共18页
C语言32次笔试试题与答案解析.docx_第15页
第15页 / 共18页
C语言32次笔试试题与答案解析.docx_第16页
第16页 / 共18页
C语言32次笔试试题与答案解析.docx_第17页
第17页 / 共18页
C语言32次笔试试题与答案解析.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言32次笔试试题与答案解析.docx

《C语言32次笔试试题与答案解析.docx》由会员分享,可在线阅读,更多相关《C语言32次笔试试题与答案解析.docx(18页珍藏版)》请在冰点文库上搜索。

C语言32次笔试试题与答案解析.docx

C语言32次笔试试题与答案解析

四川省普通高等学校计算机应用知识和能力

第三十二次等级考试

二级(C与C++语言)笔试试卷

第一部分

软件技术基础

(共15分)

一、是非判断题(每小题1分,共10分)

(判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B)

1.在程序设计中,常用一维数组来表示线性表的顺序存储空间。

(A)

2.软件测试的目的是为用户提供没有错误的程序。

(B)

3.栈顶的位置只能进行进栈操作不能进行退栈操作。

(B)

4.处于等待状态的进程,若其等待的事件已发生,就立即转入运行状态。

(B)

5.线性表若采用链式存储表示时其结点之间的存储单元地址可以不连续。

(A)

6.在进行插入排序时,其数据比较次数与数据的初始排列有关。

(A)

7.数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储结构无关,是独立于计算机的。

(A)

8.在操作系统中,进程最基本的特征是静态性和并发性。

(B)

9.软件危机是由于软件产品过多而产生的。

(B)

10.面向过程系统需求分析使用的主要工具是数据流图和数据字典。

(A)

二、选择题(每小题1分,共5分)

1.进程从运行状态进入就绪状态的原因可能是(A)。

11(A)时间片用完(B)等待某一事件

(C)等待的事件已发生(D)被选中占有处理机

2.需求分析中开发人员主要从用户那里了解(B)。

12(A)软件怎样做(B)软件做什么

(C)输入的信息(D)软件的测试

3.队列的操作原则是(B)。

13(A)先进后出(B)先进先出

(C)只进不出(D)只出不进

4.在需要经常查找结点的前驱后后继的情况下,使用(C)比较合适。

14(A)单链表(B)循环链表

(C)双链表(D)顺序表

5.任何两个并发进程之间(D)。

15(A)一定存在互斥关系(B)一定存在同步关系

(C)一定彼此独立无关(D)可能存在同步或互斥关系

第二部分

C与C++语言程序设计

(共85分)

一、单项选择题(每小题1分,共10分)

1.若x和y为double类型,则表达式x=1,y=x+3/2的值为(16C)。

(考点:

数据类型、运算符)

分析:

x=1,y=x+3/2逗号表达式的值为y=x+3/2表达式的值,而3/2的结果是1,加上x的值1后赋给y,因为y的类型是浮点型,所以答案为2.0

16(A)1(B)2(C)2.0(D)2.5

2.如果a,b,c,x,y均为int型变量,x=5,y=10,则执行下面语句后,a,b,c的值分别为(17A)。

(考点:

数据类型、运算符)

a=(--y==x++)?

--y:

++x;//判断9==5为假,执行:

之后的++x,所以x=7,y=9,a=7

b=y++;//b=9,y=10

c=x;//c=7

17(A)a=7,b=9,c=7(B)a=7,b=9,c=6

(C)z=6,b=9,c=7(D)z=6,b=9,c=6

3.执行下面语句段的输出结果是(18C)。

(考点:

逻辑运算符)

inti=1,j=1,k=2;

if((j++||k++)&&i++)//j=2,i=2,k不变

printf("%d,%d,%d\n",i,j,k);

18(A)1,1,2(B)2,2,1(C)2,2,2(D)2,2,3

4.若要求表示“a不等于0”的关系,则不能正确表示这一关系的表达式为(19)。

(考点:

关系运算)

19(A)a<>0(B)a(C)a>0||a<0(D)a!

=0

5.若有说明inta,*p=&a;则scanf("%d",*p);语句不能正确为变量赋值的原因是(20)。

(考点:

指针)

20(A)*p表示的是指针变量p的地址

(B)*p表示的是变量a的值,而不是变量a的地址

(C)*p表示的是指针变量p的值

(D)*p只是用来说明p是一个指针变量

6.若有如下说明,则能使指针变量p的值增加的表达式是(21)。

(考点:

结构体指针)

structws

{inta;

int*b;

}*p;//->优先级高于++

21(A)++p->a(B)p->b++(C)p->a++(D)(p++)->a

7.以下能对二维数组a进行正确初始化的是(22)。

(考点:

二维数组)

22(A)inta[2][]={{1,0,1},{5,2,3}};(B)inta[][3]={{1,2,3},{4,5,6}};

(C)inta[2][4]={{1,2,3},{4,5},{6}};(D)inta[][3]={{1,0,1},{},{1,1}};

8.有以下结构体说明和变量定义:

(考点:

链表操作)

structnode

{intdata;

structnode*next;

}*p,*q,*r;

建立如图所示的链表结构,指针变量p、q分别指向如图所示的结点,指针变量r指向一新结点,则可以实现将r指向的结点插入到p、q所指结点之间的语句组是(23)。

 

23(A)q=r;p->next=q->next;

(B)p->next=r;r->next=p->next;

(C)r->next=q;p->next=r;

(D)p=r;r->next=q;

9.以下程序的运行结果为(24)。

(考点:

宏定义)

#define

#definePT3.5

#defineS(x)PT*x*x

voidmain()

{inta=1,b=2;

printf("%4.1f\n",S(a+b));//s(a+b)PT*a+b*a+b

}

24(A)14.0(B)31.5(C)7.5(D)10.5

10.下面程序段的运行结果为(25)。

(考点:

位运算)

inta=9,b=020;

printf("%o\n",~a&b<<1);

分析:

a=(0000000000001001)2~a:

(1111111111110110)2

b=(0000000000010000)2b<<1:

(0000000000100000)2

~a&b<<1:

(0000000000100000)2

25(A)40(B)41(C)42(D)43

二、读程序回答问题(每个选择3分,共45分)

1.有如下程序:

(考点:

字符数组、函数(地址参数))

intcount(char*str,charsubstr[20])

{inti,j,k,num=0;

for(i=0;*(str+i)!

='\0';i++)

{j=i;

k=0;

while(substr[k]==str[j])

{k++;j++;

}

if(substr[k]=='\0')

num++;

}

returnnum;

}

voidmain()

{

charstr[80],substr[20];

gets(str);

gets(substr);

printf("%d\n",count(str,substr));

}

(1)若运行程序时输入abcdabad和ab两个字符串,则输出结果为(26)。

26(A)3(B)4(C)2(D)11

(2)该程序的功能是(27)。

27(A)比较两个字符串str和substr的大小

(B)统计子串substr在母串str中出现的次数

(C)将子串substr复制到母串str中

(D)统计两个字符串中字符的总个数

2.有下列程序(考点:

函数)

#include

intfun(inta,intb)

{staticc=0;

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

elsec=c+b;

returnc;

}

voidmain()

{

inta=2,b=5,c=6,d;

d=fun(2*a,fun(b,c));//嵌套调用函数

printf("%d",d);

}

(1)fun(2*a,fun(b,c))的函数调用中,实参的个数为(28)。

28(A)1(B)2(C)3(D)4

(2)程序的运行结果是(29)。

29(A)6(B)10(C)12(D)15

3.有下列程序(考点:

带参数的宏定义)

#include

#defineM(x,y)((x%y==1)?

1:

0)

intfun(int*a,intn)

{

inti,s=0;

for(i=0;i

if(M(a[i],2)&&M(a[i],3))s=s+a[i];

returns;

}

voidmain()

{

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

printf("%d\n",fun(a,7));

}

分析:

M(a[i],2)&&M(a[i],3)((a[i]%2==1)?

1:

0)&&((a[i]%3==1)?

1:

0)

(1)宏调用M(a[i],2)&&M(a[i],3)为真时所要表达的是(30)。

30(A)判断a[i]是否能被2或3整除

(B)判断a[i]是否能被2和3整除

(C)判断a[i]被2或3整除时,是否至少有一种情况余1

(D)判断a[i]被2和3整除时,是否都余1

(2)程序的运行结果是(31)。

31(A)15(B)6(C)16(D)8

4.有下列程序(考点:

函数(地址参数)、指针运算)

#include"stdio.h"

voidprt(int*x,int*y,int*z)

{

printf("%d,%d,%d\n",++*x,++*y,*(z++));

}

voidmain()

{

inta=10,b=40,c=20;

prt(&a,&b,&c);a=11,b=41,c=20

prt(&a,&b,&c);a=12,b=42,c=20

}

(1)第一次调用函数prt的运行结果是(32)。

32(A)11,42,31(B)11,41,20(C)11,21,40(D)11,41,21

(2)第二次调用函数prt的运行结果是(33)。

33(A)12,42,20(B)12,22,41(C)11,21,41(D)12,42,22

5.有如下程序(考点:

全局变量和局部变量、函数(地址参数)、)

#include

intb=1;

intfun(int*a)

{

intb=0;//b为局部变量

b=b+a[0];

returnb;

}

voidmain()

{

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

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

{

b=b+fun(a+i);//b为全局变量

printf("%d",b);//b为全局变量

}

}

(1)程序的运行结果是(34)。

34(A)24(B)412(C)23(D)410

(2)若将函数fun中的定义“intb=0;”去掉,则程序的运行结果为(35)。

35(A)24(B)412(C)23(D)410

6.有如下程序(考点:

字符数组、函数(地址参数)、逻辑表达式)

#include

voidfun(char*s,char*t1,char*t2)

{

inti,j=0;

for(i=0;s[i]!

='\0';i++)

{

if(i%2&&(s[i]>='a'&&s[i]<='z'))//奇数下标且是小写字母

t1[i]=s[i]-'a'+'A';//转换成大写字母

else

t1[i]=s[i];//不变

if(s[i]>='0'&&s[i]<='9')//判断是否是数字字符

{

t2[j]=s[i];

j++;

}

}

t1[i]=t2[j]='\0';

}

voidmain()

{

chars[20]="2abcde3fg45",t1[20],t2[20];

fun(s,t1,t2);

puts(t1);

puts(t2);

}

(1)程序中第一个puts的输出结果为(36)

36(A)abcdefg(B)2345

(C)2AbCdE3Fg45(D)2aBcDe3fG45

(2)程序中第二个puts的输出结果为(37)

37(A)abcdefg(B)2345

(C)2AbCdE3Fg45(D)2aBcDe3fG45

7.有如下程序:

(考点:

命令行参数、宏定义、条件运算符)

#include

#defineIsAlpha(c)c>='a'&&c<='z'?

1:

0//判断是否是小写字母

voidmain(intargc,int**argv)//argc=3

{

char*str,cx;

intcn=0;

if(argc<2)

return;

str=(*++argv);//str=“2abHc”

while(*str)//等价于*str!

=’\0’

{

cx=(*str++);

if(IsAlpha(cx))

cn++;

}

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

}

若上述程序经编译连接后形成的可执行文件名为:

2-8.exe

(1)当输入命令行:

2-8.exe2abHcabA2时,输出为(38)。

38(A)5(B)3(C)1(D)2

(2)上述程序的功能是(39)。

39(A)命令行第一参数2abHc中出现的小写字母个数

(B)命令行第一参数2abHc中出现的大写字母个数

(C)命令行第二参数abA2中出现的小写字母个数

(D)命令行第二参数abA2中出现的大写字母个数

8.有如下程序:

(考点:

文件、大小写字母转换方法)

#include

voidmain()

{

charch;

FILE*fp;

if((fp=fopen("test.dat","r+"))==NULL)

{

printf("Cannotopenfile.\n");

exit(0);

}

ch=fgetc(fp);

while(ch!

=EOF)//EOF表示文本文件的结束符

{

if(ch>='a'&&ch<='z')

ch-=32;

elseif(ch>='A'&&ch<='Z')

ch+=32;

putchar(ch);

ch=fgetc(fp);

}

fclose(fp);

}

若磁盘文件test.dat中的内容为ab12HD,则程序运行结果为(40)。

40(A)ab12HD(B)Ab12hD(C)aB12Hd(D)AB12hd

注意:

①请把下面“程序填空”中各小题答案写在主观题答题纸上

②每一个空只填一个语句或一个语句所缺的部分内容

三、程序填空(每空2分,共30分)

1.以下程序能计算数列1/2,3/4,1/6,3/8,1/10,3/12…的前15项之和。

请填空。

(考点:

序列处理算法)

#include

#defineN15

voidmain()

{

inti;

doublesum=0.0,a,b=0.0;

for(i=0;i

{

if(①i%2==1)

a=②3.0;

else

a=1.0;

b+=2.0;

sum+=③a/b;

}

printf("1/2+3/4+1/6...+1/30=%f\n",sum);

}

2.一结构体数组中放置了10名学生的学号和成绩(成绩互不相同),程序功能是求出学生的最高分,输出他的学号和成绩。

请填空。

(考点:

结构体数组、求最值算法)

#include

typedefstructsutdent

{

charno[10];

intscore;

}ST;

voidmain()

{

STs[10]={{"A01",65},{"A02",70},{"A03",60},{"A04",84},{"A05",82},

{"A06",90},{"A07",75},{"A08",72},{"A09",95},{"A10",93}};

intmax,i,maxi;

max=s[0].score;

maxi=0;

for(i=1;i<10;i++)

if(s[i].score①>max)

{

max=②s[i].score;

maxi=③i;

}

printf("Max:

No%s;Score%d\n",s[maxi].no,s[maxi].score);

}

3.insert()函数在一维数组y中把x插到下标为i的元素之前,i≥0。

如果i大于等于元素个数则插在末尾。

原有的元素个数存放在指针变量n所指的变量中。

请填空。

(考点:

数组、插入元素算法)

#include

#defineN11

voidinsert(inty[],int*n,intx,inti)

{

intj;

if(i<*n)

for(j=*n-1;①j>=i;j--)

②y[j+1]=y[j];

else

i=*n;

y[i]=③x;

(*n)++;

}

voidmain()

{

inty[N]={0,1,2,3,4,5,6,7,8,9},x,i,*n,j;

j=N-1;//当前数组中数的个数

printf("\nPleaseinputx:

");

scanf("%d",&x);//输入待插入数

printf("\nPleaseinputi:

");

scanf("%d",&i);//输入插入的位置

insert(y,&j,x,i);

for(j=0;j

printf("%d",y[j]);

}

4.下面程序能将Hello!

反向打印出来。

请填空。

(考点:

函数(地址参数)、字符数组、递归算法)

#include

voidmain()

{

intprint_hello(char*);

print_hello("\nHello!

\n");

}

intprint_hello(char*string)

{

char*str=string;//str指向字符串中顺序的第一个字符

if(*str==①‘\0’)return;//结束递归的条件

while(*str)//等价于*str!

=’\0’

②str++;//将str移到字符串末尾

--str;//退回最后一个字符

printf("%c",*str);//输入当前字符串的最后一个字符

③*str=’\0’;

print_hello(string);

}

5.函数fun的功能是:

根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。

请填空。

(考点:

循环、序列处理算法)

#include

voidmain()

{

voidfun(float*,int);

floata;

intk=2;

fun(&a,k);

printf("%f\n",a);

}

voidfun(float*sn,intn)

{

floats=0.0,w,f=-1.0;

inti=0;

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

{

f=①-1*f;

w=f/②(2*i+1);

s+=w;//累加当前项

}

③*sn=s;

}

第三十二级考试

第二部分C与C++语言程序设计

一、单项选择题(每小题1分,共10分)

1、C2、A3、C4、A5、B6、D7、B8、C9、C10、A

二、读程序题(每个选择3分,共45分)

1、CB2、BC3、DD4、BA5、AB

6、CB7、BA8、D

三、程序填空题(每空2分,共30分)

1、①i%2==1②3③a/b

2、①>②s[i].score③i

3、①j>=i②y[j+1]③x

4、①‘\0’②str++③*str=’\0’

5、①-1②(2*i+1)③*sn

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2