1、二级 C语言笔试-251 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.在结构化方法中,软件功能分解属于软件开发中的 _ 阶段。(分数:2.00)A.详细设计B.需求分析C.总体设计D.编程调试2.假设 a和 b为 int型变量,则执行以下语句后,b 的值为 _。a=1;b=10;dob-=a;a+;while(b-0);(分数:2.00)A.9B.-2C.-1D.83.设 char型变量 x中的值为 10100111,则表达式(2+x)(3)的值为 _。(分数:2.00)A.10101001B.10101000C.11111101D.0
2、10101014.软件调试的目的是 _。(分数:2.00)A.发现错误B.改正错误C.改善软件的性能D.挖掘软件的潜能5.以下程序执行后 sum的值是 _。main()int i,sum;for(i=1;i6;i+)sum+=i;printf(“%d/n“,sum);(分数:2.00)A.15B.14C.不确定D.06.下列程序的运行结果是 _。void fun(int * a,int *B) int*k;k=a;a=b;b=k;main()int a=3,b=6,*xstrcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入
3、abcd、abba 和 abc三个字符串,则输出结果为 _。(分数:2.00)A.abcdB.abbaC.abcD.abca8.下面的程序输出结果是 _。#define r 16#if r=16void p(int(分数:2.00)A.9.若变量 c为 char类型,能正确判断出 c为小写字母的表达式是 _ 。(分数:2.00)A.a=c=zB.(c=a)|(c=z)C.(a=c) and(z=c)D.(c=a)printf“/n“);假定以上程序经编译和连接后生成可执行文件 PROGEXE,如果在此可执行文件所在目录的 DOS提示符下键入 PROG ABCDEFGHIJKL,则输出结果为 _
4、。(分数:1.00)A.ABCDEFGB.IJHLC.ABCDEFGHIJKLD.IJKLABCDEFGH17.在下列选项中,_ 不是一个算法一般应该具有的基本特征。(分数:1.00)A.确定性B.可行性C.无穷性D.拥有足够的情报18.以下变量 x、y、z 均为 double类型且已正确赋值,不能正确表示数学式子 x/(y*z)的 C语言表达式是 _ 。(分数:1.00)A.x/y*zB.x*(1/(y*z)C.x/y*1/zD.x/y/z19. (分数:1.00)A.B.C.D.20.设 x、y、t 均为血型变量,则执行语句 x=y=3;t=+x | | +y;后,y 的值为 _。(分数:
5、1.00)A.不定值B.4C.3D.121.有以下程序段:int x=3;doprintf(“%d“,x-=2);while(!(-x);其输出结果是 _ 。(分数:1.00)A.1B.3 0C.1 -2D.死循环22.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是 _。(分数:1.00)A.if(aB.(分数:1.00)A.ABC6789B.ABC67C.12345ABC6D.ABC45678932.以下程序的输出结果是 _ 。fun(int x,int y,int z)z=x * x + y * y;main()int a=31;fun(5,2,(分数:1.00)A.;p
6、rintf(“%d“,A) ;A) 0B.29C.31D.无定值33.下列程序段的输出结果是 _。void fun(int * x,int * y)pnntf(“%d%d“,* x,* y);* x=3;*y=4;main()int x=1,y=2;fun(for(i=0;i3;i+)pi=ai*(1+1);for(i=0;i3;i+)k+=pi*2;printf(“%d/n“,k);(分数:1.00)A.20B.21C.22D.2342.有以下程序:void sum(int *(分数:1.00)A.i20;i+)scanf(“%d(“%d“, 【18】 );for(i=0;i20;i+)if
7、(ai0)count+;sum+= 【19】 ;printf(“sum=%d,count=%d/n“,sum,count);(分数:6.00)填空项 1:_68.若变量 n中的值为 24,则 prnt函数共输出 【20】 行。void prnt(int n,int aa )int i;for(i=1;i=n;i+)printf(“%6d“,aai);if(!(i%5)printf(“/n“);printf(“/n“);(分数:2.00)填空项 1:_二级 C语言笔试-251 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.在结构化方法中,软件
8、功能分解属于软件开发中的 _ 阶段。(分数:2.00)A.详细设计B.需求分析C.总体设计 D.编程调试解析:评析总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。2.假设 a和 b为 int型变量,则执行以下语句后,b 的值为 _。a=1;b=10;dob-=a;a+;while(b-0);(分数:2.00)A.9B.-2C.-1D.8 解析:评析本题程序第一轮循环后 b的值为 9,在进行循环条件测试时,先取 b的现值 9与 0比较,然后再将 b减 1。由于 90 不成立,因此循环结束,这时
9、 b的值已变成 8,本题正确答案为 D。3.设 char型变量 x中的值为 10100111,则表达式(2+x)(3)的值为 _。(分数:2.00)A.10101001B.10101000C.11111101D.01010101 解析:评析异或运算符()的运算规则是:参加运算的两个相应位同号,则结果为 0(假);异号则为1(真)。取反运算符(-)的运算规则是:对一个二进制数按位取反,即将 0变为 1,1 变为 0。本题(-3)是对 3(二进制形式为 00000011)按位取反即 11111100。表达式(2+x)(-3)的值就等价于(00000010+10100111)11111100,结果为
10、 01010101。4.软件调试的目的是 _。(分数:2.00)A.发现错误B.改正错误 C.改善软件的性能D.挖掘软件的潜能解析:评析由程序调试的概念可知:程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性质、原因和位置。其二,对程序进行修改,排除这个错误。所以程序调试的目的就是诊断和改正程序中的错误。5.以下程序执行后 sum的值是 _。main()int i,sum;for(i=1;i6;i+)sum+=i;printf(“%d/n“,sum);(分数:2.00)A.15B.14C.不确定 D.0解析:评析变量 sum在使用时未赋初值,所以无法确定 sum最终的值。6.
11、下列程序的运行结果是 _。void fun(int * a,int *B) int*k;k=a;a=b;b=k;main()int a=3,b=6,*xstrcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入 abcd、abba 和 abc三个字符串,则输出结果为 _。(分数:2.00)A.abcdB.abba C.abcD.abca解析:评析本题自定义函数 scmp()的作用是比较字符串 s1和 s2的大小,如果 s1s2,函数返回 s1的值,否则返回 s2的值。若运行时依次输入 abcd、abba 和 abc三个字符串,执
12、行strcpy(string,scmp(str0,str1);后,string 的值为 abba,再执行 strcpy(string,scmp(string,str2);,由于 scmp(string str2)返回 string的值 abba,再拷贝到字符串数组 string中,所以本题输出 abba。8.下面的程序输出结果是 _。#define r 16#if r=16void p(int(分数:2.00)A.解析:评析 “#define r 16”的作用是指定用标识符 r来代替 16,因此程序编译时只编译#if 部分,故程序运行时,打印输出十六进制的 32,即 20。9.若变量 c为 c
13、har类型,能正确判断出 c为小写字母的表达式是 _ 。(分数:2.00)A.a=c=zB.(c=a)|(c=z)C.(a=c) and(z=c)D.(c=a)printf“/n“);假定以上程序经编译和连接后生成可执行文件 PROGEXE,如果在此可执行文件所在目录的 DOS提示符下键入 PROG ABCDEFGHIJKL,则输出结果为 _。(分数:1.00)A.ABCDEFGB.IJHLC.ABCDEFGHIJKL D.IJKLABCDEFGH解析:评析本题主函数带有两个参数,一个 int型变量 argc,另一个是 char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令
14、行的情况,分别给主函数的两个参数赋值。Argc 中存放命令行中命令字和参数的总和的个数,argv 用来存放命令行中命令字和所有参数的字符串的,并规定argv0存放命令字字符串,argv1用来存放第一个参数的字符串,argv2用来存放第 2个参数的字符串,依此类推。题中 argc的值是 2,执行完-argc 后为 1,输出 argv1,此数组存在第一个参数的字符串 ABCDEFGHIJKL。17.在下列选项中,_ 不是一个算法一般应该具有的基本特征。(分数:1.00)A.确定性B.可行性C.无穷性 D.拥有足够的情报解析:评析一个算法,一般应具有以下几个基本特征:可行性确定性有穷性拥有足够的情报
15、。18.以下变量 x、y、z 均为 double类型且已正确赋值,不能正确表示数学式子 x/(y*z)的 C语言表达式是 _ 。(分数:1.00)A.x/y*z B.x*(1/(y*z)C.x/y*1/zD.x/y/z解析:评析按照自左向右的运算逻辑,选项 A是先做 x/y,然后再乘以 x,显然与题意不符。19. (分数:1.00)A.B.C. D.解析:评析选择运算是一个一元运算,关系 R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关系。这个关系是由 R中那些满足逻辑条件的元组所组成。如果关系的逻辑条件为 f,则 R满足 f的选择运算可以写成 F(R)。20.设 x、y、t 均为
16、血型变量,则执行语句 x=y=3;t=+x | | +y;后,y 的值为 _。(分数:1.00)A.不定值B.4C.3 D.1解析:评析C 语言中在做逻辑或运算时,自左向右判断各个参加或运算的表达式,一旦运算到某式的值为非零时,表明整个表达式一定为真,余下的语句则不再进行运算。本题中,+x 的值为真,则+y 并没有进行运算,所以 y值不变。21.有以下程序段:int x=3;doprintf(“%d“,x-=2);while(!(-x);其输出结果是 _ 。(分数:1.00)A.1B.3 0C.1 -2 D.死循环解析:评析本题中循环执行了两次,第一次,执行完 printf语句后,x=1,而-
17、x 是先自减后执行语句,所以(!(-x)的值为非零,所以又执行了一次。第二次 x的值为-2,-x 的值为-3,求非后,值为 0,跳出循环。22.以下程序段中与语句 k=ab?(bc?1:0):0;功能等价的是 _。(分数:1.00)A.if(a B.(分数:1.00)A.ABC6789 B.ABC67C.12345ABC6D.ABC456789解析:评析strcat(strl,str2)合并字符串函数的作用是把 str2所指字符串的内容连接到 strl字符串的后面,自动删去 strl原来串中的0。为了进行这项操作,要求 strl所指的字符串后面有足够的空间来容纳 str2所指字符串中的内容。函
18、数值为 strl所指第一个字符的地址。32.以下程序的输出结果是 _ 。fun(int x,int y,int z)z=x * x + y * y;main()int a=31;fun(5,2,(分数:1.00)A.;printf(“%d“,A) ;A) 0B.29C.31 D.无定值解析:评析本题中,a 的值并没有改变,因为传递到函数中的是变量值。33.下列程序段的输出结果是 _。void fun(int * x,int * y)pnntf(“%d%d“,* x,* y);* x=3;*y=4;main()int x=1,y=2;fun(for(i=0;i3;i+)pi=ai*(1+1);f
19、or(i=0;i3;i+)k+=pi*2;printf(“%d/n“,k);(分数:1.00)A.20B.21 C.22D.23解析:评析按程序的流程走一遍,可以得到 p0=0,p1=2,p3=6;执行三次 k+=pi*2,相当于k=5+0*2+2*2+6*2=21。42.有以下程序:void sum(int *(分数:1.00)A.&解析:评析C 语言觌定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题要求输出aa0的值,结果应为 1。43.面向对象的设计方法与传统的面向过程的方法有本质不同
20、,它的基本原理是 _ 。(分数:1.00)A.模拟现实世界中不同事物之间的联系B.强调模拟现实世界中的算法而不强调概念C.使用现实世界的概念抽象地思考问题从而自然地解决问题 D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考解析:评析面向对象的设计方法基本原理:使用现实世界的概念抽象地思考问题从而自然地解决问题。强调模拟现实世界中的概念而不强调算法,鼓励开发者在软件开发的绝大部分中都用应用领域的概念去思考。44.有以下程序:void swap1(int * a,int * b) int* c=a;a=b,b=c;void swap2(int * a,int * b) int c=*
21、a;* a=*b,*b=c;main()int a=10,b=15;swap 1(&a,&b) ;printf(“%d,%d,“,a,b) ;a=10,b=15;swap 2(&a,&b) ;printf(“%d,%d“,a,b) ;其输出结果为 _。(分数:1.00)A.15,10,10,15B.15,10,15,10C.10,15,10,15D.10,15,15,10 解析:评析C 语言规定,实参变量对形参变量的数据传递是“值传递”,只由实参传给形参,而不能由形参传回来给实参。在内函数调用结束后,形参单元被释放,实参单元仍保留并维持原值。本题中swapl()函数中,虽然改变了形参指针的值,
22、但实参指针的值并没有改变,所以执行第一个 printf后应输出 10,15,swap2()函数实现了交换两个变量 a和 b的值,因此执行第三个 printf后输出交换后的值15,10,所以本题答案为 D。45.对长度为 N的线性表进行顺序查找,在最坏情况下所需要的比较次数为 _。(分数:1.00)A.N+1B.N C.(N+1)/2D.N/2解析:评析在进行顺序查找过程中,如果被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。46.以下程序的输出结果是 _。#define SQR(X) X * Xmain()
23、int a=16,k=2,m=1;a/=SQR(k/m)SQR(k+m);printf(“%d/n“,(分数:1.00)A.;A) 16B.2 C.9D.1解析:评析 C 语言在预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。在做这题时,也不妨运用置换法。得到 a/=k+m*k+m/k+m*k+m=16/7=2。注:a 为整型,所以在做除法,自动取整。47.下列关于队列的叙述中正确的是 _。(分数:1.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表 D.队列是先进后出的线性表解析:评析队列是指允许在一端进行插入、而在另一端进行删除的线性表。
24、它又称为“先进先出”或“后进后出”的线性表,体现了“先来先服务”的原则。48.以下程序的输出结果是 _。long fum(int n)long s;if(n=|n=2)s=2;else s=n-fun(n-1);return s;main()printf(“%ld/n“,fun(3);(分数:1.00)A.1 B.2C.3D.4解析:评析这是一个递归函数。递归的结束条件是,n=1 或者 n=2。按照程序顺序,即可得出本题结果为 1。49.数据库的物理设计是为一个给定的逻辑结构选取一个适合应用环境的 _ 的过程,包括确定数据库在物理设备上的存储结构和存取方法。(分数:1.00)A.逻辑结构B.物
25、理结构 C.概念结构D.层次结构解析:评析根据数据库物理设计的概念可知:为一个给定的逻辑数据模型选取一个最合适应用要求的物理结构的过程,就是数据库的物理设计。数据库的物理结构就是指数据库在物理设备上的存储结构与存取方法。50.信息隐蔽的概念与下述 _ 概念直接相关。(分数:1.00)A.软件结构定义B.模块独立性 C.模块类型划分D.模拟耦合度解析:评析信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不合晰问的。模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量软件的模块独立性的度量标准是耦合性和内聚性。一个模块的内
26、聚性越强,则该模块的模块独立性越强。而内聚性是信息隐蔽和局部化概念的自然扩长。二、填空题(总题数:18,分数:40.00)51.栈的基本运算有三种:入栈、退栈和 【1】 。(分数:2.00)填空项 1:_ (正确答案:读栈顶元素)解析:评析栈的基本运算有三种:入栈、退栈和读栈顶元素。入栈运算是指在栈顶位置插入一个新元素。这个运算有两个基本操作:首先将栈顶指针进一(即 top加 1),然后将新元素插入到栈顶指针指向的位置。退栈运算是指取出栈顶元素并赋给一个指定的变量。这个运算有两个基本操作:首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针退一(即 top减 1)。读栈顶元素
27、是指将栈顶元素赋给一个指定的变量。这个运算不删除栈顶元素,只是将它的值赋给一个变量。52.在面向对象方法中,信息隐蔽是通过对象的 【2】 性来实现的。(分数:2.00)填空项 1:_ (正确答案:封装)解析:评析软件工程的基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。53.数据流的类型有 【3】 和事务型。(分数:2.00)填空项 1:_ (正确答案:变换型)解析:评析典型的数据流类型有两种:变换型和事务型。变换型:是指信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息
28、通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。54.数据库系统中实现各种数据管理功能的核心软件称为 【4】 。(分数:2.00)填空项 1:_ (正确答案:数据库管理系统或 DBMS)解析:评析数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。数据库管理系统是数据库系统的核心。55.关系模型的数据操纵即是建立在关系上的数据操纵,一般有 【5】 、增加、删除和修改四种操作。(分数:2.00)填空项 1:_ (正确答案:查询)解析:评析关系模型的数据操纵即是建立在关系上的数据操纵,一股有查询、增加、删除和修改四种操作。数据查询:用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。数据删除的基本单位是一个关系内的元组,它的功能是将指定关系内的指定元组删除。数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。数据修改是在一个关系中修改指定的元组和属性。56.下列程序的输出结果是 【6】 。main()int a=1,b=2;a=a+b;b=a-b;a=a-b;