计算机二级C语言2012年9月最新笔试与机试题库(含答案与解析) 联系客服

发布时间 : 星期二 文章计算机二级C语言2012年9月最新笔试与机试题库(含答案与解析)更新完毕开始阅读830d2672f46527d3240ce0ec

int s=1; s+=i; i++; return s; } main() { int i,a=0;

for(i=0;i<5;i++)a+=f(); printf(\ A)20 B)24 C)25 D)15 (39)下列程序的输出结果是 #include \

#define M(x,y) x%y main()

{ int a,m=12,n=100; a=M(n,m);

printf(\

A)2 B)3 C)4 D)5

(40)假定当前盘符下有两个如下文本文件: 文件名 a1.txt a2.txt 内容 123# 321# 则下面程序段执行后的结果为 #include \ void fc(FILE *p) { char c;

while((c=fgetc(p))!=′#′)putchar(c);} main()

{ FILE *fp;

fp=fopen(\ fc(fp); fclose(fp);

fp=fopen(\ fc(fp); fclose(fp); putchar('\\n');}

A)123321 B)123 C)321 D)以上答案都不正确 二、填空题

请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。 (1)软件定义时期主要包括【1】和需求分析两个阶段。 (2)软件维护活动包括以下几类:改正性维护、适应性维护、【2】维护和预防性维护。 (3)数据的逻辑结构有线性结构和【3】两大类。

(4)某二叉树中度为2的结点有n个,则该二叉树中有【4】个叶子结点。 (5)在ER图中,矩形表示 【5】。

(6)阅读下面程序,则执行后的输出结果是【6】。 #include \ main()

{ int x,y,z; x=1;y=2;z=3;

if(x>y)if(x>z)printf(\ else printf(\ printf(\

(7)以下程序的输出结果是【7】。 main() { int y=9;

for(; y>0; y--) if (y%3==0)

{printf(\

(8)有以下程序段,且变量已正确定义和赋值 for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1)); printf(\

请填空,使下面程序段的功能与之完全相同 s=1.0;k=1;

while( 【8】 ){s=s+1.0/(k*(k+1)); 【9】 ;} printf(\

(9)设有以下定义和语句,则*(*(p+2)+1)的值为【10】。 int a[3][2]={10, 20, 30, 40, 50, 60}, (*p)[2]; p=a;

(10)以下程序的输出结果是 【11】 。 #include main() { int i;

for(i=′a′;i<′f′;i++,i++)printf(\-′a′+′A′); printf(\ }

(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。 #include void f(int x[],int n) { int p0,p1,i,j,t,m;

i=j=x[0]; p0=p1=0; for(m=0;m

{ if(x[m]>i) {i=x[m];p0=m;} else if(x[m]

t=x[p0];x[p0]=x[n-1];x[n-1]=t;

t=x[p1];x[p1]= 【12】 ; 【13】 =t; }

main()

{ int a[10],u;

for(u=0;u<10;u++) scanf(\ f(a,10);

for(u=0;u<10;u++) printf(\ printf(\ }

(12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) { int I;

for(I=0; 【14】 != '\\n';I++); return(I); }

(13)阅读下列程序,则程序的输出结果为【15】。 #include \ struct ty { int data; char c; }; main()

{ struct ty a={30,′x′}; fun(a);

printf(\ fun(struct ty b) { b.data=20;

b.c=′y′; }一、选择题

1)D 【解析】软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,

也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。

(2)D 【解析】测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误成正比。这一现象说明,为了提高测试效率,测试人员应该集中对待那些错误群集的程序。

(3)D 【解析】面向对象思想中的三个主要特征是:封装性、继承性和多态性。

(4)A 【解析】当今主导的程序设计风格是\清晰第一,效率第二\的观点。结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,而在实际应用中,人们更注重程序的可理解性。

(5)B 【解析】软件设计包括软件结构设计、数据设计、接口设计和过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。

(6)C 【解析】数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。 (7)D 【解析】假设线性表的长度为n,则在最坏情况下,冒泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。

(8)C 【解析】满二叉树是指除最后一层外,每一层上的所有结点都有两个叶子结点。在满二叉树中,层上的结点数都达到最大值,即在满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。

(9)B 【解析】数据库管理系统(Database Management System,简称DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库系统的核心。

(10)C 【解析】在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有N个属性的关系称为N元关系。

(11)B 【解析】合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。选项A),数字不能为第一个字母,auto为关键字;选项C)中,也是数字不能为第一个字母,else为关键字;选项D)中负号不合法。

(12)A 【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。C语言的标识符可以分为关键字、预定义标识符和用户标识符。选项B)和C)中的横线以及点都不合法,选项D)中的case为C语言关键字。

(13)A 【解析】 C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函数不用有返回值,若有返回值,则返回值类型必确定。

(14)D 【解析】在内存中,实参单元与形参单元是不同的单元。在C语言中,仅在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。

(15)B 【解析】双目运算中两边运算量类型转换规律: 运算数1运算数2转换结果类型 短整型 长整型 短整型->长整型 整型 长整型 整型->长整型 字符型 整型 字符型->整型

有符号整型 无符号整型 有符号整型->无符号整型 整型 浮点型 整型->浮点型

在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double←float。

(16)D 【解析】在ANSI标准中,long、int和short分别占用4、2和2个字节。但实际上对于某些C编译系统,int和short都占用4个字节,所以说各种类型数据占用内存大小是由选择何种C编译系统决定的。

(17)B 【解析】本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为\即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量

y中,因为y为浮点型数据,所以输出结果为选项B)。

(18)B 【解析】对于do…while循环,程序先执行一次循环体,再判断循环是否继续。本题先输出一次i的值\再接着判断表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值\。 (19)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)A 【解析】本题主要考查switch语句的使用方法。switch语句的执行过程为:进入switch结构后,对条件表达式进行运算,然后从上至下去找与条件表达式值相匹配的case,以此作为入口,执行switch结构中后面的各语句,直到遇到break语句,则跳出switch语句,如果各case都不匹配时,则执行default后面的语句。

(21)A 【解析】本题考查用于多分支选择的switch语句, 其一般形式为: switch(表达式) {

case常量表达式1: 语句1; case常量表达式2: 语句2; …

case常量表达式n: 语句n; default : 语句n+1; }

其语义是:计算表达式的值,并逐个与其后的常量表达式值进行比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有 case后的语句;如表达式的值与所有case后的常量表达式均不相等时,则执行default后的语句。 (22)D 【解析】在C语言中,定义一维数组的语句一般形式如下: 类型名数组名[常量表达式];

一维数组的引用形式为:数组名[下标表达式]。count表示能被2整除或被5整除的个数,i则计算有多少个数组元素。 (23)D 【解析】在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为2。

(24)B 【解析】本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为\j<=i\而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时才会执行一次。m的值为55对3取模,计算结果为1。

(25)C 【解析】在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需要以整型格式输出字符时,输出的也是ASCII码值。字符'A'和'D'的ASCII码值分别为65和68。 (26)D 【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算。此外,一开始应知道*k的值为数组中的某一下标值,即*k=0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。

(27)B 【解析】 argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指针数组的指针。

(28)C 【解析】 p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9。

29)C 【解析】函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项A)正确。指针类型的函数可以返回地址值,选项B)正确。在文件stdio.h中,NULL被定义为void 型的指针,选项D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项C)错误。

(30)C 【解析】此题考查了指针引用一维数组元素的方法。*p+9因为运算符\的优先级高于\所以输出结果为p指向的元素1,然后加9,值为10。

(31)B 【解析】字符串连接函数strcat的调用形式如下:strcat(s1,s2)。此函数将s2所指字