admin 管理员组文章数量: 1087139
2024年5月21日发(作者:反三角函数arc计算器)
国家二级(C语言)笔试模拟试卷150
(题后含答案及解析)
题型有:1. 选择题 2. 填空题
选择题(1-10、21-40每题2分,11-20每题1分,共70分)下列各题A、B、
C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位
置上。
1. 算法的空间复杂度是指
A.算法程序的长度
B.算法程序中的指令条数
C.算法程序所占的存储空间
D.执行算法需要的内存空间
正确答案:D
解析:算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的
时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个
算法所需要的内存空间。
2. 在结构化程序设计中,模块划分的原则是
A.各模块应包括尽量多的功能
B.各模块的规模应尽量大
C.各模块之间的联系应尽量紧密
D.模块内具有高内聚度、模块间具有低耦合度
正确答案:D
解析:在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦
合,这样有利于提高软件模块的独立性,也是模块划分的原则。
3. 下列叙述中,不属于测试的特征的是
A.测试的挑剔性
B.完全测试的不可能性
C.测试的可靠性
D.测试的经济性
正确答案:C
解析:软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错
误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全
测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。
4. 下面关于对象概念的描述中,错误的是
A.对象就是C语言中的结构体变量
B.对象代表着正在创建的系统中的一个实体
C.对象是一个状态和操作(或方法)的封装体
D.对象之间的信息传递是通过消息进行的
正确答案:A
解析:对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应
关系,对象之间通过传递消息互相联系,来模拟现实世界中不同事物彼此之间的
联系,B)、C)、D)是正确的,对象的思想广泛应用于C++、Java等语言中,因
此A)错误。
5. 下列关于队列的叙述中正确的是
A.在队列中只能插入数据
B.在队列中只能删除数据
C.队列是先进先出的线性表
D.队列是先进后出的线性表
正确答案:C
解析:队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操
作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的
一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组
织数据的。
6. 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序
遍历序列是
A.acbed
B.decab
C.deabc
D.cedba
正确答案:D
解析:依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左
子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,
由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二
叉树的前序遍历序列为选项D)。
7. 某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为
A.n+1
B.n-1
C.2n
D.n/2
正确答案:A
解析:对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结
点数为n2,则n1=n2+1,所以该二叉树的叶子结点数等于n+1。
8. 设有如下三个关系表 下列操作中正确的是
A.T=R∩S
B.T=R∪S
C.T=R×S
D.T=R/S
正确答案:C
解析:对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m
元关系S,它们分别有p和g个元组,则R与S的笛卡尔积记为R×S,它是一
个m+n元关系,元组个数是p×q,由题意可得,关系T是由关系R与关系S进
行笛卡尔积运算得到的。
9. 下列叙述中,正确的是
A.用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联
系
B.用E-R图只能表示实体集之间一对一的联系
C.用E-R图只能表示实体集之间一对多的联系
D.用E-R图表示的概念数据模型只能转换为关系数据模型
正确答案:A
解析:两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可
以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概
念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因
此,容易向关系模型、网状模型和层次模型等各种模型转换。
10. 下列有关数据库的描述,正确的是
A.数据处理是将信息转化为数据的过程
B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C.关系中的每一列称为元组,一个元组就是一个字段
D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关
系的关键字,则称其为本关系的外关键字
正确答案:D
解析:数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据
的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项
B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属
性,对应存储文件中的字段,故选项C)叙述错误。
11. 下面各选项中,均是C语言合法标识符的选项组是
A.33 we auto
B._23 me _3ew
C._43 3e_ else
D.ER -DF 32
正确答案:B
解析:合法的标识符是由字母、数字和下画线组成,并且第一个字符必须为
字母或下画线,用户定义的标识符不能与关键字相同。选项A),数字不能为第
一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键
字;选项 D)中负号不合法。
12. 下面四个选项中,均是不合法的用户标识符的选项是
A.A P_0 do
B.float la0 _A
C.b-a goto int
D._123 temp int
正确答案:C
解析:C语言规定的标识符只能由字母、数字和下画线3种字符组成,第一
个字符必须为字母或下画线,并且不能使用C语言中的关键字作为标识符。选
项C)中goto和int是关键字,b-a中“-”不是组成标识符的3种字符之一;选项
D)中int是关键字,所以,均是不合法用户标识符的选项是C)。
13. 以下对C语言函数的有关描述中,正确的是
A.在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送
给实参
B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数
D.函数必须有返回值,返回值类型不定
正确答案:A
解析:C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函
数可以没有返回值,若有返回值,则返回值类型必确定。
14. 设变量已正确定义并赋值,以下正确的表达式是
A.x=y*5=x+z
B.int(15.8%5)
C.x=y+z+5,++y
D.x=25%5.0
正确答案:C
解析:求余运算符“%”两边的运算对象必须是整型;而选项B)和D)中“%”
两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)
中赋值表达式的两边出现相同的变量x,也是错误的;选项C)是一个逗号表达式,
所以正确答案为C)。
15. 现有定义int a;double b;float c;char k;,则表达式a/b+c-k值的类型为
A.int
B.double
C.float
D.char
正确答案:B
解析:双目运算中两边运算量类型转换规律: 运算数1 运算数2
转换结果类型 短整型 长整型 短整型->长整型 整型
长整型 整型->长整型 字符型 整型 字符型->整型
有符号整型 无符号整型 有符号整型->无符号整型 整型 浮点型
整型->浮点型 在a/b的时候,a、b的类型不一致,根据类型转换规则,把整
型转换成double类型,之后的加、减类似。转化规则为char,short→int→unsigned
→long→double←float。
16. 以下程序的运行结果是 int k=0; void fun(int m)
{m+=k;k+=m;printf(“m=%d k=%d”,m,k++);} main( ) { int i=4; fun(i++);
printf(“i=%d k=%dn”,i,k); }
A.m=4 k=5 i=5 k=5
B.m=4 k=4 i=5 k=5
C.m=4 k=4 i=4 k=5
D.m=4 k=5 i=4 k=5
正确答案:B
解析:由于在main( )函数中,变量i=4,所以就调用fun(4),则输出“m=4 k=4”。
然后变量k增1等于5,变量i增1等于5,所以main( )函数的
“printf(“i=%dk=%dn”,i,k);”语句输出“i=5 k=5”。
17. 有以下程序段 int j;float y;char name[50]; scanf(“%2d%f%s”,&
j,&y,name); 当执行上述程序段,从键盘上输入55566 7777abe后,y的值为
A.55566.0
B.566.0
C.7777.0
D.566777.0
正确答案:B
解析:本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式
控制为“%2d”,即只接收输入数据的前两位,从第三位开始直到空格之间的输
入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。
18. 设有: int a=1,b=2,c=3,d=4,m=2,n=2; 执行(m=a>b) &&(n=c>d)
后,n的值是
A.1
B.2
C.3
D.4
正确答案:B
解析:本题考查逻辑与运算的运算规则。其规则是:当运算符前后两个条件
表达式都满足时,其最终结果才为真。当发现第一个表达式的值为假时,计算机
将不再执行后面表达式的运算。本题中,由于前一个表达式的值为“假”,所以
后面的表达式不再进行运算,因而n的值保持不变,仍为2。
19. 下列程序的运行结果是 #include “stdio.h” main( ) { int
x=-9,y=5,z=8; if(x<y) if(y<0) z=0; else z+=1;
printf(“%dn”,z);}
A.6
B.7
C.8
D.9
正确答案:D
解析:if…else语句的执行过程如下,首先计算if后面一对圆括号内表达式
的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后
的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行
if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else
的if匹配,与书写格式无关,本题目的后一个if-else相当于嵌套在第一个if子
句里,相当于x=0时,z=z+1。
20. 若有定义:float x=1.5;int a=1,b=3,c=2;,则正确的switch语句是
A.switch(x) {case 1.0:printf(“*n”); case 2.0:printf(“**n”);}
B.switch((int)x); {case 1:printf(“*n”); case 2:printf(“**n”);}
C.switch(a+b) {case 1:printf(“*n”); case 2+1:printf(“**n”);}
D.switch(a+b) {case 1:printf(“*n”); case c:printf(“**n”);}
正确答案:C
解析:C语言中,switch语句专用于实现多分支结构程序,其特点是各分支
清晰而直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达
式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,
各常量表达式各不相同。
21. 以下程序的输出结果是 main( ) { int a,i;a=0; for(i=1;i<5;i++)
{ switch(i) { case 0:case 3:a+=2;case 1:case
2:a+=3;default:a+=5;} }printf(“%dn”,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后的语句。
22. 以下描述中正确的是
A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内
不能使用复合语句
B.do-while循环由d。开始,用while结束,在while(表达式)后面不能写分
号
C.在do-while循环体中,是先执行一次循环,再进行判断
D.do-while循环中,根据情况可以省略while
正确答案:C
解析:do-while语句的一般形式为:do循环体语句while(表达式);,其中循
环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作
为语句的结束,在do-while循环中,不可以省略while。
23. 若有以下程序 #include <stdio.h> int a[ ]={2,4,6,8}; main( )
{ int i; int *p=a; for(i=0;i<4;i++) a[i]=*p; printf(“%dn”,a[2]);}
上面程序的输出结果是
A.6
B.8
C.4
D.2
正确答案:D
解析:在C语言中,数组元素下标是从0开始的;指针变量p指向数组的
首地址。for循环语句中,指针变量 p始终指向数组的首地址,因而执行循环赋
值语句后数组各元素的值均变为2。
24. 以下数组定义中错误的是
A.int x[ ][3]={0};
B.int x[2][3]={{1,2},{3,4},{5,6}};
C.int x[ ][3]={{1,2,3},{4,5,6}};
D.int x[2][3]={1,2,3,4,5,6};
正确答案:B
解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行进
行初始化;③部分数组元素进行初始化;④省略第一维的定义,不省略第二维的
定义。选项B) 等号右边分了3行,大于等号左边数组的行数2。
25. 已知字符’A’的ASCII码值是65,字符变量c1的值是’A’,c2的值是’D’。
执行语句printf(“%d,%d”,c1,c2-2) ;后,输出结果是
A.A,B
B.A,68
C.65,66
D.65,68
正确答案:C
解析:在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需
要以整型格式输出字符时,输出的也是ASCII码值。字符“A”和“D”的ASCII
码值分别为65和68。
26. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是
A.a[2][!1]
B.a[2][3]
C.a[0][3]
D.a[1>2][!1]
正确答案:D
解析:C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标
取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,
选项D)表示数组元素a[0][0]。
27. 下面程序的文件名为,在DOS下输入的命令行参数为:t to meet me
<回车> 则程序输出的结果是 #include “stdio.h” main(argc,argv) int
argc;char *argv[ ]; { int i; printf(“%dn”,argc);}
A.3
B.4
C.2
D.以上答案都不正确
正确答案:B
解析:argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指
针数组的指针。
28. 阅读下列程序段,则程序的输出结果为 #include “stdio.h” #define
M(X,Y)(X)*(Y) #define N(X,Y)(X)/(Y) main( ) { int a=5,b=6,c=8,k;
k=N(M(a,b),c); printf(“%dn”,k);}
A.3
B.5
C.6
D.8
正确答案:A
解析:带参数的宏定义命令行形式如下:#define宏名(形参表) 替换文本。
首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为 (a)*(b)/(C)。
29. 以下叙述中错误的是
A.改变函数形参的值,不会改变对应实参的值
B.函数可以返回地址值
C.可以给指针变量赋一个整数作为地址值
D.当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
正确答案:C
解析:函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对
应实参的值,选项A) 正确。指针类型的函数可以返回地址值,选项B)正确。在
文件stdio.h中,NULL被定义为void型的指针,选项D)也正确。指针变量的值
只能是存储单元地址,而不能是一个整数,选项C)错误。
30. 有以下程序 #include <stdio.h> main( ) { FILE *fp;int
i,a[6]={1,2,3,4,5,6}; fp=fopen(“”,”w+b”); fwrite(a,sizeof(int),6,fp);
fseek(fp,sizeof(int)*3,SEEK_SET);/*该语句使读文件的位置指针从文件头向后移
动3个int型数据*/ fread(a,sizeof(int),3,fp);fclose(fp); for(i=0;i<
6;i++)printf(“%d,”,a[i]); } 程序运行后的输出结果是
A.4,5,6,4,5,6,
B.1,2,3,4,5,6,
C.4,5,6,1,2,3,
D.6,5,4,3,2,1,
正确答案:A
解析:首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数
的功能是读文件的位置,指针从文件头向后移动3个int型数据,这时文件位置
指针指向的是文件中的第4个int数据“4”,然后fread函数将文件fp中的后3
个数据4,5,6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组
中的数据就成了{4,5,6,4,5,6}。
31. 有下面程序段 #include “stdio.h” #include “string.h” main( )
{ char a[3][20]={{“china”},{“isa”},{“bigcountry!”}}; char k[100]={0},*p=k;
int i; for(i=0;i<3;i++) {p=strcat(p,a[i]);} i=strlen(p) ;
printf(“%dn”,i);} 则程序段的输出结果是
A.18
B.19
C.20
D.21
正确答案:B
解析:字符串连接函数strcat的调用形式如下:strcat(s1,s2)。此函数将s2所
指字符串的内容连接到s1所指的字符串后面,并自动覆盖s1串末尾的尾标,函
数返回s1的地址值。
32. 有以下程序 #include <stdio.h> void fun(int *a,int n)/*fun函数的
功能是将a所指数组元素从大到小排序*/ { int t,i,j; for(i=0;i<n-1;j++)
for(j=i+1;j<n;j++) if(a[i]<a[j]) { t=a[i];a[i]=a[j];a[j]=t;} } main( )
{ int c[10]={1,2,3,4,5,6,7,8,9,0},i; fun(c+4,6); for(i=0;i<10;i++)
printf(“%d,”,c[i]); printf(“n”); } 程序的运行结果是
A.1,2,3,4,5,6,7,8,9,0,
B.0,9,8,7,6,5,1,2,3,4,
C.0,9,8,7,6,5,4,3,2,1,
D.1,2,3,4,9,8,7,6,5,0,
正确答案:D
解析:在本题中,主函数在调用fun( )函数进行排序时,传递的参数是c+4
和6,fun( )函数实现的功能是将数组c的第5个元素开始的6个元素依次进行从
大到小的顺序排列。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。
33. 有以下程序 #include <stdio.h> int fun(char s[ ]) { int n=0;
while(*s<=‘9’&&*s>=‘0’) {n=10*n+*s-’0’;s++;} retum(n); } main( )
{ char s[10]={‘6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf(“%dn”,fun(s)); }
程序的运行结果是
A.9
B.61490
C.61
D.5
正确答案:C
解析:在fin函数中,while循环的功能是:逐个取字符数组s的字符判断其
是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位
将相应左移一个十进制位。当指针s指向数组的第3位时,循环条件不成立,循
环结束,返回n的值,输出n的值为61。
34. 以下函数返回a所指数组中最小的值所在的下标值 fun(int *a,int n)
{ int i,j=0,p; p=j; for(i=j;i<n;i++) if(a[i]<a[p]) ______;
return(p);} 在横线处应填入的是
A.i=p
B.a[p]=a[i]
C.p=j
D.p=i
正确答案:D
解析:该程序先判断a[i]<a[p],如果条件为真,则a[i]比当前设定的最小值
小(p保留的当前最小元素的下标),那么将i赋给p,即将比较过的最小元素下标
保留在p中,作为下面判断的标准。
35. 有以下函数 int aaa(char *s) { char *t=s; while(*t++); t--;
return(t-s); } 以下关于aaa函数的功能的叙述正确的是
A.求字符串s的长度
B.比较两个串的大小
C.将串s复制到串t
D.求字符串s所占字节数
正确答案:A
解析:循环开始前,指针t和s都指向字符串的起始位置,然后通过while
循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t
自减1,此时t指向的位置是字符串的结束标志“0”处,故t-s的值是字符串的
长度,并不包括结束标志。
36. 有以下程序 #include <stdio.h> #include <string.h> typedef
stmct{ char name[9];char sex;float score[2];}STU; void f(STU a) { STU
b={“Zhao”,’m’,85.0,90.0}; int i; strcpy(,) ; =;
for(i=0;i<2;i++) [i]=[i]; main( ) { STU c={“Qian”,’f’,95.0,92.0};
f(c);printf(“%s,%c,%2.0f,%2.0fn”,,,[0],[1]) ; } 程序
的运行结果是
A.Qian,f,95,92
B.Qian,m,85,90
C.Zhao,f,95,92
D.Zhao,m,85,90
正确答案:A
解析:本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传
给函数f的参数只是结构变量c在栈中的一个副本,函数f的所有操作只是针对
这个数据副本进行的修改,这些都不会影响变量c的值。
37. 下列选项中错误的说明语句是
A.char a[ ]={‘t’,’o’,’y’,’o’,’u’,’0’};
B.char a[ ]={“toyou0”};
C.char a[ ]=“toyou0”;
D.char a[ ]=‘toyou0’;
正确答案:D
解析:通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的
相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项
B)和C)后面的“0”是多余的,在C语言中,系统会自动在字符串的结尾处加
上一个字符“0”作为串的结束标记。
38. 已知int a=1,b=3则a^b的值为
A.3
B.1
C.2
D.4
正确答案:C
解析:是按位异或运算,如果对应位不同则结果为1,相同则为0。
39. 下列程序的输出结果是 #include “stdio.h” #define M(x,y) x%y
main( ) { int a,m=12,n=100; a=M(n,m); printf(“%dn”,a--);}
A.2
B.3
C.4
D.5
正确答案:C
解析:带参数的宏定义命令行形式如下: #define宏名(形参表)替换文本
在编译的时候编译预处理程序用“替换文本”来替换宏,即M(n,m)被替换为n%m,
之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,
宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过
程中需要占用一些处理时间。
40. 有以下程序 #include <stdio.h> void fun(char *t,char *s)
{ while(*t!=0) t++; while((*t++=*s++)!=0); } main( ) { char
ss[10]=“acc”,aa[10]=“bbxxyy”; fun(ss,aa); printf(“%s,%sn”,ss,aa); } 程
序的运行结果是
A.accxyy,bbxxyy
B.acc,bbxxyy
C.accxxyy,bbxxyy
D.accbbxxyy,bbxxyy
正确答案:D
解析:本题中fun函数实现了字符串函数strcat的功能,将字符串aa连接到
字符串ss的末尾。调用fun函数时,形参t和s分别指向了字符串ss和aa,然
后通过一个while循环使t指向字符串ss的结束符的位置,第二个while循环将
字符串aa中的字符(包括结束符“0”)逐个复制到字符串ss的末尾处。
填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。注
意:以命令关键字填空的必须拼写完整。
41. 在结构化设计方法中,数据流图表达了问题中的数据流与加工间的关
系,并且每一个______实际上对应一个处理模块。
正确答案:加工
解析:数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的
移动变换过程。其中的每一个加工对应一个处理模块。
42. 结构化程序设计的3种基本结构分别是顺序、选择和______。
正确答案:重复或循环
解析:结构化程序设计包括3种基本的结构:顺序结构、选择结构和重复结
构(循环结构),利用这 3种结构就足以表达出其他各种形式结构的程序设计方
法。利用循环结构,可以简化大量的程序执行。
43. 二分法查找仅限于这样的表:表中的数据元素必须有序,其存储结构
必须是
正确答案:顺序存储(顺序方式存储)
解析:二分法查找对表的要求是有序的顺序表,即第一要求是数据元素有序,
第二要求是按顺序方式存储。
44. 一个模块直接调用的其他模块的模块个数称为______。
正确答案:扇出
解析:在结构图中,调用一个给定模块的模块个数称为扇入,一个模块直接
调用的其他模块个数称为扇出。
45. 数据库系统中实现各种数据管理功能的核心软件是______。
正确答案:数据库管理系统
解析:数据库管理系统是数据库的管理机构,它是一种系统软件,负责数据
库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。
46. x、y、x均为int型变量,描述“x、y和z中至少有两个为正数”的表
达式是______。
正确答案:((x>0)&&(y>0))‖(x>0)&&(z>0)‖(y>0)&&(z>0))
解析:题目要求“x、y和z中至少有两个为正数”,即x、y和z这3个数
中必须有两个是正数,且这3个数中的哪两个数都有可能是正数,所以它们之间
是或的关系。
47. 与表达式a+=b等价的另一书写形式是______。
正确答案:a=a+b
解析:a+=b与a=a+b等价,作用是把变量a的值加b后再赋给变量a。
48. 下列程序的输出结果是______。 #include<stdio.h> main0
{intx=1,y=1,a=1,b=1; switch(x) {case1: switch(y) {case 0:a++;break;
case 1:b++;break; } case2: a++;b++;break; } printf(“a=%d,b
=%dn”,a,B); }
正确答案:a=2,b=3
解析:分析程序,程序从x=l语句开始执行,之后执行第一个switch语句,
switch(x)=switch(1),所以执行case1,casel语句中包含一个复合switch语句;这
时执行第二个switch语句,此时y=1,所以switch(y)= switch(1),因此执行case1,
将b加1,得到b=2,遇到break语句,退出第二个switch语句,则整个case 1
的复合语句执行完毕,由于在这个case 1的后面没有break语句使其退出第一个
switch语句,所以接着执行下列的case 2后面的语句,即将a、b各加1,得到a
=2,b=3。
49. C语言用于结构化程序设计的3种基本结构是______、选择结构和循
环结构。
正确答案:顺序结构
解析:结构化程序有3种基本结构,即顺序结构、选择结构(包括if语句和
switch语句)和循环结构(包括for语句、while语句、do…while语句)。
50. 下列循环的循环次数是______。 ihtk=2; while(k=0)
printf(“%d”,k); k--; printf(“n”);
正确答案:0
解析:解答本题需要注意表达式“k=0”,它是赋值表达式而不是关系表达
式,不论k为何值,表达式 k=0总会使k为0,所以不能进入循环。
51. 若有定义floatb[15],*p=b;,且数组b的首地址为200H,则p/13所指
向的数组元素的地址为______。
正确答案:252H
解析:要解答本题,首先要明白在对指针进行加、减运算时,数字”1”不是
十进制数的”1”,而是指”1”个存储单元长度。1个存储单元长度占存储空间的多
少,应该视具体情况而定,如果存储单元的基类型是int型,则移动1个存储单
元的长度就是位移2个字节;如果存储单元基类型是float型,则移动1个存储
单元的长度就是位移4个字节。所以旷13所指向的数组元素的地址为:
200H+(13*4)H=252H。
52. “printf(“%dn”,strlen(“t”‘023xABCn”));”语句的输出结果是______。
正确答案:6
解析:strlen( )函数的作用是计算字符串的长度并作为函数的返回值,这
里的长度不包括串尾的结束标志’0’。 ‘t’是转义字符,代表横向跳若干格:’’”
是转义字符,代表双引号:’023’只代表一个字符,而不管转义字符后面有几个
字符;’xAB’是以两位十六进制数AB表示的ASCII码字符,只代表一个字符;’n’
是转义字符,代表回车换行。 5个字符常量各代表一个字符,再加上字母C,
所以返回的长度是6。
53. 设有下列宏定义:#define A2 #define B A+3 则执行赋值语句:
t=b*2;t为血型变量后的值是______。
正确答案:8
解析:本题考查带参数的宏定义及相关运算。运算过程为:t=-B*2=A+3*2
=2+3*2=8。
54. 下列程序的功能是将字符串s中所有的字符c删除。请填空。 #include
<stdio.h> main( ) {char s[80]; int i,j; gets(S); for(i=
j0;s[i]!’0’;i++) if(s[i]!=’c’)______; s[j]=’0; puts(S); }
正确答案:s[j++]=s[i]
解析:循环开始后如果数组s中储存值与字符c相同,则i++直接跳过当前
值;如果不相同,则将当前值赋予数组指定位置,并通过.j++将下标加1,指
向下一元素要存储的位置。
55. 下列程序的运行结果是______。 #include<stdio.h> func(a,B)
{static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } main0
{intk=5,m=3,p; p=func(k,m); printf(“%d”,p); p=func(k,m);
printf(“%dn”,p); }
正确答案:11 23
解析:在主函数中第一次调用func子函数时,m=0,i=2,i=i+m+1=3,m=
i+a+b=3+5+3=11。因为在子函数中将m和i定义成了static类型,所以在子函
数中对m和i进行的改变,在下一次调用子函数时能进行保存,所以第二次调用
子函数时,m=11,i==3,则i=i+m+1=15,m=i+a+b=15+5+3=23。
版权声明:本文标题:国家二级(C语言)笔试模拟试卷150(题后含答案及解析) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1716223514a692244.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论