二级C语言笔试模拟356.docx
- 文档编号:12532394
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:27
- 大小:41.96KB
二级C语言笔试模拟356.docx
《二级C语言笔试模拟356.docx》由会员分享,可在线阅读,更多相关《二级C语言笔试模拟356.docx(27页珍藏版)》请在冰点文库上搜索。
二级C语言笔试模拟356
二级C语言笔试模拟356
一、选择题
下列备题A)、B)、C)、D)四个选项中,只有一个选项是正确的。
1.下列关于队列的叙述中正确的是。
A.在队列中只能插入数据
B.在队列中只能删除数据
C.队列是先进先出的线性表
D.队列是先进后出的线性表
答案:
C
[解答]队列是一种操作受限的线性表。
它只允许在线性表的一端进行插入操作,另一端进行删除操作。
其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。
队列具有先进先出的特点,它是按“先进先出”的原则组织数据的。
2.下列叙述中正确的是。
A.一个逻辑数据结构只能有一种存储结构
B.数据的逻辑结构属于线性结构,存储结构属于非线性结构
C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率
D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率
答案:
D
[解答]一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。
而采用不同的存储结构,其数据处理的效率是不同的。
故本题答案为D)。
3.具有3个结点的二叉树有。
A.2种形态
B.4种形态
C.7种形态
D.5种形态
答案:
D
[解答]具有3个结点的二叉树有以下的几种形态:
4.在结构化方法中,软件功能分解属于下列软件开发中的阶段。
A.详细设计
B.需求分析
C.总体设计
D.编程调试
答案:
C
[解答]总体设计过程通常由两个主要阶段组成:
系统设计,确定系统的具体实现方案;结构设计,确定软件结构。
为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。
分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。
5.在设计程序时,应采纳的原则之一是。
A.不限制goto语句的使用
B.减少或取消注解行
C.程序越短越好
D.程序结构应有助于读者理解
答案:
D
[解答]滥用goto语句将使程序流程无规律,可读性差,因此A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。
6.为了提高流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为。
A.PAD图
B.N-S图
C.结构图
D.数据流图
答案:
B
[解答]N-S图是由Nassi和Shneiderman提出的一种符合程序化结构设计原则的图形描述工具。
它的提出是为了改进流程图在描述程序逻辑时的不灵活性。
7.单个用户使用的数据视图的描述称为。
A.外模式
B.概念模式
C.内模式
D.存储模式
答案:
A
[解答]选项A)正确,外模式是用户的数据视图,也就是用户所见到的数据模式;选项B)不正确,全局数据视图的描述称为概念模式,即数据库中全部数据的整体逻辑结构的描述;选项C)不正确,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项D)不正确,存储模式即为内模式。
8.数据流图用于抽象描述一个软件的逻辑模型,由一些特定的图符构成。
下列图符名标识的图符不属于数据流图合法图符的是。
A.控制流
B.加工
C.数据存储
D.源和潭
答案:
A
[解答]数据流图中的主要图形元素有加工、数据流、存储文件、源和潭。
9.对关系S和关系R进行集合运算,结果中既包含S中元组也包含R中元组,这种集合运算称为。
A.并运算
B.交运算
C.差运算
D.积运算
答案:
A
[解答]本题考查集合运算。
在关系数据库理论中,两个关系的并是由属于这两个关系的元组组成的集合,故选项A)正确。
两个关系的交是由既属于一个关系又属于另一个关系的元素组成的集合,两个集合的差运算是由从一个集合中去掉另一个集合中有的元素组成。
两个集合的交运算是由既属于前一个集合又属于后一个集合的元素组成。
10.下面概念中,不属于面向对象方法的是。
A.对象
B.继承
C.类
D.过程调用
答案:
D
[解答]面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。
面向对象方法从对象出发,发展出对象、类、消息、继承等概念。
11.算法中,对需要执行的每一步操作,必须给出清楚、严格的规定,这属于算法的。
A.正当性
B.可行性
C.确定性
D.有穷性
答案:
C
[解答]一个算法应当具有5个特性,即有穷性、确定性、可行性、有零个或多个输入以及有一个或多个输出。
算法的确定性是指:
算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。
并且在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的执行结果。
12.以下叙述中正确的是。
A.C程序中的注释只能出现在程序的开始位置和语句的后面
B.C程序书写格式严格,要求一行内只能写一个语句
C.C程序书写格式自由,一个语句可以写在多行上
D.用C语言编写的程序只能放在一个程序文件中
答案:
C
[解答]考查C语言的几个基本概念。
选项A)中,C语言的注释可以出现在程序的任何位置;C语言的语法限制不严格,可以多条语句放在同一行上,也可以将一条语句写在多行,故选项B)错误,选项C)正确;选项D)是错误的,因为用C语言编写的程序可以放在不同的文件中,文件之间使用预处理命令进行调用。
13.C源程序中不能表示的数制是。
A.二进制
B.八进制
C.十进制
D.十六进制
答案:
A
[解答]本题考查的是整型常量。
在C语言程序中,整型常量可以用十进制、八进制和十六进制等形式表示。
但不包括二进制,故本题应该选择A)。
14.以下选项中,值为1的表达式是。
A.1-'0'
B.1-'\0'
C.'1'-0
D.'\0'-'0'
答案:
B
[解答]本题考查的是字符常量的概念。
在C语言中,一个字符常量常常被当作一个整型常量来参与运算,它所代表的值为该字符的ASCII码值。
在ASCⅡ码中,字符串结束符'\0'的ASCⅡ码为0,字符'0'的ASCⅡ码的值为48,字符'1'的ASCⅡ码的值为49。
由此可见,选项A)的值为-47;选项B)的值为1;选项C)的值为49;选项D)的值为-48。
故应该选择B)。
15.若变量均已正确定义并赋值,以下合法的C语言赋值语句是。
A.x=y;
B.x=n%52.5;
C.x+n=i;
D.x=5=4+1;
答案:
A
[解答]本题考查赋值运算符及赋值表达式。
赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C)和D)错误。
"%"运算符两侧都应当是整型数据,选项B)错误。
16.以下程序的输出结果是。
main()
{inta=666,b=888;
prinf(%d\n",(a,b));
}
A.错误信息
B.666
C.888
D.666,888
答案:
C
[解答]本题考查的知识点是:
格式化输出的应用。
printf函数的调用形式:
printf(格式控制,输出项l,输出项2,…),该题的输出项为一个逗号表达式,该表达式的值为b的值,因此输出结果为888,故本题选C)。
17.下列条件语句中,功能与其他语句不同的是。
A.if(a)printf("%d\n",x);elseprintf("%d\n",y);
B.if(a==0)printf("%d\n",y);elseprintf("%d\n",x);
C.if(a!
=0)printf("%d\n",x);elseprintf("%d\n",y);
D.if(a==0)printf("%d\n",x);elseprintf("%d\n",y);
答案:
D
[解答]本题考核的知识点是if语句的用法。
选项A)、选项B)和选项C)都是在a的值为0的时候输出y,a不为0的时候输出x,而选项D)是在a为0的时候输出x,a不为0的时候输出y。
所以,4个选项中选项D)符合题意。
18.若有说明语句:
double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是
A.*p=&a;scanf("%",p);
B.*p=&a;scanf("%f",p);
C.p=&a;scanf("%lf",*p);
D.p=&a;scanf("%lf",p);
答案:
D
[解答]本题考查的是指针的运算和scanf()函数。
由于&a表示变量a的地址值,所以应该直接赋给指针变量p而不是它所指向的内容,故选项A)和B)可以排除。
而scanf()函数除了第1个参数为输入项列表外,其余参数要求为对应变量的地址值,从前一条语句可以看出,指针D中存放的为变量a的地址值,所以直接传给scanf()函数指针变量D就可以了。
故应该选择D)。
19.有以下程序:
main()
{intk=5,n=0;
do
{switch(k)
case1:
case3:
n+:
1;k--;break;
default:
n:
0;k--;
case2:
case4:
n+=2;k--;break;
}
printf("%d",n):
}while(k>0&&n<5);
}
程序运行后的输出结果是()。
A.235
B.0235
C.02356
D.2356
答案:
A
[解答]因为变量的初始值分别为“k=5,n=0”,所以程序第一次进入循环时,执行default语句,这时k=4,执行“case4”这个分支,结果是“n=2,k=3”,打印出2;程序然后进行第二次循环,这时“n=2,k=3”,执行“case3:
”这个分支,结果是“n=3,k=2”,打印出3;程序进行第三次循环,这时“n=3,k=2”,执行“case2:
case4:
”这两个分支,结果是“n=5,k=1”,打印出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束,故输出结果为235。
20.以下程序的输出结果是。
main()
{inta,i;a=0;
for(i=1;i<5:
i++)
{switch(i)
{case0:
case3:
a+=2;
case1:
case2:
a+=3;
default:
a+=5;}
}prinf("%d\n",a};}
A.31
B.13
C.10
D.20
答案:
A
[解答]本题考查用于多分支选择的switch语句,其一般形式为:
switch(表达式)
case常量表达式1:
语句1;
case常量表达式2:
语句2;
case常量表达式n:
语句n;
default:
语句n+1;
}
其语义是:
计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句;如表达式的值与所有case后的常量表达式均不相等时,则执行default后的语句。
21.下面能正确进行字符串赋值操作的是。
A.chars[5]={"ABCDE"};
B.chars[5]={'A','b','C','D','E'};
C.char*s;s="ABCDE";
D.char*s;scanf("%s",s);
答案:
C
[解答]选项A)和B)定义的数组空间太小,至少应该为6个字符的长度才可以。
选项D)中的指针s未赋初值,所以指向一个不确定的地址,因而不能用scanf输入数据到这一指针所指向的地址中。
22.有以下程序:
main()
{intk=5;
while(--k)printf("%d",k-=3);
printf("\n"):
}
执行后的输出结果是()。
A.1
B.2
C.4
D.死循环
答案:
A
[解答]本题考查的是while循环和一运算符。
因为在while循环的循环条件中,一运算符是前缀形式,所以表达式--k的值是k自减之后的值。
程序开始时,将k的值初始化为5,然后进入while循环,因为--k的值为4(非零),所以执行循环体输出k-=3的值1,此时k的值也变为1。
第2次执行循环条件,--k的值为0,所以循环结束。
因此最后输出的结果是1,故应该选择A)。
23.设有定义:
inta;floatb;,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0<回车>,a和b的值分别是。
A.876和543.000000
B.87和6.000000
C.87和543.000000
D.76和543.000000
答案:
B
[解答]本题考查了格式输入函数scanf()的运用。
scanf()函数的一般形式为:
scanf(格式控制,地址表列)。
其中,“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
①格式说明,由“%”和格式字符组成;
②普通字符,即需要原样输入的字符。
“地址表列”是需要接收输入数据的一系列变量的地址。
本题中的“格式控制”是“%2d%f”,其中%2d的意思是要输入一个整数,但该整数最宽只占2个字符,而%f是要输入一个浮点数。
而题目要求输入的是876543.0,所以scanf()函数将87赋给a,6赋给b。
24.设有定义:
inta,+pa=&a;,以下scanf语句中能正确为变量a读入数据的是。
A.scanf("%d",pa);
B.scanf("%d",a);
C.scanf(%d",&pa);
D.scanf("%d",*pa);
答案:
A
[解答]本题考核的知识点是scanf()函数和指针类型变量的简单应用。
scanf()函数的功能是进行输入数据,它是按格式参数的要求从终端上把数据传送到地址参数所指定的内存空间中,C语言允许程序员间接地使用内存地址,这个地址是通过对变量名“求地址”运算得到的,求地址的运算符是&,得到的地址是一种符号地址。
本题中定义了整型变量a和一个指向整型数据的指针变量pa,并定义pa是一个存放a的地址的变量。
选项B)中应该将a改为&a,故选项B)不正确;选项C)应该将&pa改为pa,因为pa已经表示存放a的地址,故选项C)不正确;选项D)中*pa=a,而不是表示a的地址,所以选项D)不正确。
25.有以下函数:
intaaa(char*s)
{char*t=s:
while(*t++):
t--;
return(t-s);
}
以下关于aaa函数的功能的叙述正确的是()。
A.求字符串s的长度
B.比较两个串的大小
C.将串s复制到串t
D.求字符串s所占字节数
答案:
A
[解答]本题考查的知识点是:
while循环的简单应用。
aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到C指向字符串结束标志处。
当t指向结束标志处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标志处。
最后返回t-s,因为s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。
26.有定义语句:
chars[10];,若要从终端给s输入5个字符,错误的输入语句是。
A.gets(&s[0]);
B.scanf("%s",s+1);
C.gets(s);
D.scanf("%s",s[1]);
答案:
D
[解答]本题主要考查的是输入函数scanf和gets。
gets()函数的原型是char*gets(char+s);。
功能是通过键盘读入一个字符串,并放到指针参数s所指的内存地址中。
选项A)给gets传入的实参是&s[0],也就是数组s的第1个元素的地址,这是合法的。
选项C)传入的是数组名s,它出现在表达式中表示的是数组的首地址,所以也是合法的。
scanf(函数要求输入的参数均为地址形式。
选项B)中表达式s+1,表示的是数组首地址往后移动一位的地址,所以是合法的。
选项D)直接引用数组中下标为1的元素,这是不合法的。
27.以下关于逻辑运算符两侧运算对象的叙述中正确的是。
A.只能是整数0或1
B.只能是整数0或非0整数
C.可以是结构体类型的数据
D.可以是任意合法的表达式
答案:
D
[解答]本题考查的是逻辑运算符。
C语言中,逻辑运算符的两个运算分量可以是任意合法的表达式。
故本题应该选择D)。
28.有以下程序:
voidsum(inta[1])
a[0]=a[-1]+a[1];)
main()
{inta[10]=(1,2,3,4,5,6,7,8,9,10];
sum[&a[2]);
printf("%d\n",a[2]):
}
程序运行后的输出结果是()。
A.6
B.7
C.5
D.8
答案:
A
[解答]本题考查的是数组和函数。
sum()函数接收一个int型数组作参数,也可以把它看作是一个int型指针,语句a[0]=a[-1]+a[1];的意思就是将参数指针指向内容的前一个元素和后一个元素的值相加放到指针所指的位置。
因此,主函数中调用sum(&a[2]);的意思就是让a[2]=a[1]+a[3];,所以最后输出的结果是6。
应该选择A)。
29.有以下程序:
#include<string.h>
main()
charp[20]=('a','b','c','d'),q[]="abc",r[]="abcde":
strcat(p,r);strcpy(p+strlen(q),q);
printf("%d\n",strlentp));
}
程序运行后的输出结果是()。
A.9
B.6
C.11
D.7
答案:
B
[解答]strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志'\0'到p[6]中。
函数strlen()返回的是字符串中不包括'\0'在内的实际长度,故本题答案为B)。
30.有以下程序:
fun(intx,inty)(return(x+y);)
main()
inta=1,b=2,c=3,sum;
sum=fun((a++,b++,a+b),c++);
printf("%d\n",sum);
}
执行后的输出结果是()。
A.6
B.7
C.8
D.9
答案:
C
[解答]本题考查的知识点是逗号表达式。
因为整个逗号表达式的值为其最右边一个子表达式的值,所以程序中传递给fun()函数的第1个实参(a++,b++,a+b)的值为a+b的值。
但是,在计算a+b之前,已经先让a和b各自增1了,所以第1个实参值为(1+1)+(2+1)=5。
第2个实参c++的值为变量c自增之前的值3。
所以,函数返回的值为5+3=8。
故应该选择C)。
31.有以下程序:
#include<stdio.h>
main()
{charc1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar();c6=getchar();
putchar(c1);putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1列开始)
123<回车>
45678<回车>
则输出结果是()。
A.1267
B.1256
C.1278
D.1245
答案:
D
[解答]本题考查的是输入输出函数。
scanf()是格式化输入函数;getchar()函数从键盘缓冲区读入下一个字符;putchar(J输出一个字符;printf()函数是格式化输出函数。
在题目中,程序执行到scanf()函数时,会暂停等待用户输入4个字符,按题意输入123<回车>后,字符1~3被分别输入到c1-c3中,而c4会得到一个换行符'\n'。
然后执行第1个getchar()函数,由于前面的scanf()函数读完了缓冲区中的所有字符,所以此时程序会又暂停等待用户输入,按题意输入45678<回车>后,缓冲区第一个字符4输入到C5,第二个字符5输入到C6,所以本题应该选择D)。
32.以下程序的输出结果是。
longfun(intn)
{longS;
if(n==1||n==2)s=2;
elses=n-fun(n-1);
returns;}
main()
{printf("%1d\n",fun(3));}
A.1
B.2
C.3
D.4
答案:
A
[解答]该题考查的是递归函数的调用,题中fun函数进行了递归调用,第1次调用时:
fun(3)n=3s=3-fun
(2);第2次调用时:
fun
(2)n=2s=2,返回第一次调用后,s=3-2=1。
33.若程序中定义了以下函数:
doublemyadd(doublea,doubleb)
return(a+b);
并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是()。
A.doublemyadd(doublea,b);
B.doublemyadd(double,double);
C.doublemyadd(doubleb,doublea);
D.doublemyadd(doublex,doubley);
答案:
A
[解答]本题考核的知识点是函数声明的应用。
函数声明是对所用到的函数的特征进行必要的声明,编译系统以函数声明中给出的信息为依据,对调用表达式进行检测,以保证调用表达式与函数之间的参数正确传递。
函数声明的一般格式为:
类型标识符函数名(类型标识符形参,…);
这些信息就是函数定义中的第一行的内容。
这里形参的名字是不重要的,重要的是类型标识符,函数声明中也可以不写形参名只写该形参的声明类型,但不能只写形参名而不写该形参的类型。
本题中,选项A)中doublemyadd(doublea,b),没写出形参b的类型。
34.以下程序的输出结果是。
intf()
{staticinti=0;
ints=1;
S+=i;i++:
returns;}
main()
{inti,a=0;
for(i=0;1<5;i++)a+=f();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 笔试 模拟 356