为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

结构化程序设计方法的四条原则是1自顶向下

2017-10-16 50页 doc 183KB 159阅读

用户头像

is_852287

暂无简介

举报
结构化程序设计方法的四条原则是1自顶向下结构化程序设计方法的四条原则是1自顶向下 第一套 1. 结构化程序设计方法的四条原则是:1.自顶向下;2.逐步求精;3.模块化;4.限制使用goto语句。 "自顶向下"是说,程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标;" 逐步求精"是说,对复杂问题,应设计一些子目标,作过渡,逐步细节化;"模块化"是说,一个复杂问题,肯定是由若干稍简单的问题构成;解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍 小的部分。 本题答案为A。 2. 线性表、栈和队列等数据结构所表达和处理的数据以线性...
结构化程序设计方法的四条原则是1自顶向下
结构化程序设计方法的四条原则是1自顶向下 第一套 1. 结构化程序设计方法的四条原则是:1.自顶向下;2.逐步求精;3.模块化;4.限制使用goto语句。 "自顶向下"是说,程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标;" 逐步求精"是说,对复杂问,应设计一些子目标,作过渡,逐步细节化;"模块化"是说,一个复杂问题,肯定是由若干稍简单的问题构成;解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍 小的部分。 本题答案为A。 2. 线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表, 这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。 一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称后进 先出表(Last In First Out);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的 一端称为队尾,允许删除的一端称为队头。在队列中,只能删除队头元素,队列的最后一个元素一定是最 新入队的元素。因此队列又称先进先出表(First In First Out)。 本题答案为C。 i-13. 根据二叉树的性质:二叉树第i(i?1)层上至多有2个结点。得到第5层的结点数最多是16。 本题答案为B。 4. 算法的设计可以避开具体的计算机程序设计语言,但算法的实现必须借助程序设计语言中提供的数 据类型及其算法。数据结构和算法是计算机科学的两个重要支柱。它们是一个不可分割的整体。算法在运 行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步 骤以后结束。 本题答案为C。 5. 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方 法。面向对象方法从对象出发,发展出对象,类,消息,继承等概念。 本题答案为D。 6. 数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建 立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行, 最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。 本题答案为B。 7. 软件设计一般分为总体设计和详细设计两个阶段,总体设计的任务是确定软件的总体结构,子系统 和模块的划分,并确定模块间的接口和评价模块划分质量,以及进行数据分析。详细设计的任务是确定每 一模块实现的定义,包括数据结构、算法和接口。 本题答案为D。 8. 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用 的工具是数据流图和数据字典。 本题答案为B。 9. 数据库是存储在计算机存储设备中的、结构化的相关数据的集合。数据库中的数据不只是面向某一 项特定的应用,而是面向多种应用,可以被多个用户、多个应用程序共享,不具有独立的系统。设计数据 库的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取 大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余, 以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。 本题答案为C。 10. 数据库管理系统的三级模式结构由外模式、模式和内模式组成。 外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。 模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图 的总和。外模式是模式的一部分。 内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理 结构和存取方式的描述。 本题答案为A。 11. 本题的考查点是共用体。 根据共用体的定义可知:共用体z的成员c和成员i[4]是共用着同一段内存空间,所以,当程序给z.i[0]赋值后,实际上共用体成员c的值也确定了,为0x39,所以在以字符方式打印时,打印结果应是ASCII码等于0x39的字符,即是"9"。 故本题答案为B。 12. 本题的考查点是C语言的数据类型。 C语言的数据类型分为基本类型,构造类型,指针类型,空类型四大类。其中,基本类型分为整型,字 符型,实型三类。实型又称浮点型,包括单精度型和双精度型两种类型。 故本题答案为C。 13. 本题的考查点是int类型的范围问题。 C语言中int类型的常数的范围是:-32768~32767。C整常数可用三种形式表示:十进制整数,八进制 整数,十六进制整数。 选项A超出范围,不正确。 故本题答案为A。 14. 本题的考查点是宏定义。 X++的形式应当先使用X值,然后X才进行自加1运算,所以程序在进行SUB()乘法运算的时候,仍取a、b的原值,所以最后打印的结果是3*4=12。 故本题答案为A。 15. 本题的考查点是通过指针引用数组元素。 题目中没有给q分配存储单元,只是简单的给它赋了一个值,所以程序的运行结果是 6 11 NULL pointer assignment,也就是运行后报错。 故本题的答案为A。 16. 本题的考查点是while语句的判断。 n--是先使用后运算,--n是先运算后使用。n=4时,执行n--后,n变为3,执行--n后,n变为2,所以,第一次输出时,n为2;同上过程,第二次输出时,n为0。 故本题答案为A。 17. 本题的考查点是do-while循环条件的判断。 x--是自减运算,先使用x的值,后进行自减运算,所以打印出来的结果应当为23。 故本题答案为B。 18. 本题的考查点是位与运算。 12&012即1100&1010,结果是1000,转化成十进制数是8,所以,输出结果是8。 本题答案为B。 19. 本题的考查点是数组地址的表示。 选项C中,数组名所表示的数组地址不能被重新赋值。 本题答案为C 20. 本题的考查点是通过指针引用数组元素。 i=0时,输出p[0],也就是x[1][1],输出是5; i=2时,输出p[2],即p[2+0],也就是x[2][0],输出是3。 故本题答案为C。 21 本题的考查点是不同格式的数据输出。 printf函数对不同类型的数据用不同的格式字符,"%d"是以带符号的十进制形式输出整数(正数不输 出符号);"%o"以八进制无符号形式输出整数(不包括前导符0);"%x"以十六进制无符号形式输出整数(不包括前导符0x)。 本题答案为D。. 22. 本题的考查点是共用体类型数据的特点。 根据共用体的定义可知:共用体a的成员i和成员ch[2]是共用着同一段内存空间,所以,当程序给a.ch[0]赋值后,实际上,共用体成员i的值也确定了,为13,所以打印输出的结果应当为13。 故本题答案为A。 23. 本题的考查点是条件运算符。 这种条件表达式的一般形式为:表达式1?表达式2:表达式3,条件运算符的执行顺序为:先求解表达式 1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3, 此时表达式3的值就是整个条件表达式的值。 故本题答案为D。 24. 本题的考查点是通过指针引用数组元素。 *(*(pt+1)+2)等价于*(pt[1]+2),pt[1]+2是t[1][2]的地址。*(pt[1]+2)是t[1][2]的值。 故本题答案为C。 25. 本题的考查点是字符串比较函数strcmp()的应用。 strcmp(X1,X2)是串比较函数,当X1>X2时返回值为正数,当X1s2,返回值为正数。 故本题答案为A。 26. 本题的考查点是结构体变量的定义。 定义一个结构体类型的变量,可采用三种方法: (1)先定义结构体类型再定义变量名; (2)在定义类型的同时定义变量; (3)直接定义结构类型变量,即不出现结构体名; 选项B符合第三种定义方法。 故本题答案为B。 本题的考查点是do-while语句。 选项A是错误的,C语言支持do-while语句;do-while构成的循环, 当while语句中的表达式值为零时27.结束循环,而不是非零,故选项B、C都是错误的。 故本题答案为D。 28. 本题的考查点是函数的调用。 观察子函数f(),可以发现它的功能是将b[]中的第1到n+1个数组元素的值进行相乘运算,然后把其值 返回。在主函数中输入的两个实参为a和3,所以f()的返回值为x=2*3*4*5=120。 故本题答案为B。 29. 本题的考查点是字符串的长度。 这个语句的功能是输出"ATS\n012\1\\"这个串的长度,在串中"\\"代表一个"\",为了和printf()函数中的转义字符区分开来,在语法上使用了两个反斜杠代替了一个反斜杠,所以它仅仅为一个字符,而"\1"代表数字1,也占一个字符,"\n"是回车换行符,也占一个字符,加上A、T、S、0、1、2,一共是九个字符。 故本题答案为C。 30. 本题的考查点是通过指针引用数组元素。 观察程序可知,a[2]的值应为*p(根据语法规则,应当先使用,后自增),而通过循环,现在的p已经指向了第三个数组元素,所以*p的值为6,赋值后a[2]仍为6,所以打印的结果应为6。 故本题答案为A。 31. 本题的考查点是break语句和continue语句。 "%"是求余运算符,执行第一次循环时,条件(b%3 == 1)为真,b=4,继续下一次循环,如此反复,当 b=22时,条件(b >= 20)为假,跳出循环,此时共循环8次,即a=8。 故本题答案为B。 32. 本题的考查点是C语言的标识符。 C语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ?中的void是C语言的关键字重名,不合法; ?中的case和C语言的关键字重名,不合法; ?中的2a是数字打头而且sizeof和C语言的关键字重名,不合法。 故本题答案为B。 33. 本题的考查点是函数的形参和实参的关系。 x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并不能使得x的值变化,所以在打印时,x的值是始终不变的,即为0。 故本题答案为C。 34. 本题的考查点是函数的调用。 函数fun2()的作用是将形参x和y的值相乘后-3,在fun2()中的变量m是一个局部变量,它的值在fun2()函数内有效,在主函数中的m指的是全局变量,其值为13,所以fun2(a,b)/m的值为(7*5-3)/13,即2。 故本题答案为B。 35. 本题的考查点是C语句的判断。 C语言规定,分号是C语句的必要组成部分,每个语句和数据定义的最后必须有一个分号。 故本题答案为D。 36. 本题的考查点是数组元素的引用。 cp=c这个语句是将数组c的首行元素地址赋给了指针数组cp。 选项A,cp+1是指将数组c的首行地址加1,即为第二行地址; 选项B,*(cp+3)是地址,等于数组c的首地址加3的那个内存单元的内容,不是对数组元素的引用; 选项C,*(cp+1)+3是地址,等于数组c的首地址加1的那个内存单元中存放的值加3,不是对数组元素的引用。 故本题答案为D。 37. 本题的考查点是字符数组的结束标志。 ptr=str实际上是将串str的首地址赋给了指针变量ptr,所以ptr+5将指向str串的第六个数组元素,即是串的隐含结束标志'\0',*(ptr+5)='\0',最后的结果为'\0'。 故本题答案为B。 38. 本题的考查点是自增、自减运算。 函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以func()的返回值为13+8=21。 故本题答案为C。 39. 本题的考查点是if条件的判断。 ++a是先运算后使用,b--是先使用后运算。执行++a后,a值为0,不满足条件,所以a为0,b仍为1,接下去执行else语句,输出1 0。 故本题答案为C。 40. 本题的考查点是求字符串的长度。 在执行printf()函数前,数组str的长度是7,但是使用strcpy()函数将新的值赋给str后,strlen()函数返回的应当是现在的str字符串的字符个数,即是5。 故本题答案为A。 41. 本题的考查点是给字符串赋值。 选项A字符串的赋值产生越界错误,所以不正确; 选项B是字符数组的赋值,而不是字符串的赋值; 选项D中scanf的列表项必需为变量的地址。 故本题答案为C。 42. 本题的考查点是位运算。 "<<"是C语言中规定的左移运算符,例如,a=a<<2,这个语句即是将a的二进制数左移两位,左移一位 相当于该数乘以2,左移两位相当于该数乘以2的2次方;^是异或运算符,所以,c的二进制值应为00011011。 故本题答案为A。 43. 本题的考查点是求字符串的长度。 虽然字符串str在定义时申请了12个字节的内存空间,但是当对它进行赋值后,一个隐含的"\0"赋给了第7个数组元素,而当函数strlen()在判断串长度时,只要遇到"\0"便结束了,所以,strlen(str)的值应当为6。 故本题答案为A。 44. 本题的考查点是对数组的理解。 C语言规定只能逐个引用数组元素,而不能一次引用整个数组。对于字符数组,可以将整个字符串一次 输入或输出。所以,选项C的说法是不正确的。 故本题答案为C。 45. 本题的考查点是宏定义。 在C语言中,宏定义是直接替换的,所以表达式k=10*MIN(i,j);被直接替换为k=10*(i5||x<-5或者(x>5)||(x<-5)。 故本题答案为:x>5||x<-5或者(x>5)||(x<-5)。 64. 本题的考查点是for循环语句。 题目中for循环的条件是值大于等于字符"0"且小于字符"9"的ASCII码值,而在语句s=10*s+ch[a]-'0'中ch[a]-'0'的值是ch[a]的ASCII码值减去字符"0"的ASCII码值。计算可得s最后的值应当为600。 故本题答案为:600。 65. 本题的考查点是字符串拷贝函数strcpy()。 strlen(str1)是求str1字符串的长度,为13,然后,进行除2运算,结果为6。strcpy()函数是把字符串"es she"拷贝到str1后的第6个字符后面,也就是说,拷贝后的结果是"How does she"。 故本题答案为:How does she。 66. 本题的考查点是宏定义。 宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10; 由于(a+b)>(c+d)为真, 所以t = (a+b),即为7。 故本题答案为:7。 67. 本题的考查点是共用体。 C语言规定,共用体中各个成员变量在内存中占用同一段内存单元,即e.in.x和e.a、e.b占用同一段内存单元; 执行语句e.b=2后,e.in.x=e.a=e.b=2; 执行语句e.in.x=e.a*e.b时,e.a的值为2,e.b的值为2,所以运算得出e.in.x的值为4; 执行语句e.in.y=e.a+e.b时,由于e.in.x和e.a、e.b占用的是同一段内存单元,所以此时的e.a、e.b的值为4,因此运算得出e.in.y的值为4+4=8。程序最后的打印结果为"4,8"。 故本题答案为:4,8。 68. 本题的考查点是对字符串的操作。 将字符串逆序存放的算法是:将字符串中的第i个字符和第strlen(str)-i个字符交换达到逆序排列的目的。strlen函数的返回值是形参中说明的字符串的长度。当字符串中的第i个字符和第strlen(str)-i个字符交换完后,应当交换字符串中第i+1个字符和第(strlen(str)-i)--个字符,故应该对循环变量i的值进行改变,步长为1,所以第一空应填i++;在循环中,题意为通过中间变量m交换字符串中的第i个字符和第strlen(str)-i个字符,所以题中第二、三个空中应当分别填写"str[j-1]"、"str[i]"。 故本题答案为:i++和str[j-1]和str[j-1]=m。 第二套 1. 数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内, 是多种应用数据的集成,并可被各个应用程序所共享。数据库中的数据具有"集成"、"共享"之特点。 本题答案为C。 2. 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说, 软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。 软件生命周期的主要活动阶段为: (1)可行性研究和制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可 靠性以及接口等方面的可能,制定完成开发任务的实施计划。 (2)需求分析。对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。 编写软件规格说明书及初步的用户手册,提交评审。 (3)软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、 模块的划分、功能的分配以及处理流程。 (4)软件实现。把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、 操作手册等面向用户的文档,编写单元测试计划。 (5)软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。 (6)运行和维护。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必 要而且可能的扩充和删改。 本题答案是D。 3. 栈是限定在一端进行插入与删除的线性表。 栈是按照"先进后出"的或后进先出的原则组织数据的,因此,栈也被称为"先进后出"表或"后进先出"表。 本题答案是D。 4. 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用 的工具是数据流图和数据字典。 本题答案为B。 在进行顺序查找过程中,如果线性表中被查的元素是线性表中的最后一个,或者被查元素根本不在 线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。 5. 本题答案为B。 6. 线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。栈是一种特殊的线性表, 这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。 一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称后进 先出表(Last In First Out);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的 一端称为队尾,允许删除的一端称为队头。在队列中,只能删除队头元素,队列的最后一个元素一定是最 新入队的元素。因此队列又称先进先出表(First In First Out)。 本题答案为C。 7. 结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序 证明和测试,以保证程序的正确性。 本题答案为B。 8. 视图设计一般有3种设计次序,它们分别是自顶向下、自底向上和由内向外,它们又为视图设计提供 了具体的操作方法,设计者可根据实际情况灵活掌握,可以单独使用也可混合使用。 本题答案为B。 9. 在软件设计过程中,必须遵循软件工程的基本原则:这些原则包括抽象、信息隐蔽、模块化、局部 化、确定性、一致性、完备性和可靠性。 本题答案为C。 10. 数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数据约束。其中,数据模型中的 数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构 上的操作类型与操作方式。 本题答案为C。 11. 本题的考查点是字符型变量。 C语言中,字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数 形式输出。所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。看上去选项A也是正确的,但题目要求选的是正确的语句,由于选项A少分号,所以不能构成语句,所以选项A是错误的。 故本题答案为C。 12. 本题的考查点是C程序设计的初步知识。 选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序 中任何位置,所以选项A是对的; 选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。 选项C,一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名。 选项D,C语句是组成C程序的基本单位,具有独立的程序功能。所有的C语句都以分号结尾。 故本题答案为A。 13. 本题的考查点是用户标识符的辨别。 标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定 义的数据类型名、语句标号等用途的字符序列。 标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。 标识符不能与C关键字相同,并区分大小写。 由上可知选项D是不对的,因为int是C语言中的关键字。 故本题答案为D。 14. 本题的考查点是复合的赋值运算符。 在赋值符“=”之前加上其它运算符,可以构成复合的运算符。运算方向为自右至左。 本题中先计算c的值,c=c*(x=6.5)=10*6.5=65; 接下来计算f的值,f=f/c=100.0/65=1.5; 最后计算a的值,a=f,因为a为整数,取f的整数部分即为1。 故本题答案为B。 15. 本题的考查点是结构体变量的初始化。 该题是一个对外部存储类型的结构体变量进行的初始化。初始化后,x的值为10,y的值为100。++(p->x)中首先p->x是把p指向结构体变量s中的x成员,此++(p->x)就相当于++x,这时x先自增,再使用,所以此时x的值为11。 故本题答案为B。 16. 本题的考查点是C语言中的整型常数。 整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。由此可知选 项A错; 选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的; 选项D,数字前加“0x”表示十六进制数,所以D也不对。 故本题答案为C。 17. 本题的考查点是函数。 fun函数用了两个指向字符型数据的指针作为形参。该功能是把b的地址赋给a,然后a存储单元里的值再加1。 (*a)++表示的是a所指向的元素值加1,注意:是元素值加1,而不是指针值。 main函数中,p1里存放的是c1的地址,p2里存放的是c2的地址,fun(p1,p2)后,p2的地址赋给了p1,此时p1和p2都指向了c2,即a,(*a)++,a的值加了1,变为了b。所以此时c2的值为b,而c1的值没变,仍为A。注意,这里变的是p1的地址和c2的值。 故本题答案为A。 18. 本题的考查点是逗号表达式。 逗号表达式的一般形式为: 表达式1,表达式2 逗号表达式的求解过程为:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。 故本题答案为D。 19. 本题的考查点是feof()函数的应用。 用fgetc()函数从指定文件读入一个字符时,当读的过程中遇到文件结束符时,函数会返回一个文件结 束标志EOF,EOF在stdio.h中定义为-1。由于ASCII码不可能出现-1,因此EOF定义为-1是合适的。当读入的字符值等于-1时,表示读入的已不是正常字符而是文件结束符。但以上只使用于读文本文件的情况。现在 ANSIC已允许用缓冲文件系统处理二进制文件,而读入某一个字节里的二进制文件数据的值有可能是-1,而这又恰好是EOF的值。这就出现了需要读入有用数据而却被处理为“文件结束”的情况。为了解决这个问题,ANSIC提供一个feof()函数来判断文件是否真的结束。 feof(fp)用来测试fp所指向的文件当前状态是否“文件结束”。如果是文件结束,函数feof(fp)的值为1(真),否则为0(假)。 故本题答案为A。 20. 本题的考查点是if语句。 if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的几种操作之一。 选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3; 选项B,a<3成立,执行第一种操作,x=3; 选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2; 选项D,a字符串2,函数值为一正整数;如果字符串1<字符串2,函数值为一负整数。 所以scmp函数的作用是比较s1和s2的大小,对函数的返回值进行判断,如果字符串1<字符串2,则返回字符串1的值,反之返回字符串2的值。所以main函数里scmp(str[0],str[1])的返回值应该是abba,strcpy(string,scmp(str[0],str[1]))再把这个返回值复制到string里,所以这时string为abba。在执行strcpy(string,scmp(string,str[2])),同样scmp(string,str[2])时比较abba和abc的值,返回值为abba,所以再次复制到string里,所以最后string的值为abba。 故本题答案为B。 28. 本题的考查点是赋值语句。 本题s的初值是a,然后b从1循环到c,每循环一次,s都加1,也就是到了c,加了1*c,所以程序所实现的功能实际上是s=a+c。 故本题答案为B。 29. 本题的考查点是指向指针的指针。 *c表示c间接指向的对象的地址,而**c是c间接指向的对象的值。而在c=&b中,已经把b的地址存放在c里了,*c就指向了b的地址,b里存放的就是a的地址,那么**c应该是变量a的值了。而且也可以用排除法排 除选项A,B,由b=&a可知,这两个选项是同一个意思,变量b中的值就是变量a的地址。所以可以排除。 故本题答案为C。 30. 本题的考查点是指向数组元素的指针变量定义和赋值。 所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。p=&a[0][0]是把该数组的第一个元素的地址赋给指针变量p,而且此时指针变量p也是int型。a[1][2]刚好是数组中的第6个元素,此时也就是p所指的地址,所以输出结果是6。 故本题答案为B。 31. 本题的考查点是表达式的运用。 表达式是程序中使用最频繁、最大量出现的计算手段,程序中要求计算机进行某种计算或运算主要是 通过表达式实现的。不同的表达式进行不同的运算,达到不同的目的。 选项A中,0<=x<100在C语言中是一个合法的关系表达式,但它并不代表数学式0<=x<100。在计算0<=x<100时,根据从左到右的结合性,先计算0<=x,其结果只能是0或1,然后再比较0<100或1<100。 选项B中,根据运算符的优先级,先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。 选项C中,(char)(65+3)为类型强制转换,将数值型数据转换为字符型。 选项D中,赋值运算符的作用是将一个数据赋给一个变量,此项中等号左半部分不合要求。 故本题答案为D。 32. 本题的考查点是文件的基本概念。 文件一般指:存储在外部介质上数据的集合。C语言把文件看作是一个字符(字节)的序列,即由一个 字符(字节)的数据顺序组成。它不是由记录组成的,而是一个数据流。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 故本题答案为D。 33. 本题的考查点是结构体变量的定义。 将一个变量定义为类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型, 而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其一般形式为" struct 结构体名 { 成员表列 }变量名表列; 其中可以不出现结构体名,选项D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所 以B选项不能正确将c1定义为结构体变量。 故本题答案为B。 34. 本题的考查点是一维数组的定义。 数组的常量表达式中可以包括整型常量和符号常量,不能包括变量。也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值,所以选项A不正确。而选项B事先定义一个字符常量N,所以可以在数组中作常量表达式,选项B正确。而选项C中不能用区间表示数组大小;在D中N虽然被赋为100,但N仍然为变量,所以不对。 故本题答案为B。 35. 本题的考查点是字符串的定义和赋初值。 选项A、C是对字符数组初始化,可以是逐个字符赋给数组中各元素,也可以对整个字符串赋初值,但 必须是字符型(s型),并且C语言规定,只有静态存储(static)数组和外部存储(extern)数组才能初始化。所以选项A、C都不对。应该这样来实现:static char s[ ]="Beijing";选项B、D是想通过字符指针来实现,正确的格式是char *s; s="Beijing"。 故本题答案为D。 36. 本题的考查点是函数的返回值。 本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。 故本题答案为C。 37. 本题的考查点是函数的返回值。 函数的返回值是由return语句带回的,如果被调用的函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确 定的值。但并不影响程序的运行。故选项A、C 虽然没有return语句,但没有语法错误,而选项B中,定义max函数时,里面的行参也要分别定义。而选项中只定义了x的数据类型,而y并未定义,所以会出现错误。 故本题答案为B。 38. 本题的考查点是打印输出NULL的值。 此题相当于输出控制字符NULL的ASCII码值,即为0。 故本题答案为A。 39. 本题的考查点是指针变量的运用。 选项A、B指针定义错误,都将指针指向了NULL,都为空值。其中空指针是由对指针变量赋予0值而得到的。例如: #define NULL 0 int *p=NULL; 对指针变量赋0值和不赋值的时候意义是不同的:指针变量未 赋值时,它是指向任意不确定的存储单元的,所以不能使用,否则将造成意外错误;而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。而在选项C中最后一个*c=&t;错误,&t是地址,*c是值。选项D是让指针L指向字符串的末尾,即字符串结束符。 故本题答案为D。 40. 本题的考查点是指针数组。 一个数组,其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都是指针 变量。 int *p[3]表示此数组是指针类型的,每个数组元素(指针变量)都可指向一个整型的指针变量。 故本题答案选B。 41. 本题的考查点是函数调用。 fun(int y,double m); //不要类型,题面已经说明变量都已正确定义并赋值。 k=fun(10,12.5); //函数没有返回值 void fun(n,x); //void 不要 故本题答案为C。 42. 本题的考查点是格式输入函数。 格式输入函数的一般形式: scanf( 格式控制,地址表列) 需要注意的是: 如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同 的字符。所以输入的两个数字之间的逗号是不可少的。 故本题答案为A。 43. 本题的考查点是二维数组的定义和初始化。 选项A定义的数组中各元素实际上是这样的: 1,0 2,0 选项B定义的数组中各元素实际上是这样的: 1,2 3,4 选项C定义的数组中各元素实际上是这样的: 1,0 2,3 选项D错在:C中在对数组进行初始化时,如果对全部元素都赋初值(即提供全部初始数据),则定义 数组时对第一维的长度可以不指定,但第二维的长度不能省。 故本题答案为D。 44. 本题的考查点是函数的返回值。 fun函数的作用是比较a、b的值,如果a>b,就返回a的值,反之,返回b的值。在main函数中,r=fun(fun(x,y),2*z),先对括号里的进行运算,fun(x,y)的返回值为8,再比较8和12,得到r的返回值为12。 故本题答案为D。 45. 本题的考查点是函数。 while((*p2=*p1)!='\0'表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。在这里“*P2=*p1”是赋值操作,而不是比较是否相等,比较应当为双等号“==”。所以B,C,D都不对。 故本题答案为A。 46. 本题的考查点是位运算符的。 &是“按位与”运算符,参加运算的两个运算量的相应位都为1,则该位的结果值为1,否则为0。~是“取 反”运算符,用来对一个二进制数按位取反,即将0变1,1变0。本题x/y&~z,x/y的值为1,~z的值为0,所以进行&运算后,整个表达式的值为0。 故本题答案为D。 47. 本题的考查点是带参数的宏定义。 本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用变量值,再自增。 故本题答案为A。 本题的考查点是do-while语句 此语句的一般形式为: 48. do 语句 while (表达式) 其特点为:先执行语句,后判断表达式。 它是这样执行的:先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非零("真")时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。 当n=-1时,s+=1,s=1; a=a-2=-1;a!=n不成立,结束循环,此时s值为1,不符合题意; 当n=-3时,s+=1,s=1; a=a-2=-1;a!=n成立,继续循环,s=s+1=2,a=a-2=-3;a!=n不成立,此时s值为2,符合题意; 故本题答案为B。 49. 本题的考查点是逻辑或运算。 a||b若a、b之一为真,则a||b为真,但如果a为真,则b不用考虑,也就是无需计算,仍为原值。 结合本题,因为b>a为真,即n=1,所以m不用计算仍为原值,且k值为1。 故本题答案为C。 50. 本题的考查点是指向结构体变量的指针以及用指针处理链表。 一个结构体变量的指针就是该变量所占据的内存字段的起始地址。可以设一个指针变量,用来指向一 个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组的元 素。 在C语言中,q->next相当于(*q).next。即:q所指向的是结构体变量中的next成员。 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它根据需要开辟内存单元。 链表中的各元素在内存中可以不是连续存放的。所以必须利用指针变量才能实现。即:一个结点中应包括 一个指针变量,用它存放下一结点的地址。 r->next=q表示让q指向新开辟的结点,r指向链表中最后一个结点,把r所指的结点连接在q所指的结点后面。同样,p->next=r表示让r指向新开辟的结点,p指向链表中最后一个结点,把p所指的结点连接在r所指的结点后面。那么在A中,执行r->next=q后,r->next指向了q。此时第2句相当于q->next=q;所以q的下一个结点指向了自己,而不是指向原来r的下一个结点。 故本题答案为A。 51. 冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有 序。 假设线性表的长度为n,则在最坏的情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。 标准答案为:n(n-1)/2 或 n*(n-1)/2 或 O(n(n-1)/2) 或 O(n*(n-1)/2) 52. 数据库系统在其内部具有三级模式及二级映射,三级模式分别是概念级模式、内部级模式和外部级 模式。 概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。 内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、 集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备 级上(如磁盘及磁盘操作)。 外模式也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式 推导而出。 标准答案为:概念 或 概念级 53. 关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除和修改四种操作。 数据查询:用户可以查询关系数据库中的数据,它包括一个关系内的查询以及多个关系间的查询。 数据删除的基本单位是一个关系内的元组,它的功能是将指定关系内的指定元组删除。 数据插入仅对一个关系而言,在指定关系中插入一个或多个元组。 数据修改是在一个关系中修改指定的元组和属性。 标准答案为:查询 54. 软件测试的方法有三种:动态测试、静态测试和正确性证明。设计测试实例的方法一般有两类:黑 盒测试方法和白盒测试方法。在使用黑盒法设计测试实例时,测试人员将程序看成一个"黑盒",也就是说,他不关心程序内部是如何实现的,而只是检查程序是否符合它的"功能说明",所以使用黑盒法设计的测试用例完全是根据程序的功能说明来设计的;如用白盒法,则需要了解程序内部的结构,此时的测试用例是 根据程序的内部逻辑来设计的,如果想用白盒法发现程序中所有的错误,则至少必须使程序中每种可能的 路径都执行一次。实际上这是不可能的,即使测遍所有的路径,仍不一定能保证符合相应的功能要求。 标准答案为:黑盒 55. 软件工程的基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。 信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。 标准答案为:封装 56. 本题的考查点是C程序设计。根据程序写出运行结果。 该程序用的是switch多分支语句。它的一般形式为: switch(表达式) {case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n default :语句n+1 } 在执行过程中break语句的作用是跳出switch结构,即终止 switch语句的执行。 本题中,i从9开始判断循环,当i=9时,执行第一个case后的语句m++;n++;此时m=1,n=1,然后执行break,跳出循环;继续判断i=10时,执行default后的语句,k++;n++,此时k=1,n=2;再回去判断i=11时,仍然执行一次default后的语句,k=2,n=3,综上所述,m=1,n=3,k=2。注意输出函数中%d后有空格。 标准答案为:1 3 2 57. 本题的考查点是C程序设计。根据程序写出运行结果。 考察的主要知识点是不同类型数据间的转换与运算。本题所要实现的功能是把大写字母转换为小写字 母,在C中,小写字母的ASCII码值比大写字母的ASCII码值大32。 标准答案为:b 58. 本题的考查点是C程序设计。根据程序写出运行结果。 该程序的结构是if语句,if语句的结构有3种形式: 1、if(表达式) 语句; 2、if(表达式) 语句1;else 语句2; 3、if(表达式) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; …… else 语句n; 本题属于第二种类型,当表达式值为真时,执行语句1,为假时,执行语句2。因为c=a+b中a+b的值 为4,再赋给c,c=4,表达式为真,执行其后的语句,所以输出结果为yes。注意,在这里c=a+b中"="是赋值,而不是"=="等于。要区分开来。 标准答案为:yes 59. 本题的考查点是C程序设计。调试程序,把不完善的程序进行修改和补充,使之能得到正确的结果。 主函数里可以看到调用了一个max函数,函数在被调用之前需要先定义,所以要求填空的内容应该是 对函数进行定义的语句。由题目内容也可以看出此函数是double型的。 标准答案为:double max 或 extern double max 60. 本题的考查点是C程序设计。根据程序写出运行结果。 本题考察的是一个嵌套的循环,i=2,j=2时,输出一个„#?号,i=3,j=2时,输出一个„#?号,符合条件的还有i=3,j=3;i=4,j=2;i=4,j=3;i=4,j=4,共有六个符合条件的。 标准答案为:6 61. 本题的考查点是C程序设计。 考察的主要知识点是条件表达式。(p/3>0 ? p/10 :p%3)是一个条件表达式。条件表达式的一般形式为: 表达式1?表达式2:表达式3。条件表达式的执行顺序为:先求解表达式1,若为真则求解表达式2,此时表达式2的值就是整个条件表达式的值。若表达式2的的值为假,则求解表达式3,表达式3的值就是整个条件表达式的值。条件运算符的结合方向为“自右至左”。本题中p=30,p/3>0为真,所以求解 p/10 的值为3,即为整个表达式的值。 标准答案为:3 62. 本题的考查点是C程序设计。根据程序写出运行结果。 该程序考察的是数组的知识点,n是一个有5个元素,且元素值全为0的数组。程序运行过程时先进 行for循环,i=1时,n[1]=n[0]*2+1,此时n[1]=1;执行i++;i=2时,再进行循环,n[2]=n[1]*2+1,此时n[2]=3,再执行i++,此时i=3,继续循环,n[3]=n[2]*2+1,此时n[3]=7,然后i=4时,n[4]=n[3]*2+1,此时n[4]=15。循环结束。注意输出函数中%d后有空格。 标准答案为:1 3 7 15 63. 本题的考查点是C程序设计。根据程序写出运行结果。 程序开头定义了一个三行三列的数组。即: 1,2,3 4,5,6 7,8,9 进入循环,for(i=0;i<3;i++) for(j=i+1;j<3;j++) a[j][i]=0; 是把a[1][0],a[2][0],a[2][1]三个位置上的元素值赋为0,注意输出函数中%d后有空格。所以根据输出条件,程序最后的运行结果为: 1 2 3 0 5 6 0 0 9 标准答案为:1 2 3 0 5 6 0 0 9 或 1 2 3 0 5 6 0 0 9 或 1 2 3 0 5 6 0 0 9 64. 本题的考查点是C程序设计。调试程序,把不完善的程序进行修改和补充,使之能得到正确的结果。 程序中的move函数的作用是将输入数组中的元素从后面开始,两两交换,循环次数用n控制。输入3,abcde<回车>后主函数开始执行,其中n=3,s[50]={abcde},z=5,move(s,5),将实参带到形参中 temp=str[4],即把数组中最后一个元素存在temp中,也就是e。然后进行循环,i从4开始循环,str[4]等于原来的str[3],即d,依次类推。反复循环后,输入数字被反复颠倒。具体的循环过程如下:i=1时,调用move函数,循环5次后,输出eabcd;i=2时,调用move函数,循环5次后,输出deabc;i=3时,调用move函数,循环5次后,输出cdeab。 标准答案为:cdeab 65. 本题的考查点是C程序设计。根据程序写出运行结果。 本题定义了一个fun函数,其功能是:把输入值加10,主要是通过a+=b++来实现的,在这里,b先使用,后自增,所以a=a+b,返回a的值,本题将主函数中的c=20带入到fun函数中,a的值变为30,执行函数中的printf语句,输出30,此时函数调用结束,a值也已经释放,此时a=5,c=20,执行a+=c++,即a=a+c,所以此时a值为25。注意输出函数中%d后有空格。 标准答案为:30 25 66. 本题的考查点是C程序设计。根据程序写出运行结果。 考察的知识点主要是函数的调用。本题利用一个fun函数来完成题目要求的计算。程序中f起的作用是控制i*f的符号,看的出,偶数位都为负值,所以f的值为(-1)^(i+1),最后要求输出m的值,在输出中调用fun函数,并把实参10传给n。 标准答案为:-f 或 f*-1 或 -1*f 或 f*(-1) 或 (-1)*f 与 fun(10) 67. 本题的考查点是C程序设计。 程序重点考察的是函数。在这里定义了一个fun函数,并进行了递归调用,函数里面又调用自己。程序 在运行时,先把实参6传给形参。在if语句中判断条件符合后,又执行fun(x/2),即fun(3),同时输出x的值6,再判断if条件,仍然符合,再执行fun(x/2),即fun(1),同时输出x的值3,此时if条件不再成立了,输出1。而递归调用的输出是倒过来的。注意输出函数中%d后有空格。 故本题答案为1 3 6。 68. 本题的考查点是C程序设计。 malloc(sizeof(struct node))的作用是开辟一个长度为sizeof(struct node)的内存区。在一般系统中,malloc带回的是指向字符型数据的指针。"(struct node *)"的作用是使malloc返回的指针转换为指向struct node类型数据的指针。在这里如果*省略,就变成转换为struct node类型了,而不是指针类型了。 标准答案为:sizeof(struct node) 或 4 69. 本题的考查点是C程序设计。 根据程序可以看出要填空的内容就是:循环碰到数字时将字符串s中的数字字符放入d数组的条件。 标准答案为:s[i]>='0'&&s[i]<='9' 或 isdigit(s[i]) 或 s[i]>=48&&s[i]<=57 或 s[i]<='9'&&s[i]>='0' 或 '9'>=s[i]&& '0'<=s[i] 第三套 1. 关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将E-R图转换到关系模式时,实体与联系都可以表示成关系。 本题答案为B。 2. 面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方 法。面向对象方法从对象出发,发展出对象,类,消息,继承等概念。 本题答案为D。 3. 程序流程图(PFD)是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,其箭 头代表的是控制流。 本题答案为B。 i-1 根据二叉树的性质:二叉树第i(i?1)层上至多有2个结点。得到第5层的结点数最多是16。 本题答案为B。 4.5. 由程序调试的概念可知:程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确 切性质、原因和位置。其二,对程序进行修改,排除这个错误。所以程序调试的目的就是诊断和改正程序 中的错误。 本题答案为B。 6. 数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储 和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。 本题答案为C。 7. 在关系数据库中,用二维表来表示实体之间联系。 本题答案为D。 8. 总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软 件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析 数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的 功能。 本题答案为C。 9. 根据数据结构中各数据元素之间前后间关系的复杂程度,一般将数据结构分为两大类型:线性结构 与非线性结构。 如果一个非空的数据结构满足下列两个条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。 所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。 本题答案是A。 10. 作为一个算法,一般应具有以下几个基本特征。 1、可行性 2、确定性 3、有穷性 4、拥有足够的情报 本题答案为C。 11. swap1函数传递的是变量的地址,可以实现两个数的交换,而swap2函数中是传递的值,执行完swap2 后,c0,c1的值是互换了,但main函数中的b0和b1并未互换。也就是说由于“单向传送”的“值传递”方式, 形参值的改变无法传给实参。 故本题答案为B。 12. 用Turbo C运行C程序的步骤先将Turbo C装入磁盘。 1、调用Turbo C程序; 2、编辑源文件。根据需要修改输入或修改源程序; 3、编译源程序,编译时先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序, 即目标程序。 4、执行程序。 故本题答案为B。 13. 实数在C语言中又称浮点数。实数有两种表示形式: 1、十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123、.123、123.0、123.、0.0 都是十进制数形式。 2、指数形式。如123e3或123E3都代表123*10^3。但注意字母e(或E)之前必须有数字,且e后面指数 必须为整数,如e3、2.1e3.5、.e3、e等都不是合法的指数形式。 故本题答案为C。 14. 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操 作;此外,一个算法还具有下列五个重要特性: (1)有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有 穷时间内完成; (2)确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性,并且,在任何条件 下,算法只有唯一的一条执行路径,即对于相同的输入只能得出相同的输出; (3)可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次 来实现的; (4)输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合; (5)输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。 故本题答案为B。 15. C语言中不能给数组整体赋初值,所以选项C是不正确的。 故本题答案为C。 16. f2函数传递的是变量的地址,可以实现数据的交换,而f1函数中是传递的值,执行完f1后,c的值是变了,但main函数中的a的值并未变化。也就是说由于“单向传送”的“值传递”方式,形参值的改变无法传给实参。 故本题答案为A。 17. C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 ?中的-max不符合要求,'-'既不是字母、数字,也不是下划线; ?中的3COM第一个字符为数字,不合法; ?中的int和C语言的关键字重名,不合法。 故本题答案为A。 18. 两个整数相除结果为整数,如5/3的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为 实数,则结果是double型,因为所有实数都按double型进行运算。根据运算符优先级,先计算括号内的, 故选项B中(1/2)=0,整个表达式的值为0。 故本题答案为B。 19. if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。 在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。 故本题答案为D。 20. 除了可以直接使用C提供的标准类型名(如int、char、float、double、long等)和自己定义的结构体、共用体、指针、枚举类型外,还可以用typedef定义新的类型名来代替已有的类型名。如果在一个程 序中,一个整型变量用来计数,可以: typedef int COUNT; COUNT i,j; 即将变量i,j定义为COUNT类型,而COUNT等价于int,因此i,j是整型。但在程序中将i、j定为COUNT类型,可以使人更一目了然地知道它们是用于计数的。 可以定义结构体类型: typedef struct {int month; int day; int year; }DATE; 定义新类型名DATE,它代表上面定义的一个结构体类型。这时就可以用DATE定义变量: DATE birthday;(不要写成struct DATE birthday;) DATE *p;(p为指向此结构体类型数据的指针) 综上所述,结合本题可知,T是所定义的新的类型名,它代表上面定义的一个结构体类型。这时就可以 用T定义变量。 故本题答案为B。 21. 在一个函数的内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才 能使用它们,在此函数以外是不能使用这些变量的。本题中的int a=5;只在{int a=5;s+=f(&a);}内有效。 在函数之外定义的变量称为外部变量,外部变量是全局变量。全局变量可以为本文件中其它函数所共 用。它的有效范围为:从定义变量的位置开始到本源文件结束。本题的开头int a=2;即为全局变量,实际上起作用的也就是这个。 故本题答案为C。 22. “按位与”运算符(&) 参加运算的两个运算量,如果两个相应的位都为1,则该位的结果值为1,否则为0。 “按位或”运算符(|) 两个相应位中只要有一个为1,该位的结果为1。 4转换为二进制数为0100 3转换为二进制数为0011 4|3=0111即7,4&3=0000,即0。 故本题答案为A。 23. 题目中因为q->next=r,所以q->next->num即为r->num,为3,p->num=1,所以sum=3+1=4。 故本题答案为B。 24. fprintf函数、fscanf函数与printf函数、scanf函数作用相仿,都是格式化读写函数。只有一点不 同:fprintf和fcanf函数的读写对象不是终端而是磁盘文件。一般调用方式为: fprintf(文件指针,格式字符串,输出表列); fscanf(文件指针,格式字符串,输入表列); 本题中需要注意的是,从磁盘文件上读入数据时,格式字符串为"%d%d",而输出到文件d1.dat上的是数据123,在读入数据时将123默认为一个数字,即k为123,n默认为0。 故本题答案为B。 25. 正确的赋值语句中的左值不能为常量或表达式,右值不能为变量或表达式。 选项A中右值为表达式,明显是错误的; 选项B中,左值为表达式,明显是不对的。 选项D中,表达式x4=1+2=3,是先执行赋值表达式1+2=3,这本身就是错误的,1+2不是变量,不能赋值。 故本题答案为C。 26. y=012表示将八进制数12赋给变量y。d格式符,用来输出十进制整数。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。本题是将八进制数12也输出为十进制数,八进制数12转换为十进制数为10,所以输出结果为102,10。 故本题答案为C。 27. 函数fun的作用是返回较小的字符。 程序中将fun(a,b)及fun(b,c)的值作为新的参数,返回较小的值,结果为7。 故本题答案为D。 28. 指针变量中只能存放地址(指针),不要将一个整型量(或任何其它非地址类型的数据)赋给一个 指针变量。 有两个相关的运算符: (1)&:取地址运算符。 (2)*:指针运算符(或称“间接访问”运算符)。 故本题答案为D。 29. j=0时,i=0,不满足i>2,继续往下执行s+=b[0][0]=1; j=1时,i=1,不满足i>2,继续往下执行s=s+b[1][1]=1+2=3; j=2时,i=2,不满足i>2,继续往下执行s=s+b[2][2]=3+9=12; j=3时,i=3,满足i>2,执行i=3-j;此时j=3,i=0,继续往下执行s=s+b[0][3]=12+4=16; j=4时不满足条件,跳出循环。所以最后s值为16。 故本题答案为D。 30. int *p中p为指向整型数据的指针变量,*p为指针变量p所指向的变量。指针变量中只能存放地址(指 针),本题中p存放的是a[3]的地址,即p指向数组{4,5,6,7,8,9,10},b=p[5]=9。 故本题答案为D。 31. C语言中可以用字符串常量来使字符数组初始化。char a[]="abcdefg"中,不是用单个字符作为初值,而用一个字符串(注意字符串的两端是用双引号而不是单引号括起来的)作为初值。数组a的长度是8,而不是7,因为字符串常量的最后由系统加上一个'\0'。 在对全部数组元素赋初值时,可以不指定数组长度,系统会据数组元素自动定义。若被定义的数组长 度与提供初值的个数不相同,则数组长度不能省略。例如,想定义数组长度为10,就必须写成b[10]="abcdefg";只初始化前7个元素,后3个元素为0('\0')。 故本题答案为C。 32. ++是自增运算符,作用是使变量的值增加1,选项D中的d不是变量,而是一个标识符,它代表常量2,常量是不允许进行自增运算的。 故本题答案为D。 33. 当i=2时,将实参aa[2]的地址传递给形参,此时a[0]=a[1]=aa[3]=4,即aa[2]=4; 当i=1时,将实参aa[1]的地址传递给形参,此时a[0]=a[1]=aa[2]=4,即aa[1]=4; 当i=0时,将实参aa[0]的地址传递给形参,此时a[0]=a[1]=aa[1]=4,即aa[0]=4; 当i=-1时,不满足条件i>=0,跳出循环,程序执行后数组aa中的值为4,4,4,4,5,6,7,8,9,所以aa[0]=4。 故本题答案为A。 34. 条件表达式的一般形式为:表达式1?表达式2:表达式3 1、条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。 2、条件运算符优先于赋值运算符。 3、条件运算符的结合方向为“自右至左”。 综上所述,本题是先比较a,b,如果a>b成立则执行(b>c?1:0),如果b>c成立则结果为1,其它情况则为0。也就是说只有a>b与b>c同时成立时k值才能为1。 故本题答案为A。 35. sort函数的功能实际上是对数组中奇数位置上的数进行从大到小排序。排序后的结果应该为 9,2,7,4,5,6,3,8,1,10。 故本题答案为C。 36. char *p[10]定义指针数组p,它由10个指向字符型数据的指针元素组成。并对前5个数组元素进行了初始化。 p[4]="cd",strlen(str)是统计字符串str中字符的个数(不包括终止符'\0'),即"cd"的长度。 故本题答案为A。 37. 本题的考查点是指针数组作main函数的形参。 C语言规定,main()函数可以带有两个参数,第一个参数为一个整型变量,它表示执行文件在执行时带 的参数的个数,第二个参数为一个字符型指针数组,其中第一个数组元素指向程序名,第二个数组元素指 向命令行中的第1个参数,以后依此类推。 结合本题,不难看出本题是求第1,3个参数的长度之和。即4+2=6。 故本题答案为D。 38. 对函数的"定义"和"说明"不是一回事。"定义"是指对函数功能的确立,包括指定函数名,函数值类 型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。而"说明"则是对已定义的函数的返回值进行类型说明(或称"申明"),它只包括函数名、函数类型、以及一个空的括弧,不包括形参和函数体。 对被调函数进行说明的作用是告诉系统:在本函数中将要用到的某函数是XX类型。也就是说明该函数的返回值的类型,以便在主调函数中按此类型对函数值作相应的处理。 本题选项A中,函数参数列表中,不可以用一类型声明多个变量,即变量b没有被声明,所以出错。 故本题答案为A。 39. 通过for(i=1;i<10;i+=2)可知,i为从1开始的小于10的奇数,即1,3,5,7,9,i+1即为2,4,6,8,10。也就是自然数1到10中的偶数,s+=i+1就是累加这几个偶数。 故本题答案为D。 40. 对带参的宏定义是这样展开置换的:在程序中如果有带实参的宏,则按#define命令行中指定的字符串从左到右进行置换。如果串中包含宏中的形参,则将程序语句中相应的实参(可以是常量、变量或表 达式)代替形参,如果宏定义中的字符串中的字符不是参数字符,则保留。这样就成了置换的字符串。 本题中,展开后为i=4+4*4+4/2+2*2+2=4+16+2+4+2=28。 故本题答案为A。 41. scanf函数可以用来输入任何类型的多个数据。 scanf函数的一般形式为: scanf(格式控制,地址列表) “格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,“地址列表”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。 指针变量中只能存放地址(指针),&:取地址运算符。例如:&a为变量a的地址,*p为指针变量p所指向的变量。 综上所述,可以作为地址列表中的有pa和&a。 故本题答案为A。 42. 本题是找出打印*号的条件,从图中我们可以找到规律,第一行一个*,第二行3个,第三行5个……,也就是每行中*的个数恰好是行数的2倍减一个,由此不难得出,横线处应当填入2*i-1。 故本题答案为B。 43. if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之 一。本题中条件y>z为真,所以执行f(y,z)。 在函数调用开始时,y的值传送给v,z的值传送给w,执行完f函数后,v和w的值是互换了,但main函数中的y和z并未互换。也就是说由于“单向传送”的“值传递”方式,形参值的改变无法传给实参。 故本题答案为C。 44. switch语句的一般形式如下: switch(表达式) {case 常量表达式1:语句1; case 常量表达式2:语句2; . . . case 常量表达式n:语句n; default :语句n+1; } switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行。"case 常量表达式"只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。如果想在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行。可以用一个break语句来达到此目的。本题中没有使用break终止switch语句的执行,本题当k为0时,执行完case '0'后将继续执行case '1'。 故本题答案为C。 45. fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节,调用此函数后指针指向a[0],fread(&b,sizeof(int),1,fp)是从文件中读取sizeof(int)字节的数据到变量b中,也就是从文件中读取数据3到变量b中。 故本题答案为D。 46. f函数的的功能是通过递归调用实现数组中左右部分相应位置数据的交换。即数组中第一个元素与 最后一个调换位置,第二个与倒第二个调换位置,以此类推……。 故本题答案为A。 47. 本题实际上是按成员变量Score的值进行由小到大的排序,程序执行后p[5]中各元素分别为:{{"Penghua",20045,537},{"SunDan",20044,550},{"LiSiGuo",20042,580},{"WangYin",20043,680},{"Ya ngSan",20041,703}}。所以p[1]->Score=550,s[1].Score=580。 故本题答案为C。 48. gets(字符数组); 从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。函数调 用如 gets(str); 故本题答案为B。 49. 当x=0,y=5,z=3时,z-->0&&++x<5成立,执行y=y-1;此时,y=5-1=4,z=z-1=2,x=x+1=1。执行后条件仍然成立,继续执行y=y-1,此时y=y-1=3,z=1,x=2,以此类推,直至条件不成立。当z为0时条件不成立,执行后z为-1。 故本题答案为B。 50. 当i=2时,i%3为真,继续执行n++;此时n=1,!i为假,结束while循环,执行n++,此时n为2。 当i=3时,i%3=0,跳出循环。 当i=4时,i%3=1为真,继续执行n++,此时n为3,!i为假,结束while循环,继续往下执行n++,此时n为4。 故本题答案为D。 51. 面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个 基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。 52. 与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统 的各个组成部分以及各个成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用 哪些方法把哪些部分联系起来,才能解决好某个具体且有清楚定义的问题。 53. 软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是 指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进 行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是 指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性 能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的 进一步改进软件打下良好基础。 54. 常用的存储表示方法有4种,顺序存储、链式存储、索引存储、散列存储。其中,顺序存储方法是 把逻辑上相邻的结点存储在物理位置也相邻的存储单元中。 55. 两个实体集间的联系实际上是实体集间的函数关系,这种函数关系可以有3种,即一对一(1?1)的联系、一对多(1?N)或多对一(N?1)的联系和多对多(N?N)的联系。 56. ch1与ch2为字符型变量,输入12后,ch1为字符'1',ch2为字符'2',n1=ch1-'0'的作用是将字符转换为数值,即n1为整数1,同理,n2为1*10+2=12。所以程序执行后输出十进制整数12。 57. printf函数的一般格式为 printf(格式控制,输出表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串",它包括两种信息: 1、格式说明,由"%"和格式字符组成,如%d,%f等。它的作用是将输出的数据转换为指定的格式输出。 格式说明总是由"%"字符开始的。 2、普通字符,即需要原样输出的字符。 结果要求输出为: n1=10 n2=20 所以格式控制中需含有"n1="部分,又因为要求按两行输出,需含有回车符:\n。 58. 本题实际上是计算5*4*3*2*1*0的值,结果为0。 59. 因为n=0,所以!n为真,执行x-=1;即x=x-1,因为x=2,所以x=x-1=2-1=1; m=1,为真,执行x-=2;即x=x-2,由上得出x=1,所以x=x-2=1-2=-1; x=-1,为真,执行x-=3;即x=x-3,由上得出x=-1,所以x=x-3=-1-3=-4。 标准答案为:-4 60. strcmp()函数的功能是比较两个字符串的大小,因为a.name=Zhangsan,b.name=Shangxian,所以strcmp(a.name,b.name)>0为真,执行d=b;此时d.name=Shangxian,接着比较c.name与d.name,因为c.name=Anhua,所以strcmp(c.name,d.name)>0不成立,为假,不执行d=c;。所以d.name=Shangxian,d.sno=2002。 标准答案为:2002 Shangxian 61. 函数*ss()的作用是使字符串指针往后移strlen(s)/2个位置。代入实参可得,调用函数*ss后,指针指向e,所以输出为efgh。 62. 函数fun的功能是计算x的n次方,所以a的4次方的调用函数应当为fun(a,4),b的4次方的调用函数应当为fun(b,4),(a+b)的3次方的调用函数应当为fun((a+b),3),所以,实现m=a^4+b^4-(a+b)^3这一计算的函数调用语句为:fun(a,4)+fun(b,4)-fun((a+b),3);。 标准答案为:fun(a,4)+fun(b,4)-fun((a+b),3) 或 fun(b,4)+fun(a,4)-fun((a+b),3); 63. 要使sstrcpy()函数实现字符串复制,必须将t字符串中的每个字符逐个拷到s字符串中,所以可以使用*s=*t;s++;t++。或者可以写成*s++=*t++,本题只有一个空,可以填入*t++。 标准答案为:*t++ 64. f函数中变量x传递的是变量的地址,可以实现值的变换,而变量y是传递的值,执行完f后,y的值是变了,但main函数中的y并未变化。也就是说由于"单向传送"的"值传递"方式,形参值的改变无法传给实参。标准答案为:8 4 65. 本题考查的是递归调用。 aa[3]={1,2,3},n=3,满足条件n>1,执行a[0]+f(&a[1],n-1);后为1+f(&a[1],2),此时n=2,仍满足条件n>1,继续调用a[0]+f(&a[1],n-1);,因为此时传递的是a[1]的地址,这时的a[0]应当为原数组中的a[1],即为2,执行a[0]+f(&a[1],n-1);后为1+2+f(&a[1],1),因为第二次调用后数组中的元素为2,3, 标准答案为:6 所以此次的a[1]应当为3,调用后的a[0]为3。所以最后结果为1+2+3=6。 66. malloc(size)在内存的动态存储区中分配一个长度为size的连续空间。此函数的值(即"返回值")是一个指针,它的值是该分配域的起始地址。如果此函数未能成功地执行,则返回值为0。 本题中要求分配三个double型动态内存单元,所以size处应当为3*sizeof(double)。 标准答案为:3*sizeof(double) 或 sizeof(double)*3 或 24 67. printf函数的一般格式为 printf(格式控制,输出表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串"。 1、d格式符,用来输出十进制整数。 2、c格式符,用来输出一个字符。 已知字符A的ASCII码值为65,则字符B的ASCII码值为66,所以本题输出结果为:B 66 标准答案为:B 66 68. 各种数值型数据间进行混合运算时,不同类型的数据要先转换成同一类型,然后进行运算。如果一 个数据是float型或double型,则另一数据要先转换为double型,结果为double型。 标准答案为:a=1.0;b=1.0;s=1.0; 或 a=1.0;s=1.0; b=1.0; 或 b=1.0;s=1.0; a=1.0; 或 s=1.0; a=1.0;b=1.0; 69. 将矩阵转置就是将行列数互换,即第二行第三列的数与第三行第二列的数进行互换。所以第一 个空应当填入j<=i,第二空填入a[i][j]=a[j][i]。 标准答案为:j<=i 或 i>=j 与 a[i][j]=a[j] 第四套 1. 软件需求规格说明书(SRS,Software Requirement Specification)是需求分析阶段的最后成果,是软 件开发中的重要文档之一。它有以下几个方面的作用:? 便于用户、开发人员进行理解和交流;? 反映出用户问题的结构,可以作为软件开发工作的基础和依据;? 作为确认测试和验收的依据。 本题答案为D。 2. 计算机算法是指解题方案的准确而完整的描述,它有以下几个基本特征:可行性、确定性、有穷性 和拥有足够的情报。 本题答案为C。 3. 面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是,使用现实世界的概 念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软 件开发的绝大部分中都用应用领域的概念去思考。 本题答案为C。 4. 选择运算是一个一元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一个关 系。这个关系是由R中那些满足逻辑条件的元组所组成。如果关系的逻辑条件为f,则R满足f的选择运算可以写成:б(R)。 f 本题答案为C。 5. 所谓中序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问 根结点,最后遍历右子树;并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右 子树。 本题答案为B。 6. 外模式是用户的数据视图,也就是用户所见到的数据模式;全局数据视图的描述称为概念模式, 即数据库中全部数据的整体逻辑结构的描述;物理存储数据视图的描述称为内模式,即数据库在物理存储 方面的描述;存储模式即为内模式。 本题答案为A。 7. 头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头, 就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。 本题答案为A。 8. 层次模型是最早发展出来的数据库模型。它的基本结构是树形结构,这种结构方式在现实世界中很 普遍,如家族结构、行政组织机构,它们自顶向下、层次分明。 本题答案为B。 9. 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。它可以分为 软件定义、软件开发及软件运行维护三个阶段。 本题答案为A。 10. 软件的白盒测试方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构 及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。 本题答案为C。 11. 本题考的是不同类型数据间的混合运算。 当运算对象为不同类型时,数据的转换方向为int?unsigned?long?double,本题程序中的变量b为int型,先要转换为unsigned型,int型变量的数值范围为-32768~32767,最高位为符号位,而unsigned所表示的数的范围为0--65535,它的最高位为数值位。由于内存中是以补码形式存储数据的,所以整型的“-1”在内存中的表示为 16个1,最高位的“1”表示符号负,将它转换为unsigned类型,即将原符号位表示符号的 “1”看成数值,所以就得到16个数值位1,即65535。 故本题答案为B。 12. 本题考查的是变量的初始化。 选项A中,字符型变量a、b中间缺少逗号,如果对多个相同数据类型的变量赋初值,要用逗号隔开;若 把选项A看成是对几个变量赋同一个初值的话,显然'A'b不是变量名,所以选项A不正确;选项B中,如果对几个变量赋以同一个初值,不能写成int a=b=c=3;这种形式,而应写成:int a=3,b=3,c=3;,所以选项B也不正确;选项D中,执行b=&a相当于将地址转换成了浮点型,在C语言下提示出错信息“无效的类型转换”,所以选项D也不正确。 故本题答案为C。 13. 本题考查的是标识符的命名。 标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 故本题答案为D。 14. 此题考的是指向数组元素的指针。 p=s+1是指将s[1]的地址赋给p,循环的终止条件是ps2时,返回值>0;所以在此题中要使得s1所指串大于s2所指串,那么就必定使得strcmp(s1,s2)>0。 故本题答案为D。 32. 此题考的是指向数组元素的指针。 *p=x的作用是将x的首地址(即x[0]的地址)赋给指针变量p,那么程序段A当i=0时,*(p++)虽然是先执行括号内的表达式,但括号内表达的++是在p的后面,所以它要先执行p再加,即先取*p(x[0]),再使得p加1,为i=2时取下一个元素作准备。 选项C中因为*和++是处于同一优先级别,而结合方向为自右而左,因此*p++相当于*(p++),所以选项A和选项C都是可以输出6个元素的值的。 选项B,p表示x的首地址即x[0]的地址,p+i则表示x[i]的地址,那么*(p+i)就表示x[i]的值,所以选项C也是可以输出6个元素的值的;选项D由于(*p)++后面的++是使*p的值+1,又因为*p指的是x[0]的值,所以它不能实现地址的依次向下移动,每次循环只是x[0]的值在改变,而p的值并没有丝毫变化,所以它并不 能实现6个元素的输出。 故本题答案为D。 33. 本题考的是函数的返回值。 由于()的优先级高于*,所以void *fun()表示声明了一个函数,这个函数的返回值是指向无值型变量 的指针,所以本题答案为C。D答案的表达法相对应的函数说明应为void (*fun)()。 故本题答案为C。 34. 本题考的是建立动态链表。 从本题要求建立一个struct node类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填struct node *。再从本题的函数参数传递看,传递的是字符串link list的首地址给指针变量s,所以可以推断建立的链表一定与link list字符串有关,再看CreatList(char *s)函数中所定义的变量及其它语 句,可知h,p,q 是用与建立链表的,h表示头指针,p用于记录开辟的新结点,而q是用于将新结点与已建立链表相连的中间变量,且所建立链表各个结点的data依次存放的是link list字符串的各个字符,所以49空填的是*s。 故本题答案为A。 35. 此题考的是指向数组元素的指针变量。 本题首先要知道,C语言中二维数组元素排列的顺序是按行存放,即在内存中先顺序存放第一行的元素, 再存放第二行的元素。此题二维数组str[0]前5个元素为„'C','h','i','n','a','\0',第6个元素为'\0',后4个元素为空字符。紧接着内存单元存放的内容即从str[1][0]到str[1][9]为'B','e','i','j','i','n','g','\0',第八个元素为'\0',后两个元素为空字符,执行*p=str后,指针p就指向了二维数组str的首地址,所以p+10就指向了从首地址依次向后的第11个存储单元即字符B的地址,所以输出Beijing,故答案为B。如果此题将*p=str改为(*p)[10]=str;则p+10指的就是str的第10行,如果此时要想输出 Beijing,则必需将p+10改为p+1,因为(*p)[10]中的p是行指针,它是指向包含10个元素的一维数组,那么p+1就是加的一行了;而本题的p+1只是移动一个位置,因为此题的p只是一个指针变量。 故本题答案为B。 36. 本题考查的是输出格式。 printf()函数中,当格式转换说明符个数少于输出项个数时,多余的输出项不予输出。 所以本题答案为B。 37. 本题考的是函数的递归调用。 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用;在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数是间接调用,所以本题是函数的间接递归调 用。 故本题答案为B。 38. 此题考的是puts()函数。 其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。用puts函数输出的字符串中可以包含 转义字符,遇到转义字符,自动跳过去。例如本题中ps+4指的是'/'的地址,并不是'\n'的地址。所以puts(ps+4)输出的是/NO。 C规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以字符'\0'作为字符串结束标志。'\0'是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。所以本题执行*(ps+4)=0之后,再执行puts(s),就相当于输出字符串Yes后遇到结束标志。 故本题答案为B。 39. 此题考的是变量的作用域。 在一个函数内部定义的变量是局部变量,它只在本函数范围内有效,而全局变量的作用域为整个源程 序文件,即它可以为本文件中所有函数所共用,static类型的变量是静态变量,它的值在函数调用结束后 不会消失,而是保留原值,即占用存储单元不释放,由于全局变量的存储方式也是如此,即全局变量和说 明为static类型的变量的作用域是相同的,所以B答案这句话是错误的,A答案是正确的;C答案也是错误的,因为对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量),而对自动变 量来说,如果不赋初值则它的值是一个不确定的值,这是因为每次函数调用结束后存储单元已释放,下次 调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。 故本题答案选A。 40. 本题考的是位运算。 “^”是按位异或运算,当对应位上的二进制数值相同时,异或的结果为0,对应位上的二进制数值不同时, 异或的结果为1,因为c1,c2的值相同,所以异或的结果为0,所以A为正确答案。 “&”是按位与运算符(只有当所有对应位上的数都不相同时结果才为0,所以c1&c2的值并不可能为0)。 “~”是按位取反(由于十进制92转化成二进制并不是全为1,所以即使取反也不能得到全为0的答案)。 “|”是按位或运算(由于十进制92转化为二进制也不是全为0,所以按位或运算后也不会全为0)。 故本题正确答案为A。 41. 本题考的是结构体变量的引用。 引用形式有以下三种:?结构体变量. 成员名;?(*p).成员名;?p?成员名。所以A,B,C答案都是正确的。 故本题答案为D。 42. 本题考查的是排序算法。 for(i=0;i<3;i++) for (j=2;j>=i;j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[0]到x[3]中的数由大到小进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,2,4,6,0} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} 此段程序的作用是将数组x[4]到x[7]中的数由小到大进行排列,运行此段程序后x[]中的值变为x[]={7,5,3,1,0,2,4,6} 最后通过一个循环将X[]中的数依次输出。 故本题答案为A。 43. 本题考查的是表达式。 选项A中,abs()本身就是求绝对值的函数,所以是正确的;选项B是把|x-y|<10表示成了数学表达式中的-10<(x-y)<10,然后再用c语言规则表示出来的;选项D相当于把|x-y|<10两边同时平方,此处表达也是正确的;而选项C中!(x-y)<-10相当于(x-y)>=-10,!(y-x)>10相当于(x-y)>=-10。故选项C相当于(x-y)>=-10,所以错误。 故本题答案为C。 44. 本题考查的是if else配对的问题。 C语言规定:当if没有与它配对的其它else时,else总是与离自己前面最近的if配对,所以本题相当于 main() { int a=3,b=4,c=5,d=2; if(a>b) { if(b>c) printf("%d",d++ +1); else printf("%d",++d +1); } printf("%d\n",d); } 所以此题if(a>b)不成立,就直接执行printf("%d\n",d);,结果为2。 故本题答案为A。 45. 本题考查的是进制之间的转换。 用十--十六进制转换法,除16,由下而上取余法。 16 200 …… 8 ?????? 16 C …… C 故本题答案为C。 46. 本题考查的是指向数组元素的指针变量的定义与赋值。 定义了指针变量p,p存放的是指向内存单元的地址,不允许随便赋值,否则会破坏系统正常工作,故A,B,C答案都是错误的;而D答案中的a+2表示的是a[2]的地址,是可以赋给指针变量p的。 故本题答案为D。 47. 此题考的是指针变量。 存放变量地址的变量是指针变量,用来指向另一个变量,本题中p和q就是指针变量,它们分别存放了 变量a和b 的地址,所以程序在执行完p=&a;q=&b;时,*p和*q的值分别为7和8,由于下面的程序段r=p; p=q;q=r;的作用是用于交换指针变量p和q,即将它们所存放的a和b的地址进行了交换,也就是p指向了b,q指向了a,此时a、b的值并没有改变,所以输出的*p,*q的值为8,7,而a,b的值仍为7,8。 故本题答案为C。 48. 此题考查的是指针变量赋值。 本题将指针q赋值为空,即指向了空地址,而对空地址所对应的内容赋值*q=*(p+5)是会出错的,所以输出结果会提示Null pointer assignment。 所以此题答案为A。 49. 本题考查的是数组元素的引用。 如果定义一个指针指向二维数组的一行,则可以移动到下一行,这就是行指针。行指针的定义格式为: [存储类型] 数据类型(*指针)[n] 这里的n是一个整数,表示所指向的二维数组的列数。(*p)[5]中p是指向一个包含5个元素的一维数组,p的值就是该一维数组的首地址。所以当用行指针访问二维数组时,行指 针每增加1,就移动一行,即指向二维数组的下一行,例如此题中的p+i将指向数组的第i行。即选项A所指的意思是指向数组c的第1行,并不是引用c数组的元素;B答案中p+3是指向数组元素的第3行,*(p+3)是指第三行第零个元素的地址;选项C由对选项A,选项B的解释可知,它指的是第一行第3列元素的地址;选项D中p[0]+2是指第0行第2列元素的地址,再加个*就表示第0行第2列的元素,即c[0][2]。 故本题答案为D。 50. 本题考的是建立动态链表。 在本题第一空应该填struct node *,第二空填*s的基础上,执行q->next=p; q=(50) ,用于将原链表中的q->next指向新结点p,再将指针q后移,所以第三空应填p。 故本题答案为B。 51. 在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历 和后序遍历。 前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树, 最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。 中序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点, 最后遍历右子树;并且遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。 后序遍历指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历右子树,然后访问根结点, 最后遍历左子树;并且遍历左、右子树时,仍然先遍历右子树,然后访问根结点,最后遍历左子树。 标准答案为:中序 52. 软件的需求分析阶段的工作,可以概括为四个方面:需求获取、需求分析、编写需求规格说明书和 需求评审。 需求获取的目的是确定对目标系统的各方面需求。涉及到的主要任务是建立获取用户需求的方法框架, 并支持和监控需求获取的过程。 需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型。 编写需求规格说明书作为需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方 便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进度的依据。 需求评审是对需求分析阶段的工作进行的复审,验证需求文档的一致性、可行性、完整性和有效性。 标准答案为:需求获取 53. 数据字典是各类数据描述的集合,它通常包括5个部分,即数据项,是数据的最小单位;数据结构, 是若干数据项有意义的集合;数据流,可以是数据项,也可以是数据结构,表示某一处理过程的输入或输 出;数据存储,处理过程中存取的数据,常常是手工凭证、手工文档或计算机文件;处理过程。标准答案为:数据存储 54. 实体之间的对应关系称为联系,它反映现实世界事物之间的相互关联。两个实体间的联系可以归结 为三种类型:一对一联系表现为某一实体与另一实体一一对应相关联;一对多联系表现为某一实体与相关 多个实体相关联;多对多联系表现为多个实体与相关多个实体相联系。 标准答案为:一对多 或 1对多 或 一对n 或 1:N 或 1:n 或 1:n 或 1:N 或 一对m 或 1:M 或 1:m 或 1:m 或 1:N 55. 数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。标准答案为:存储结构 56. 本题考查的是数组的输入输出。 scanf的格式为:scanf(格式控制,地址表列),首先第一空要求填写的是地址,如果填a的话,虽然a也是地址,但a表示a[]的首地址,那么scanf输入的数永远是存放到a[0]中去了,所以填a不正确,应该填&a[i],这样才能保证将从键盘输入的数依次存入a[]中去。第二空要求填写的主要是求和功能,sum+=______相当于sum=sum+______,所以就应该是sum=sum+a[i]进行求和。标准答案为:&a[i] 与 a[i] 57. 本题考查的是格式字符的输出。 变量a、b、c分别为十进制、八进制、十六进制的25,格式字符d所代表的含义是,以带符号的十进 制形式输出整数(正数不输出符号),所以本题a=25则输出值为25;b=025转换为10进制:b=2*8+5=16+5=21,则输出的值为21;c=0x25转换为10进制:c=2*16+5=32+5=37,则输出的值为37,而且printf中三个%d之用的是空格,所以输出的几个数字之间也必须是空格。标准答案为:25 21 37 58. 本题考查的是while循环。 (1)当i=0时,满足条件:i<7,p[0]=11,11%2=1则j=0+11=11,i=1 (2)当i=1时,满足条件:i<7, p[1]=13,13%2=1 则,j=11+13=24,i=2 (3)当i=2时,循环结束:p[2]=14,14%2=0则循环结束 (4)循环结束后,d格式的printf输出j,则最后的输出结果为24。标准答案为:24 59. 本题考查的是函数参数的传送。 解题过程: (1)执行以i为变量的for语句 1)k=0 2)执行以j为变量的for语句 ?当j=1 ?比较a[0][0]和a[1][0]的大小,如果a[0][0]>a[1][0],则k=1;如果a[0][0]>a[1][0],则k=0 ?j=2所以结束循环 3)此时a[k][i]就代表第一列中最小的值,要累计所有列中的最小值的和,应该在第一空内填写 a[k][i],用变量s累加。 (2)SumColumMin是一个无返回值的函数,其中形式参数*sum是一个指针类型,所以第二空应该填写 *sum,用来将该指针变量指向s; (3)当主函数main调用SumColumMin时,需要两个实际参数,一个代表被操作的数组,一个为指向累计和 的指针变量,所以第三个空应该为 x,&s,分别代表已经被定义的数组x,和整型变量s的地址。 标准答案为:a[k][i] 与 *sum 与 x,&s 60. 本题考查的是循环的嵌套。 解题过程: (1)当i=0时执行while 1)i<4,i=1 2)因为i=1,所以不执行continue 3)j赋值0 4)执行do while ?s=0+a[1][0]=5,j=1,因为j<4,所以继续循环 ?s=5+a[1][1]=5+6=11,j=2,因为j<4,所以继续循环 ?s=11+a[1][2]=11+7=18,j=3,因为j<4,所以继续循环 ?s=18+a[1][3]=18+8,j=26,因为j=4,所以终止循环 (2)当i=1时,i<4执行while,i=2,因为i=2,所以执行continue,结束本次while循环 (3)当i=2时,i<4执行while,i=3 1)因为i=3,所以不执行continue 2)j赋值0 3)执行do while ?s=26 ?s=26+a[3][0]=26+15=41,j=1,因为j<4,所以继续循环 ?s=41+a[3][1]=41+16=57,j=2,因为j<4,所以继续循环 ?s=57+a[3][2]=57+17=74,j=3,因为j<4,所以继续循环 ?s=74+a[3][3]=74+18=92,j=4,因为j=4,所以终止循环 (4)i=3时,i<4执行while,i=4因为i=4,所以执行continue,结束本次循环 (5)当i=4时,i=4结束while循环 (6)结果输出s=92。 标准答案为:92 61. 本题考查的是宏定义。 解题过程: (1)首先计算出k的值 1)宏定义的M 带入K 2)表达式为:N+1+1*N+1/2 3)将宏定义的N带入K 4)表达式为:2+1+1*2+1/2 5)从左到右计算的结果为:3+2+0=5 (2)因为k=5所以循环4次。标准答案为:4 或 四 或 4次 或 四次 62. 本题考查的是格式输出函数printf()。 格式字符o所代表的含义是,以八进制无符号形式输出整数(不输出前导符0),因为整数9的八进 制为11。 63. 本题考查的是字符指针变量与字符数组。 解题过程: (1) 当k=0时,*(p1+0)='L',*(p2+0)='P',L!=P,所以没有输出 (2) 当k=1时,*(p1+1)='a',*(p2+1)='r',a!=r,所以没有输出 (3) 当k=2时,*(p1+2)='n',*(p2+2)='o',n!=o,所以没有输出 (4) 当k=3时,*(p1+3)='g',*(p2+3)='g',g==g,所以输出g (5) 当k=4时,*(p1+4)='u',*(p2+4)='r',u!=r,所以没有输出 (6) 当k=5时,*(p1+5)='a',*(p2+5)='a',a==a,所以输出a (7) 当k=6时,*(p1+6)='g',*(p2+6)='m',g!=m,所以没有输出 (8) 当k=7时,*(p1+7)='e',*(p2+7)='e',e==e,所以输出e (9) 当k=8时结束循环 (10) 输出结果为:gae。 64. 本题考查的是函数的调用。 解题过程: (1)f(x)的含义为x的平方加上1 (2)所以F(int x)的返回值应该为 x*x+1 (3)SunFun(10)的作用是将0到10之间所有的整数相加求和 (4)所以F()的形式参数为x。 65. 本题考查的是switch语句。 解题过程: (1)x=1则,switch(y) (2)因为y=0 所以:case 0:a++;break; 结果a=1 (3)继续switch(x),case 2;结果 a=2,b=1 (4)输出结果a=2,b=1 又因输出格式两个%d之间是空格,所以输出的两个数字之间也必为空格。标准答案为:2 1 66. 本题考查的是指向数组的指针。 解题过程: (1)指针p指向数组a (2)因为*p!='\0',所以执行while 1)i=0,i%2=0,所以a[0]='*',p++,i=1 2)i=1,i%2=1,所以p++,i=2 3)i=2,i%2=0,所以a[2]='*', p++,i=3 4)i=3,i%2=1,所以p++,i=4 5)i=4,i%2=0,所以a[4]='*', p++,i=5 6)i=5,i%2=1,所以p++,i=6 7)i=6,i%2=0,所以a[6]='*', p++,i=7 8)i=7,i%2=1,所以p++,i=8 9)i=8,i%2=0,所以a[8]='*', p++,i=9 10)i=9,p='\0',所以结束循环 (3)执行puts(a),输出处理过的a,结果为*2*4*6*8*。标准答案为:*2*4*6*8* 第五套 1. 本题考查的是顺序查找。 在进行顺序查找过程中,如果线性表中的第一个元素就是被查找元素,则只需做一次比较就查找成功, 查找效率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查找的元素根本就不在线性表中, 则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。所以对长度为n的线 性表进行顺序查找,在最坏情况下需要比较n次。 故本题答案为C。 2. 本题考查的是软件工程基本概念。 计算机软件是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。 软件具有以下特点:?软件是一种逻辑实体,而不是物理实体,具有抽象性;?软件的生产过程与硬件不 同,它没有明显的制作过程;?软件在运行、使用期间不存在磨损、老化问题;?软件的开发、运行对计 算机系统具有依赖性,受计算机系统的限制,这导致软件移植的问题;?软件复杂性高,成本昂贵;?软 件开发涉及诸多的社会因素。 故本题答案为D。 3. 本题考查的是栈和队列。 栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端 称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被 插入的元素。所以栈又称先进后出表(FILO-First In Last Out)。线性表可以顺序存储,也可以链式存储,而栈是一种线性表,也可以采用链式存储结构。 故本题答案为B。 4. 本题考查的是基本排序算法。 假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前 扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。 故本题答案为D。 5. 本题考查的是线性单链表、双向链表与循环链表的结构及其基本运算。 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的 逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 故本题答案为A。 6. 本题考查的是软件测试的目的。 关于软件测试的目的,Grenford J.Myers再《The Art of Software Testing》一书中给出了深刻的阐述:软件测试是为了发现错误而执行程序的过程;一个好的测试用例是指很可能找到迄今为止尚未发现的错误的 用例;一个成功的测试是发现了至今尚未发现的错误的测试。整体来说,软件测试的目的就是尽可能多地 发现程序中的错误。 故本题答案为C。 7. 本题考查的是软件工程基本概念。 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。 耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚 性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性 和提高模块内的内聚性,有利于提高模块的独立性。 故本题答案为B。 8. 本题考查的是数据模型。 层次模型是最早发展起来的数据库模型,它的基本结构是树形结构。 故本题答案为C。 9. 本题考查的是数据库系统的基本特点。 数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。也 就是说,数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。选项A、B、C三种说法都是错 误的。 故本题答案为D。 10. 本题考查的是数据结构的基本概念。 数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。 故本题答案为D。 11. 本题考查的是函数的调用。 本程序中函数f的作用是交换指针变量x和y所指向的存储单元的值。在主函数中,能过"p=a;q=&a[7];"将指针变量p指向了数组的第一个元素,指针变量q指向了数组的最后一个元素。通过"f(p,q)"调用函数f进行对称的数组元素的交换。当while循环4次(即p=q)后,a数组中各元素的值分别为87654321,所以程序输出的结果为8,7,6,5,4,3,2,1,。 故本题答案为D。 12. 本题考查的是算法的特性。 算法的特性中包括"有零个或多个输入"及"有一个或多个输出"这两个特性。输入是指执行算法时从外 界取得必要的信息。一个算法可以有两个或多个输入,但也可以没有输入;一个算法得到的结果就是算法 的输出,没有输出的算法是没有意义的,所以一个算法必须至少有一个输出。 故本题答案为C。 13. 本题考查的是算法的特性。 C语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。 注意:大写字母和小写字母被认为是两个不同的字符。所以选项A中Main与主函数名main不同。另外标识符名不能与关键字重名,所以选项D是非法的标识符。 故本题答案为D。 14. 本题考查的是常量表示法。 本题选项中的几个常量都属于指数形式的实型常量。此种类型的常量要求字母e(或E)之前必需有数字,且e后面的指数必须为整数,所以本题中选项B非法。 故本题答案为B。 15. 本题考查的是格式输出函数。 变量a,b定义为字符,执行语句"printf("%c,",b++);"后,输出字符变量b的值'2'(b++是在使用b之后,再将b的值加1),b自加,b的值变成字符3,执行"printf("%d\n",b-a);",即'3'-'1',故输出的值为数字2。 故本题答案为C。 16. 本题考查的是预处理概念。 通常,预处理命令位于源文件的开头,但不一定必须位于开头,也可以写在函数与函数之间;由于预 处理命令的末尾不加分号,所以,不能在一行上写多条预处理命令,否则,系统处理时就会把它当作一条 命令;宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。 故本题答案为D。 17. 本题考查的是位运算。 按位"与"运算符"&"的运算规则是:如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。因为本题中相与的两个值相等,即对应位上的二进制值相等,所以"与"的结果也即为其值本身。 故本题答案为C。 18. 本题考查的是格式输入函数。 如果在"格式控制"字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同 的字符。根据本题的数据输入形式"scanf("m=%dn=%dp=%d",&m,&n,&p);"说明在输入数据时,必须输入 "m="、"n="、"p="字符,且中间不能含有空格。 故本题答案为A。 19. 本题考查的是算术运算符。 如果算术运算符"/"中参与运算的变量都是整型变量,则"/"表示整除运算,"%"表示求余。本题中"a=d/10%9;"的值为25/10%9=2;"b=a&&(-1);"为2&&(-1)=1(注意:-1表示真,只有0才表示假),所以a,b的值分别为2,1。 故本题答案为B。 20. 本题考查的是条件判断语句。 ++在变量前和变量后的唯一区别就在于在执行"++变量"所在的语句时,是先将变量加1再执行它所在语 句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是"变量++",那就是先将变量值代入表达 式运算后再使变量加1;而"++变量"是先使变量加1,再把加1后的结果放入表达式进行运算。这两种情况, 在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。另外注意"&&"和"||"的"短路"运算。当运算符"&&"左边表达式的值为0时,则右边表达式就不再进行运算,整个表达式的值即为0;当运算符"||"左边表达式的值为非零时,则右边表达式就不再进行运算,整个表达式的值为1。 本题中执行"i++==1&&(++j==3||k++==3)"时,先执行i++==1,由于i++是先运算,后自加,所以表达式 "i++==1"的值为真,其值为1,然后执行括号中的表达式,由于++j是先自加,后运算,所以表达式 "++j==3" 的值为真,根据短路原理,右边的表达式"k++==3"不再进行运算,直接得出括中表达的值 为1,相与后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为2,3,3。 故本题的答案为D。 21. 本题考查的是指针变量对数组的引用。 本题通过"p=s"将指针变量p指向字符数组s,在第一次输出时,由于++和*为同一优先级,而结合方向 为自右向左,所以,"*p++"相于"*(p++)"。但又因为"++"在p的右侧,是"后加",所以,先对p的原值进行*运算,得到s[0]的值,然后使得p加1,p指向s[1],故在第二次输出的时候,输出的值为s[1]的值,所以输出结果为15。 故本题答案为A。 22. 本题考查的是链表。 本题定义了结构体类型的指针变量p,q,r,并各自有两个成员变量data和next,data用于存放数据,next用于存放下一个结点的地址,所以,要想将q所指结点从链表中删除,同时保持链表的连续,必需使p结点的next指向r,在四个选项中,只有选项D不能做到。 故本题答案为D。 23. 本题考查的是字符串函数的使用。 C语言中以'\0'作为字符串的结束符,且strlen()函数计算的是'\0'字符前的所有字符的个数。故本题 中strlen(a)应为2。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。sizeof()函数是计算变量或数组所分配到的内存空间的大小。所以本题的sizeof(a)为7。 故本题答案为C。 24. 本题考查的是结构体。 选项A中typedef的作用是声明一个新的类型名AA代替已有的结构体类型名struct aa,然后用AA定义了结构体类型的变量td; 选项B直接用结构体类型名struct aa定义了结构体类型的变量td; 选项C中的aa本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误的。 选项D中省去了结构体名,直接将td定义成了结构体变量。 故本题答案为C。 25. 本题考查的是共用体。 union是表示共用体的关键字,说明其内的成员a,b,c共占用同一个内存空间,所以data的每个成员起始地址都相同;共用体变量所占的内存长度等于最长的成员的长度,故变量data所占的内存字节数与成员c所占字节数相等;但由于各成员变量的类型不一致,所以它们的存储方式也不相同,整型占用2个字节的存储空间,double型占用8个字节的存储空间;另外data可以作为函数的实参,此时data作为一个地址进行地址传送;执行"data.a=5;printf("%f\n",data.c);"系统不能自动将整型变量转换为浮点型值,printf函数只是将内存中的数据以不同的类型输出,而不能将内存中的整型数据自动转换为等值的浮点数,故C是错误的。 故本题答案为C。 26. 本题考查的是数组定义。 C语言规定'\0'为字符串结束标志,系统对字符串常量自动加一个'\0'为结束符。所以"char a[]="xyz""的数组长度为4,而"b[]={'x','y','z'};"的数组长度为3(此处的数组长度与strlen函数所求的长度不同,此处的长 度是指数组占内存空间的大小),故a数组长度大于b数组长度。 故本题答案为C。 27. 本题考查的是条件表达式。 条件表达式的一般形式为:表达式1?表达式2:表达式3 条件运算符的执行顺序为:先求解表达式1,若非0则求解表达式2,此时表达式2的值就是整个条件表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就是整个条件表达式的值。 本题先求的是a=8不成立,判断a%2==1成立,a+=5则a=6,continue,执行下一次循环; a=6,b=2:a>=8不成立,判断a%2==1不成立,a-=3则a=3,执行下一次循环; a=3,b=3:a>=8不成立,判断a%2==1成立,a+=5则a=8,continue,执行下一次循环; a=8,b=4:a>=8成立,break,结束整个循环,输出b的值4。 故本题答案为B。 32. 本题考查的是数组名作函数的实参。 用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组, 这样两个数组就共同占用同一段内存单元。本题通过"prt(a,5);"将数组a的首地址传递给了指针变量m,使指针变量m指向数组a的首地址,那么,对指针变量所指向的存储单元的内容的改变就是对数组a中的元素的改变。题中函数ptr的作用是将指针变量m所指向的存储单元中的元素值各加上1,故数组a中的值也随之变化,所以输出的数组元素的值为2,3,4,5,6,。 故本题答案为B。 33. 本题考查的是结构体。 typedef关键字用于声明一个新的类型名代替已有的类型名。 本题中如果没有用typedef进行定义的话,则struct ST为结构体类型,现在用typedef定义后,相当于用NEW代表了struct ST这一结构体类型,故NEW为结构体类型。 故本题答案为C。 本题考查的是变量的自加运算。 ++在变量前和变量后的唯一区别就在于在执行"++变量"所在的语句时,是先将变量加1再执行它所在语34.句还是先执行它所在的语句再使变量加1,当++在变量后时,也就是"变量++",那就是先将变量值代入表达式运算后再使变量加1;而"++变量"是先使变量加1,再把加1后的结果放入表达式进行运算。这两种情况, 在执行完变量所在的语句后,它们在内存中的值都是加过1之后的值了。 本题执行"printf("%d%d",m++,++n);"后,输出的是m和n+1的值1235,接着使m+1=13,执行"printf("%d%d\n",n++,++m);"输出n和m+1的值3514。 故本题答案为A。 35. 本题考查的是数组。 本程序的作用是求除p[0]外的其它奇数的和。 本题执行过程如下: i=0:i++<7的值为真,p[i]%2即为p[1]%2,值为0,不执行j+=p[i];,所以j=0; i=1:i++<7的值为真,p[i]%2即为p[2]%2,值为1,执行j+=p[i];,所以j=13; i=2:i++<7的值为真,p[i]%2即为p[3]%2,值为0,不执行j+=p[i];,所以j=13; i=3:i++<7的值为真,p[i]%2即为p[4]%2,值为1,执行j+=p[i];,所以j=13+15=28; i=4:i++<7的值为真,p[i]%2即为p[5]%2,值为0,不执行j+=p[i];,所以j=28; i=5:i++<7的值为真,p[i]%2即为p[6]%2,值为1,执行j+=p[i];,所以j=28+17=45; i=6:i++<7的值为真,p[i]%2即为p[7]%2,值为0,不执行j+=p[i];,所以j=45; i=7:i++<7的值为假,结束循环,输出j的值45。 故本题答案为45。 36. 本题考查的是文件操作函数。 fseek函数用于改变文件的位置指针。调用的形式为:fseek(文件类型指针,位移量,起始点),起始点用0、1、2代替。0(SEEK_SET):文件开始;1(SEEK_CUR):文件当前位置;2(SEEK_END):文件末尾。"位移量"是指以"起始点"为基点,向前移动的字节数。 本题中"fseek(fp,0L,SEEK_SET)"的作用是将位置指针移到文件头。与此作用相同的函数是 "rewind(fp)":使位置指针重新返回文件的开头。 feof的作用是判断文件是否已指到了文件末尾,如果已指到文件的末尾,则返回值为非零,否则为零。 ftell的作用是得到流式文件中的当前位置,用相对于文件开头的位移量来表示。 fgets的作用是指定文件读入一个字符串。 故本题答案为D。 37. 本题考查的是数组的定义。 选项A中定义的是5个数组元素,但赋值的时候赋的是6个元素,所以出错;选项C不符合数组定义形式,数组名后应加上"[]";选项D的类型说明符错误,如果用char定义就对了;选项B中的0,1,2,3,4,5分别表示对应字符的ASCII码,所以选项B是正确的。 故本题答案为B。 38. 本题考查的是字符串的赋值。 选项A定义了一个字符型的指针变量sp,则*sp存储的是第一个字符,而选项A中给它赋的是字符串,所以错误,如果将"*sp="right!""改成"sp="right!""就对了,即把字符串"right"的首地址赋给了指针变量sp; 选项B定义了一个字符型的数组s[10],则s表示代表数组的首地址,而题中给它赋的是字符串,所以错 误,要对字符数组赋值,只能在定义数组时,对其进行初始化; 选项C定义了一个字符型的数组s[10],再通过*s给数组元素赋初值,在此,由于*s指的是数组的第一个 元素,而题中给它赋的是字符串,所以错误。 故本题答案为D。 39. 本题考查的是函数的调用。 函数f1的功能是返回两个数中比较大的值,f2的功能是返回两个数中比较小的值。具体执行过程如下: 1、f1(a,b):即f1(4,3),返回值为4; 2、f1(c,d):即f1(5,2),返回值为5; 3、e=f2(f1(a,b),f1(c,d)):即f2(4,5),返回值为4; 4、f2(a,b):即f2(4,3),返回值为3; 5、f2(c,d):即f2(5,2),返回值为2; 6、f=f1(f2(a,b),f2(c,d)):即f1(3,2),返回值为3; 7、g=a+b+c+d-e-f;:即g=7。 故本题答案为A。 40. 本题考查的是指针变量对数组元素的引用。 本题定义了数组a,C语言规定数组变量名代表数组的首地址,也是就是第0号元素的地址。所以for循环中循环变量p的初值即为a[0]的地址,故输出的"*p"的值为a[0]的值。当进行p++后,指针变量p又指向了a[1],再次输出"*p"即为a[1]的值,经过10次循环,将a数组中的值全部输出,即为1,2,3,4,5,6,7,8,9,0,。 故本题答案为A。 41. 本题考查的是循环的嵌套。 本题程序为二重循环,外循环控制输出数据的行数,内循环控制输出数据的列数。从本题输出的形式 来看,程序要求输出的是4行4列。外层循环"for(i=0;i<4;i++)"控制输出4行,内层的第一个for循环控制每行的空格数的输出,第二个for循环用于控制每行数字的输出,由于每一行的数字个数比前一行少1,所以内层的第二个for循环每一次循环的次数需要递减1,那么j的初始必呈递增形式,又因为第一行输出的是4个数,所以空格中填i是正确的。 故本题答案为B。 42. 本题考查的是字符串运算。 字符串的比较规则是对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的 字符或遇到'\0'为止,若全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的 比较结果为准,该函数就实现了此功能,如果两字符串相等,则返回0,否则返回第一个不等字符串的ASCII码的差值。 故本题答案为D。 43. 本题考查的是宏定义。 return语句用于从被调函数带回一个函数值。void关键字表示"无类型",即不需要从被调函数中带回函 数值,所以不需要return语句,故编译时出错。 故本题答案为D。 44. 本题考查的是指针变量对数组的引用。 在C语言中,函数的参数传递方式采用按值传递(即使是指针变量也是按值传递的),因此不能通过 调用函数的方式来改变指针本身的值,只能改变指针所指变量的值,故在point函数中对指针p+=3的运算不能对调用它的函数起作用,所以本题的输出应该是"a"。 故本题答案为A。 45. 本题考查的是函数的调用。 题中char (*f1)()=fun定义了f1是一个指向函数fun的指针变量,即将函数fun的入口地址赋给了指针变量f1,这时f1和fun都指向函数的开头,调用*f1就是调用函数fun,注意,此时用函数指针变量调用函数时, 只需将(*f1)代替函数名fun即可,再在(*f1)之后的括弧中根据需要写上实参,所以"(*f1)(a);"就相当于"fun(a)",故选项A是正确的。 故本题答案为A。 46. 本题考查的是循环的嵌套。 本题定义了一个二维数组a,并通过a[3][2]={0}将数组中的各个元素初始化为0,又定义了一个指针变 量ptr,它用于指向包含2个元素的一维数组,在第一个for循环中,语句"ptr=a+i;"用于将指针变量ptr指向第i行的数组元素,通过两次循环,分别给二维数组a的第0行的第1个元素和第1行的第1个元素赋了值1和2,即a[0][0]=1,a[1][0]=2。 故本题答案为B。 47. 本题考查的是格式输入函数。 scanf函数中的"格式控制"后面应当是地址,而不是变量名。对于变量,通过地址运算符"&"求出内存中的地址;对于数组c[10],数组名c即为数组在内存中的地址。 故本题答案为B。 48. 本题考查的是常量表示法。 C语言的常量分为整型常量、实型常量和字符型常量。本题中只包含整型常量和实型常量。选项B从形式上来看属于整型常量中的八进制整数,以0开头,但只能用0-7表示八进制数,所以选项B不合法;选项C和D从形式上看属于实型常量,用指数形式表示的实型常量需要注意一点:e(或E)之前必需有数字,且e后面的指数必须为整数,所以选项C和D中e后面为小数和没有数字的形式都不合法;选项A属于实型常量中的十进制小数形式的表示法,是合法的。 故本题答案为A。 49. 本题考查的是数组的概念。 在C语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出"下标越界"的错误提示。 故本题答案为C。 50. 本题考查的是算法的特性。 有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的五大特性。 故本题答案为B。 51. 本题考查的是算法的基本概念。 所谓算法是指解题方案的准确而完整的描述。标准答案为:算法 52. 本题考查的是面向对象方法的基本概念。 将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类 是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。标准答案为:对象 53. 本题考查的是二叉树的定义及其存储结构。 二叉树的性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。本题中度为2的结点数为18,故叶子结点数为18+1=19个。标准答案为:19 54. 本题考查的是关系数据模型。 在关系数据库中,把数据表示成二维表,而一个二维表就是一个关系。标准答案为:关系 或 一个关系 55. 本题考查的是软件的调试。 程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中 的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿整 个软件生命期,调试主要再开发阶段。标准答案为:程序调试 56. 本题考查的是格式控制符。 在scanf格式控制符中,如果在%后有一个"*"附加说明符,表示跳过它指定的列数。本题中 ""%d%*d%d""表示将10赋给i,%*d表示读入整数但不赋给任何变量,然后再读入整数30赋给变量j,那么变量k并没有重新赋值,仍为初始值0。所以输出的结果为10300。 57. 本题考查的是宏定义。 带参数的宏定义是按#define命令行中指定的字符串从左到右进行转换。本题中替换的式子为: 4*i+j*i+j+1,代入i,j的值得81。 58. 本题考查的是条件判断语句。 本题需特别注意的是";"的问题,不能把"t=a;a=c;c=t;"误认为是第一个if的语句,实际上,只有"t=a;"才是第一个if的语句。所以判断第一个if语句的表达式不成立后,执行的是"a=c;c=t;",此时a=5,c=99。然后判断第二个if语句的条件表达式,表达式成立,执行后面的三个语句,让a,b的值进行交换,最后输出a、b、c分别为4、5和 99。 59. 本题考查的是字符运算。 将一个字符常量放到一个字符变量中,实际上就是将该字符的相应的ASCII代码放到存储单元中。C语言使字符型数据和整型数据之间可以通用。所以本题中执行"a=getchar();"后,a的值B,在内存中的表现形式为ASCII码66;执行"scanf("%d",&b);"后,b在内存中的表现形式为33,然后经过"a=a-'A'+'0';b=b*2;"运算,得出a的值为字符'1',b的值为ASCII码66,最后以字符型输出为1 B。 60. 本题考查的是结构体类型的数组的应用。 本题定义了一个具有5个元素的结构体类型的数组m,并同时将结构体类型的指针变量p指向了数组的第一个元素,q指向了数组的最后一个元素,所以,当第一次循环,即i=0的时候,p->k相当于m[0].k,q->k相当于m[4].k,具体程序执行过程如下: p=m,q=m+4,条件p!=q成立,执行p->k=++i;,由于是"前加",所以m[0].k=1,执行p++后p=m+1;执行q->k=i++;,由于是"后加",所以m[4].k=1,然后使得i加上1,即i=2,q--后,q=m+3; p=m+1,q=m+3,条件p!=q成立,执行p->k=++i; ,由于是"前加",所以i=3,m[0].k=3,执行p++后p=m+2; 执行q->k=i++; ,由于是"后加",所以m[4].k=3,i=4,q--后,q=m+2; p=m+2,q=m+2,条件p!=q不成立,则执行q->k=i;即m[2].k=4;故输出的值为13431。 61. 本题考查的是回文的算法。 本题的要求是判断从键盘输入的字符串是否是回文,但在主函数中并没有完成此功能的代码,故第三 空应该填调用函数huiwen代码,即huiwen(str)。 由于回文字符串是指正向与反向拼写都一样,所以对于一个字符串,如果正向顺序与反向顺序对应位 置上的字符一样,则此字符串即为回文。在函数huiwen中,已用"p1=str"使得p1指向字符串str的第一个字符的地址,则第一空语句的功能应该是使得p2指向字符串str的最后一个字符串的地址,故填 p1+(strlen(str)-1),由于p1与str指向的是同一个地址,所以,第一空也可以填str+(strlen(str)-1)。 在进行for循环时,如果p1所指向的字符与p2指向的字符不相同,则说明,字符串str不是回文,则用t=1标记,并退出循环,执行下面的if语句,由于题中要求如果是回文,则返回"yes!",否则,返回"no!"。故当t=0的时候,说明字符串str为回文,所以第二空应填t==0 或 !(t!=0) 或 t!=1 或 !t。 62. 本题考查的是循环的嵌套。 本题定义了二维数组a存放3行4列的数组元素,定义了一维数组b用于存放每行的最大数。在函数fun中,通过二重for循环求每行的最大的数据,外层for循环用于控制行数,内层for循环用于控制列数,当外层循环 执行一次时,内层循环则循环4次,并求出了这一行的最大值x,最后将每一行求出的最大值x赋给存放最大值的数组br,故本题答案为br[i] 或 *(br+i)。 63. 本题考查的是函数的调用。 用变量作为函数的实参时,属单向传递,即"值传送"方式,此种函数参数的传递方式只能由实参传给 形参,不能由形参传回来给实参。本题中,变量a,b的值传递给了函数swap的形参x,y,并在函数中对x,y的值进行了交换,所以函数swap中输出的x,y的值为4,3,但此时实参a,b的值并没有随形参x,y的改变而改变,所以在主函数中输出的a,b的值为3,4。标准答案为:4 3 3 4 64. 本题考查的是数组的应用。 函数fun的作用是将s所指的字符串中从第p+3到第k+1个字符向前移动两个位置。本题程序是将数组s中从第6个元素开始的值分别向前移动两个位置。在执行fun函数时,p的值是3,k的值是7,所以,具体执行"for(i=p;i1)"的运算顺序为先算括号?算术运算符?关系运算符?逻辑运算符。其中 a%b=10,a/b=0,所以a%b<1的值为0,a/b>1值也是0,故整个表达式的结果为0,所以输出的a,b,c的值为10 20 0。 66. 本题考查的是变量的作用域。 用static关键字声明的变量称为静态局部变量。静态局部变量是在编译时赋初值的,只赋一次值,在程 序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。本题中 变量c被定义为静态变量,当再次调用fun函数时,不会对变量c再次赋初值3,变量c的值为上次调用fun函数时所保留下来的值,具体在程序运行过程中的体现如下: i=0:fun(5),a=5,b=0,c=3,执行b++,c++,此时,b=1,c=4,则a+b+c=10,返回主函数输出010; i=1:fun(5),a=5,b=0,c=4,执行b++,c++,此时,b=1,c=5,则a+b+c=11,返回主函数输出111; i=2:fun(5),a=5,b=0,c=5,执行b++,c++,此时,b=1,c=6,则a+b+c=12,返回主函数输出212; i=3:for循环的条件不成立,结束循环,所以最终输出的形式为:010111212。 67. 本题考查的是字符运算。 本题程序的作用是通过for循环将0-9这10个数字从前向后,同时也从后向前依次输出,具体执行过程如 下: c1='0',c2='9':c1
/
本文档为【结构化程序设计方法的四条原则是1自顶向下】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索