1、二级C语言真题2007年4月答案真题 120一、选择题 下列各题A、B、C、D 四个选项中,只有一个选项是正确的。第1题:参考答案:B答案解析:根据时间复杂度和空间复杂度的定义可知,算法的时间复杂度与空间复杂度并不相关。数据的逻辑结构就是数据元素之间的逻辑关系,它是从逻辑上描述数据元素之间关系的,是独立于计算机中的,数据的存储结构是研究数据元素和数据元素之间的关系如何在计算机中表示,它们并非一一对应。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关。第2题:参考答案:D答案解析:在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,这也是模块
2、划分的原则。第3题:参考答案:A答案解析:软件测试是为了发现错误而执行程序的过程,且为了达到好的测试效果,应该由独立的第三方来构造测试,程序员应尽量避免检查自己的程序。第4题:参考答案:C答案解析:面向对象程序设计的3个主要特征是:封装性、继承性和多态性。第5题:参考答案:D答案解析:队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另一端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(front)。队列具有先进先出的特点,它是按“先进先出”的原则组织数据的,故本题答案为D.。第6题:参考答案:C答案解析:二叉树前序遍历的含义是:首先访问根结点,然
3、后按前序遍历根结点的左子树,最后按前序遍历根结点的右子树,前序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知前序遍历的结果是:ABDYECFXZ。第7题:参考答案:A答案解析:对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结点数为n2,则n1= n2+1。所以该二叉树的叶子结点数等于n+1。第8题:参考答案:B答案解析:在关系运算中,“交”的定义如下:设 R1和R2为参加运用算的两个关系,它们具有相同的度n,且相对应的属性值取自同个域,则R1R2为交运算,结果仍为度等于n的关系,其中的元组既属于R1又属于R2。 根据定义可知,不改变关系表的属性个数但能减少元
4、组个数的是交运算,故本题答案为B.。第9题:参考答案:C答案解析:E-R模型可用E-R图来表示,它具有3个要素:实体(型)用矩形框表示,框内为实体名称。属性用椭圆型来表示,并用线与实体连接。属性较多时也可以将实体及其属性单独列表。实体间的联系用菱形框表示。用线将菱形框与实体相连,并在线上标注联系的类型。第10题:参考答案:A答案解析:数据库设计(Database Design)是指根据用户的需求,在某一具体的数据库管理系统上设计数据库的结构并建立数据库的过程;数据库技术的根本目标是要解决数据共享的问题;数据库需要操作系统的支持;数据的物理结构又称数据的存储结构,就是数据元素在计算机存储器中的表
5、示及其配置。数据的逻辑结构是指数据元素之间的逻辑关系,它是数据在用户或程序员面前表现的方式,在数据库系统中,数据的物理结构不一定与逻辑结构一致。第11题:参考答案:C答案解析:一个算法应当具有5个特性,即有穷性、确定性、可行性、有零个或多个输入以及有一个或多个输出。算法的确定性是指:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。并且在任何条件下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的执行结果。第12题:参考答案:D答案解析:一个C语言的源程序(后缀名为. C在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序
6、(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其它目标程序连接成可执行文件(后缀名为.exe)后方可运行。故本题答案为D。第13题:参考答案:B答案解析:在C语言中,用户标识符命令规则规定:变量名只能由字母、数字或下划线3种字符组成,且第一个字符必须为字母或下划线。在C语言中,大写字母和小写字母被认为是两个不同的字符。据此规定A、D、C三个选项是正确的,而B选项是连字符,不在C语言规定的命名变量标识符的范围内。第14题:参考答案:C答案解析:结构化程序设计是指在程序的构成上只使用顺序、选择(即分支)和循环3种结构组成的编程方式。它强调程序设计风格和程序结构的规范化,提倡清晰的结构
7、。结构化程序设计方法的基本思路,是把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。结构化程序设计提倡模块化的设计方法。第15题:参考答案:A答案解析:一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中可以调用程序中的其他函数,而其他函数却不可以调用 main函数。程序最后再从main函数中结束。第16题:参考答案:D答案解析:本题中,scanf函数的格式控制没有空格,所以,对于选项A、B、C,输入的第一个空格会作为字符赋值给变量c1,而不会被解释成分隔符。第17题:参考答案:C答案解析:本题主要考查C语言的库函数。 abs求
8、整数的绝对值,fabs求双字节型的绝对值,pow函数的原形是double pow(double X,double Y),计算x的y次方;exp函数的原形是double exp(double X),求10的 X次方;sqrt函数的原形是double sqrt(double x),为x的平方根。故本题答案为C。第18题:参考答案:A答案解析:因为“int k=0;”,所以B、C、D.三个选项的表达式的值都等于1,而A选项的表达式的值等于0。这是因为“k+”这个表达式先进行取k值的运算,然后是k值自加1。故本题答案为A。第19题:参考答案:B答案解析:“%u”格式符用来以+进制形式输出无符号整型变量
9、,其取值范围是065535。本题中无符号整型变量x=0xFFFF(+六进制)表示的是无符号整型变量的最大值65535。第20题:参考答案:C答案解析:C语言规定,在“if(表达式)语句 1;else语句2;”这种形式的if语句中,在每一个else前面有一个分号,整个语句结束处有一分号。在本题的 C选项中,else前面少了一个分号,这样程序在编译时,会出现语法错误。第21题:参考答案:D答案解析:因为x的值为大于1的奇数,所以 x除以2的余数等于1,因此,选项A、C中表达式的结果为真,不为0;对于选项B来说,x除以2的商不会等于0;选项D中表达式的结果为假,即等于0。第22题:参考答案:C答案解
10、析:break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语句中。continue语句只是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断。第23题:参考答案:A答案解析:因为变量的初始值分别为“k=5,n =0”,所以程序第一次进入循环时,执行default语句,这时k=4,执行case 4:”这个分支,结果是“n=2,k= 3”,打印出2;程序然后进行第二次循环,这时“n=2,k =3”,执行case 3:”这个分支,结果是“n=3,k=2”,打印出3;程序进行第三次循环,这时“n=3,k=2”,执行“cas
11、e 2:case 4:”这两个分支,结果是“n=5,k=1”,打印出5,这时因为n=5不满足n5的循环条件,因此退出循环,程序运行结束。因此输出结果是235。第24题:参考答案:B答案解析:本题主要考查了for循环的嵌套。外层for循环的自变量i从1开始,每次循环后增l,至到i等于3结束。内层循环的自变量j每次从i开始,每次循环后增1,至到j等于3结束。在每次外循环开始后,内层循环在一行上先打印“i*j=两个乘数的积”,然后换行,下次循环从下一行开始打印。第25题:参考答案:A答案解析:C语言的字符常量是用单引号(即撇号)括起来的一个字符。除此之外,在C语言中还允许用以一个“”开头的字符序列来
12、表示字符常量。其中,形式“ddd”表示1到3位8进制数所代表的字符;形式“xhh”表示1到2位16进制数所代表的字符。在本题中x13表示回车符,是一个字符常量;081用 8进制数所代表的字符,但形式不正确,因为8进制数所表示的字符中不会出现数字“8”;65不是一个字符,而是一个+进制数字;“n”是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。第26题:参考答案:A答案解析:在C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律自动按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型
13、不一致,则以函数类型为主。即函数类型决定返回值的类型。第27题:参考答案:D答案解析:C语言中,字符数据参加运算时,实际上是其ASCII码参与计算。大写字母的ASCII码比其对应的小写字母的ASCII码小31。因此要将大写字母转化为小写字母只需将其加上32即可。所以选项 B、C都符合条件,因为变量C中存储的是大写字母,所以“c-A”的值一定小于26,故选项A与选项C的含义相同。故本题答案为D。第28题:参考答案:B答案解析:循环语句while(*t+);执行完时,指针变量t就指向了字符中结束符o之后的位置,所以语句return(t-s);返回的就是字符串s所用内存的字节个数。第29题:参考答案
14、:D答案解析:指针变量只能存储地址,选项A错误。只有浮点型指针才能指向浮点型数据,选项B.错误。在定义指针变量时必须加上星号“*”,选项C错误。故本题答案为D。第30题:参考答案:A答案解析:指针变量在定义时需要加星号,而在赋值时则不用,故选项B错误。本题中,scanf()函数和printf()函数都是要对指针变量p指向的地址处的数据进行访问,不是变量本身。选项C中多了取地址运算符,选项D中少了指针运算符。第31题:参考答案:B答案解析:在main()中,“f(&a2,5,0);”语句的功能是对数组a10中从a2到a6的数宇(即3,2,1, 6,7)进行从大到小排序,这时数组a10中的数字序列
15、变为5,4,7,6,3,2,1,8,9,10。“f(a,5,1);”语句的功能是对数字序列5,4,7,6,3,2,1,8,9,10中的5,4,7,6,3进行从小到大的排序,所以数组a10中的数字序列最终变为3, 4,5,6,7,2,1,8,9,10。第32题:参考答案:B答案解析:在main()中,f(a)语句的作用是对数组a10中从a2到a5的各个数字乘以2,所以数组a10中的数字就变成了1,2,6,8,10,12,7,8, 9,10,最后在屏幕上输出。第33题:参考答案:D答案解析:本题考查的是函数调用时的数据传递问题。因为在调用函数f()时只是进行的值传递,即单向传递,函数的调用及对形参
16、的处理过程并不会引起实参数值的变化。故本题答案为D。第34题:参考答案:A答案解析:本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出对角线上的元素值。故本题答案为A。第35题:参考答案:B答案解析:本题使用选择法对二维数组对角线上的元素按从大到小的顺序进行排列。最后输出数组第一行的数据。故本题答案为B.。第36题:参考答案:B答案解析:调用函数f()时,将数组a的地址传递给了指针q,此时q指向的就是数组a的第一个元素a0。在5次循环过程中,q始终指向a0,因此a 0的值增加了5。最后的输
17、出结果为“6,2,3,4,5”。第37题:参考答案:C答案解析:函数strlen()返回的是数组的实际长度,而sizeof返回的是数组定义的总长度。因为字符数组p20定义为20字节长度,所以sizeof(p)的值为 20。“strcpy(p+strlen(q),r);”语句的功能把字符数组 r拷贝到字符数组p从p3开始到p7的位置中,这时字符数组p的有效字符长度为8。然后再执行strcat (p,q);”语句(字符串连接),即把字符数组q连接到字符数组p后面,这时字符数组p的有效长度为11。第38题:参考答案:B答案解析:strcpy()函数的功能是将字符串q复制到从p3位置开始的存储单元,同
18、时复制字符串结束标志0到p6中。函数strlen()返回的是字符串中不包括0在内的实际长度,故本题答案为B。第39题:参考答案:C答案解析:本题中函数f()利用选择法对字符串数组p中的字符中按从小到大排序,字符串比较的方法是:依次对S1和S2所指字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符(ASCII码值)决定所在串的大小,因此最后在 p0中存储的是最小的字符串是“aabdfg”。最后用 strlen()函数求得该字符串的长度为6。第40题:参考答案:A答案解析:本题考查了函数的递归调用。在f函数中,当m=7时,程序执行“f(-n,&r1);”语句,递归调用f
19、(6,&r1),程序执行“r1=n/3;”语句,即r1= 6/3=2,然后执行“*r=r1;”语句,所以输出结果为2。第41题:参考答案:D答案解析:运行时输入该命令后,参数argc的值为4,字符串数组argv1、argv2、argv3分别为“12”、“345”、“678”,然后取这3个参数的第一个字符,将其转化成原来的数字并组合成一个新的三位数。第42题:参考答案:B答案解析:本题考查的是变量的作用域问题。程序中定义了多个变量a,全局变量、静态变量和局部变量分别在自己的作用域中参与运算。在main()函数中首先执行“s+=f(0);”语句,而f(0)返回值为12,所以第一次循环结束s的值等于
20、4+12=16;第二次开始时,当执行f(1)时,在f(1)中执行“if(n%2)int a=6; t+=a+;”和“return t+a+;”这两条语句,所以f (1)的返回值等于12。再在主函数中执行“s+=f (1);”语句,也就是16+12=28。第43题:参考答案:D答案解析:本题考查的是带参数的宏定义。不仅要进行简单的字符替换,还要进行参数替换。根据宏替换的规则,本题在进行替换宏HDY时,没有像所希望的那样将HDY(a+c,b+d)替换成(a+c)/(b+ d),而是替换成了“a+c/b+d”,因此结果k为6。第44题:参考答案:A答案解析:将字符串的地址赋值给字符指针变量后,指针就
21、指向了该字符串的第一个字符,即“*p =u”,所以*(p+5)指向的字符是z。第45题:参考答案:A答案解析:本题中,在调用函数f()时,实参是结构体变量s的地址,所以在函数中对形参的改变会影响到实参的数值。函数f()实现的功能是把结构体的成员数组中的值按从小到大顺序进行排列。第46题:参考答案:A答案解析:本题中,在调用函数时将结构体变量的两个成员作为实参,其中的成员数组a实际向函数f()传递的是该数组的地址,因此在函数f()中所对应的形参发生改变时,该数组内的数据也会发生改变。函数f()实现的功能是将成员数组中的前9个元素分别加上该元素的下标,作为新的元素。第47题:参考答案:C答案解析:
22、在C语言中,typedef用于说明一种新的类型名,本题中的node被定义为一种结构体类型名,NODE被定义为指向这种结构体变量的指针,我们可以用它来定义一个指向该类型结构体变量的指针。第48题:参考答案:B答案解析:本题考查的内容是按位与和按位或运算符的使用,由运算规则可知,d的最终结果为4。第49题:参考答案:D答案解析:将有6个元素的整型数组分两行输出到一个文件中,因为输出的都是数字并且每行都没有分隔符,所以当再对其进行读取操作时,每一行都会被认为是一个完整的数,而换行符则作为它们的分隔符。故本题答案为D。第50题:参考答案:A答案解析:首先利用fwrite函数将数组a中的数据写到文件中,
23、接着fseek函数的功能是读文件的位置,指针从文件头向后移动3个int型数据,这时文件位置指针指向的是文件中的第4个int数据“4”。然后 fread函数将文件fp中的后3个数据4,5,6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组中的数据就成了4,5,6,4,5,6,故本题答案为A。二、填空题第51题:参考答案:63详细解答:第52题:参考答案:黑箱或黑盒详细解答:黑箱测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜测以及因果图等。第53题:参考答案:数据库管理系统(DBMS)详细解答:数据库
24、管理系统(Database Management System)简称DBMS,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。它是数据库系统的核心软件。第54题:参考答案:开发详细解答:软件生命周期(SDLC,软件生存周期)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,其中的编码和测试属于开发阶段。第55题:参考答案:数据字典详细解答:数据字典(Data Dictionary,简称DD)就是用来定义数据流图中的各个成分的具体含义。数据字典的任务是对于数据流图中出现的所有被命名的图形元素在数据字典
25、中作为个词条加以定义,使得每一个图形元素的名字都有一个确切的解释。第56题:参考答案:a=14详细解答:本题考查的是的表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf()函数内的输出格式控制串,最后的输出结果应为“a=14”。第57题:参考答案:0详细解答:通过getchar()函数来取得从键盘输入的数据,再判断其是否是字符0,如果是,则执行一次循环,因为从键盘输入的1234567890都是整型数,不是字符所以while循环执行的条件始终不成立,循环体执行的次数为0。第58题:参考答案:m=4 k=4 i=5 k=5详细解答:由于在main
26、 ()函数中,变量i=4,所以就调用fun(4)则输出“m=4 k=4”。然后变量k增1等于5,变量i增1等于5,所以 main()函数的“printf(i=%d k=%dn,i,k);”语句输出“i=5 k=5”。第59题:参考答案:#&详细解答:表达式“c=5”的值为真,所以表达式的值等于1,因此输出符号“#”。然后执行“bleak”,继而去执行“default:printf(&);”语句,输出符号“&”。第60题:参考答案:9详细解答:本题的字符串中共有9个字符,它们分别是1,B,M,n,0,1,2, 1,其中“n”表示换行,“”表示反斜杠字符“”。所以本题的最后输出结果为9。第61题:
27、参考答案:1详细解答:在执行逻辑表达式“j=! ch&i+”时,首先判断j=! ch的值,因为“ch=”不为0,所以“j=! ch=0”, 编译系统便不再计算表达式“i+”的值,i的值不变,仍为1。第62题:参考答案:5 4详细解答:字符串处理函数strlen()返回的是字符数组的实际长度,不包括字符申结束标志 0。而sizeof运算符则计算的是字符数组的总长度,包括串末尾的结束标志。第63题:参考答案:0详细解答:本题考查的是二维数组初始化问题。题中对数组的a00,a10,a203个元素分别赋值为0,1,2,其余的元素都自动赋0。所以a1 2的值为0。第64题:参考答案:i=1 xi-1详细
28、解答:对于10个数,相临的两个数相加取和,总共要进行9次加法运算。所以空14处应填入i=1。相临的两个数相加取和,放在数组a中,x0与x1)的和存放在a0中。所以空15处应填入xi-1。第65题:参考答案:* pmax=* px详细解答:首先将变量x的值放到max中,然后依次和变量y、z进行比较。若有比max大的数,将该数存放到max中,这样最后在max中的值就是x、y、z中的最大值。第66题:参考答案:10详细解答:本题考查的是函数的递归调用。在调用一个函数的过程中又直接或间接的调用该函数本身。第一次调用时,指针x指向的是a0,n的值为3,每调用一次n自减l,x加1,指向数组a中的下一个元素,当n为0时函数开始返回,最后的返回值等于a0+a1+a2+a3=10。第67题:参考答案:40详细解答:本题中指针s1和s2都指向同一个内存中的地址。因此语句“*s2=20;”执行后,* s1=*s2=20。所以m最后的值为40。第68题:参考答案:struct DATE d=2006,10,1;详细解答:本题考查结构体变量初始化的问题。正确的语句应为“struct DATE d=2006,10,1;”。第69题:参考答案:a详细解答:本题考查的是文件的打开方式。要向文本文件的末尾续写内容,需要使用方式“a”(追加)打开文件。更多试卷请见麦多课文库