C++笔试上机.docx

上传人:b****4 文档编号:4410654 上传时间:2022-12-01 格式:DOCX 页数:14 大小:30.01KB
下载 相关 举报
C++笔试上机.docx_第1页
第1页 / 共14页
C++笔试上机.docx_第2页
第2页 / 共14页
C++笔试上机.docx_第3页
第3页 / 共14页
C++笔试上机.docx_第4页
第4页 / 共14页
C++笔试上机.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C++笔试上机.docx

《C++笔试上机.docx》由会员分享,可在线阅读,更多相关《C++笔试上机.docx(14页珍藏版)》请在冰豆网上搜索。

C++笔试上机.docx

C++笔试上机

第一章

算法的基本特征:

可行性、确定性、有穷性、拥有足够的情报。

在一般的计算机系统中,基本的运算和操作有以下4类:

算术运算、逻辑运算、关系运算和数据传输。

算法的控制结构:

算法中各操作之间的执行顺序称为算法的控制结构。

描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。

一个算法一般都可以用顺序、选择、循环3种基本控制结构组合而成。

算法复杂度包括算法的时间复杂度和算法的空间复杂度,算法的时间复杂度是指执行算法所需要的计量工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。

数据结构作为计算机的一门学科,主要研究和讨论以下三个方面:

(1)数据集合中个数据元素之间所固定的逻辑关系,即数据的逻辑结构;

(2)在对数据元素进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;

(3)对各种数据结构进行的运算。

数据的逻辑结构在计算机存储空间中的存放形式成为数据的存储结构(也称数据的物理结构)。

一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。

而采用不同的存储结构,其数据处理的效率是不同的,因此,在进行数据处理时,选择合适的存储结构是很重要的。

根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:

线性结构与非线性结构。

如果一个非空的数据结构满足下列两个条件:

(1)有且只有一个根结点;

(2)每一个结点最多有一个前件,也最多有一个后件。

则称该数据结构为线性结构。

线性结构又称线性表。

在一个线性结构中插入或删除任何一个结点后还应是线性结构。

如果一个数据结构不是线性结构,则称之为非线性结构。

栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。

当表中没有元素时称为空栈。

栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。

栈是按照"先进后出"或"后进先出"的原则组织数据的。

在链式存储方式中,要求每个结点由两部分组成:

一部分用于存放数据元素值,称为数据域,另一部分用于存放指针,称为指针域。

其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。

链式存储方式既可用于表示线性结构,也可用于表示非线性结构。

栈也是线性表,也可以采用链式存储结构

注:

满二叉树也是完全二叉树,而完全二叉树一般不是满二叉树。

树(tree)是一种简单的非线性结构。

在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点。

每一个结点可以有多个后件,它们称为该结点的子结点。

没有后件的结点称为叶子结点。

在树结构中,一个结点所拥有的后件个数称为该结点的度。

叶子结点的度为0。

在树中,所有结点中的最大的度称为树的度。

二叉树是一种很有用的非线性结构,具有以下两个特点:

①非空二叉树只有一个根结点;

②每一个结点最多有两棵子树,且分别称为该结点的左子树和右子树。

由以上特点可以看出,在二叉树中,每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树,而树结构中的每一个结点的度可以是任意的。

另外,二叉树中的每个结点的子树被明显地分为左子树和右子树。

在二叉树中,一个结点可以只有左子树而没有右子树,也可以只有右子树而没有左子树。

当一个结点既没有左子树也没有右子树时,该结点即为叶子结点。

在二叉树的遍历中,无论是前序遍历,中序遍历还是后序遍历,二叉树的叶子结点的先后顺序都是不变的。

在遍历二叉树的过程中,一般先遍历左子树,再遍历右子树。

在先左后右的原则下,根据访问根结点的次序,二叉树的遍历分为三类:

前序遍历、中序遍历和后序遍历。

(1)前序遍历:

先访问根结点、然后遍历左子树,最后遍历右子树;并且,在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

(2)中序遍历:

先遍历左子树、然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。

(3)后序遍历:

先遍历左子树、然后遍历右子树,最后访问根结点;并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。

在下列两种情况下也只能采用顺序查找:

(1)如果线性表为无序表,则不管是顺序存储结构还是链式存储结构,只能用顺序查找。

(2)即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。

二分法只适用于顺序存储的,按非递减排列的有序表,对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次。

排序技术:

冒泡排序法和快速排序法都属于交换类排序法。

在最坏的情况下,冒泡排序需要比较次数为n(n-1)/2。

冒泡排序法的平均执行时间是O(n2),而快速排序法的平均执行时间是O(nlog2n)。

第二章程序设计基础

对象具有如下特征:

标识惟一性、分类性、多态性、封装性、模块独立性。

对象根据所接收的消息而做出动作,同样的消息被不同的对象接收时可导致完全不同的行动,该现象称为多态性。

第三章软件工程基础

软件指的是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。

可见,软件由两部分组成:

(1)机器可执行的程序和数据;

(2)机器不可执行的,与软件开发、运行、维护、使用等有关的文档。

软件的特点:

根据应用目标的不同,软件可分应用软件、系统软件和支撑软件(或工具软件)。

软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。

一般包括可行性分析研究与需求分析、设计、实现、测试、交付使用以及维护等活动。

在程序结构中,各模块的内聚性越强,则耦合性越弱。

软件设计应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。

衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。

内聚性是信息隐蔽和局部化概念的自然扩展。

一个模块的内聚性越强则该模块的模块独立性越强。

一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。

详细设计的任务是为软件结构图中的每个模块确定实现算法和局部数据结构,用某种选定的表达表示工具算法和数据结构的细节。

软件测试过程分4个步骤,即单元测试、集成测试、验收测试和系统测试。

单元测试是对软件设计的最小单位--模块(程序单元)进行正确性检验测试。

单元测试的技术可以采用静态分析和动态测试。

集成测试是测试和组装软件的过程,主要目的是发现与接口有关的错误,主要依据是概要设计说明书。

集成测试所设计的内容包括:

软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试等。

集成测试时将模块组装成程序,通常采用两种方式:

非增量方式组装和增量方式组装。

确认测试的任务是验证软件的功能和性能,以及其他特性是否满足了需求规格说明中确定的各种需求,包括软件配置是否完全、正确。

确认测试的实施首先运用黑盒测试方法,对软件进行有效性测试,即验证被测软件是否满足需求规格说明确认的标准。

系统测试是通过测试确认软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、支撑软件、数据和人员等其他系统元素组合在一起,在实际运行(使用)环境下对计算机系统进行一系列的集成测试和确认测试。

系统测试的具体实施一般包括:

功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试等。

在对程序进行了成功的测试之后将进入程序调试(通常称Debug,即排错)。

程序的调试任务是诊断和改正程序中的错误。

调试主要在开发阶段进行。

第四章数据库设计基础

数据是数据库中存储的基本对象,描述事物的符号记录。

数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。

数据库管理系统(DBMS,DatabaseManagementSystem)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操作、数据维护、控制及保护和数据服务等。

数据库管理系统是数据系统的核心。

数据库系统的3级模式:

(1)概念模式也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。

一个数据库只有一个概念模式。

(2)外模式,外模式也称子模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导而出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

一个概念模式可以有若干个外模式。

(3)内模式,内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。

数据库系统的两级映射:

两级映射保证了数据库系统中数据的独立性。

(1)概念模式到内模式的映射。

该映射给出了概念模式中数据的全局逻辑结构到数据的物理存储结构间的对应关系;

(2)外模式到概念模式的映射。

概念模式是一个全局模式而外模式是用户的局部模式。

一个概念模式中可以定义多个外模式,而每个外模式是概念模式的一个基本视图。

数据模型用来抽象、表示和处理现实世界中的数据和信息。

分为两个阶段:

把现实世界中的客观对象抽象为概念模型;把概念模型转换为某一DBMS支持的数据模型。

数据模型所描述的内容有3个部分,它们是数据结构、数据操作与数据约束。

数据模型包括:

E-R模型、层次模型、关系模型

数据库设计中有两种方法,面向数据的方法和面向过程的方法:

面向数据的方法是以信息需求为主,兼顾处理需求;面向过程的方法是以处理需求为主,兼顾信息需求。

由于数据在系统中稳定性高,数据已成为系统的核心,因此面向数据的设计方法已成为主流。

数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。

它们是:

需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段和进一步修改阶段。

在数据库设计中采用前4个阶段。

 

C++上机笔记

delete语句是最常考的知识点,用于释放指针变量,其一般形式为:

delete[]+要释放的指针。

Array类中的virtualvoidadd(inte)函数,看到这个函数我们能得到如下信息:

1)有关键字virtual,说明该函数是虚函数,在Array类的派生类里肯定会有对add函数的定义。

2)有关键字void,说明此函数没有返回值。

3)add的意思是添加,它的形参是inte,那么我们大概可以猜到该函数的功能是把整型数值e添加到数组a中。

在类外定义构造函数时要使用类名和作用域,即MyVector:

:

MyVector。

构造函数前不加void或其它任何类型名,直接使用MyClass(inti)即可。

主要考查成员函数的调用,因为value是私有成员,所以不能被类外函数直接调用,而且value()的用法也是错误的,可以使用成员函数obj.GetValue()得到value的值。

考查构造函数一般都会考查到形参,应注意联系上下文。

类的成员函数在类外定义时要在函数名前面加上:

返回值类型+类名+作用域(:

:

)。

构造函数前不能添加任何类型,如void,int,double等。

类的成员函数定义时要加上前缀,即类的名字。

私有成员只能被类的成员函数调用。

在构造函数时,要先给动态数组分配空间,使用new语句。

在析构函数时,要将分配的空间释放,使用delete语句。

Const1用于限定变量的值不发生改变,涉及const函数时,就要先看函数体内部成员的值是否改变,如果改变了就会出现错误。

当题目要求输出类的私有成员的值时,首先脑中就要有一条:

类外函数不能调用私有成员,只能通过成员函数调用。

题目要求声明纯虚函数Show,所以首先看Base1类的派生类Derived类中Show函数的定义:

voidShow()

{cout<<_p<

这时就可以得出答案了,只要在void前加上virtual,在()后加上=0;,再把函数体去掉就可以了,即virtualvoidShow()=0;。

特别注意纯虚函数和虚函数的区别,虚函数不能用添加=0。

字符串赋值语句strcpy(_p,s).

主要考查的是派生类的构造函数,定义派生类的构造函数时要使用成员列表对基类初始化。

基类一:

Base1类,没有构造函数,不需要使用参数。

基类二:

Base2类,有构造函数:

Base2(constchar*s),因此需要成员列表:

Derived(constchar*s):

Base2(s)。

常用的排序算法有冒泡排序,选择排序,插入排序,堆排序等.

排序算法有多种,其基本思想是相同的,即先遍历,后比较,再交换。

不同之处在于它们遍历数列的顺序不同。

考生可选择一至两种算法重点理解。

主要考查考生对友元函数的掌握,友元函数的定义与声明要一致,先看该友元函数的声明部分:

friendvoidIncrement(MyClass&f);,返回类型为void,函数参数为MyClass&f,再比较出错的语句:

voidIncrement(){f._i++;},错误在于该函数没有参数,应把MyClass&f填在括号内。

主要考查友元函数的调用,友元函数并不属于类,因此调用友元函数时不需要添加类名及作用域,只需要像调用普通函数一样即可。

类的常量数据成员初始化必须使用成员初始化列表进行,否则必然出错。

友元函数与普通函数的区别在于,友元函数可以通过对象名调用类的全部成员,包括私有成员。

所有函数的声明和定义必须一致,包括函数返回值,参数类型的数,有无const关键字。

本题考查的是考生对冒泡排序的算法掌握,要记住冒泡排序的思想是两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素,直到全部满足顺序要求为止。

6.主要考查考生对私有成员和公有成员的掌握,先看改错语句的下条一语句:

Member(intval):

value(val){},该语句是一条构造函数,因此我们可以得出此处为公有成员,因为构造函数不可能是私有成员。

主要考查考生对虚函数的掌握,该语句所在的函数是普通函数fun,题目要求从为fun函数添加形参。

从函数体中可以知道形参名为cs,那么形参的类型是什么呢?

就是抽象类CharShape,因此要使用CharShape&cs才可以实现题目要求输出的内容

7.主要考查的是MyClass类,其中涉及构造函数,成员函数,私有成员,以及类的指针。

const用于限定变量的值,不发生改变,const函数的定义要谨慎,确保函数体内没有成员值的改变。

私有成员只能声明不能初始化,只有通过构造函数或者成员函数来初始化。

主要考查考生对析构函数的掌握,题目要求释放两个指针成员所指向的动态空间。

释放动态空间应使用delete语句,因为要释放两个指针,使用语句:

delete[]idcardno,name;实现。

注意当释放多个指针时,中间用逗号隔开。

考查动态数组分配空间,题目要求指针name指向申请到的足够容纳字符串new_name的空间。

使用strlen(new_name)得到字符串new_name的长度,但是这里要注意加1。

主要考查考生对派生类构造函数的掌握,题目要求利用参数表中前几个参数对基类Person进行初始化。

派生类的构造函数要使用成员列表初始化法对基类初始化,因此为constchordept,doablesal,;Person(id_card_no,P_name,is_male)。

8.主要考查的是模板类MyClass,其中涉及构造函数,成员函数,const变量。

const变量必须进行初始化,因为const确定了该变量Size不能改变。

模板类的成员在定义时要加上模板符号"",调用时也注意添加相应的类型。

主要考查考生对模板类构造函数的调用的理解,从上一条语句intintArray[Size]={1,2,3,4}中可以知道intArray为int型,所以定义obj时要使用,即MyClassobj(intArray)。

对于模板类,不论是其成员函数,还是构造函数,调用时都要使用标识符""。

主要考查考生对动态分配的掌握,在填空前可以参考title的初始化,即先分配空间,再使用strcpy函数拷贝字符串,因此这里使用writer=newchar[strlen(the_writer)+1];语句给miter分配空间,注意分配空间的大小应为字符串长度加1。

9.主要考查考生对析构函数的掌握,要填写的内容是析构函数的函数体,因为有两个动态数组title和writer,所以要释放两个动态数组空间,使用语句~Book(){delete[]title,writer;}来完成。

主要考查考生对派生类的构造函数的掌握,派生类必须使用成员初始化列表法来先给基类进行初始化。

主要考查考生对成员函数的掌握,这里要定义show函数的函数头(函数体以前的部分)。

由主函数main中show函数的使用情况show(s)和show(tri)可知,s是Shape类,tri是Triangle类,因为Triangle是Shape类的派生类,所以可知show函数的参数是Shape类型,无返回值,得出语句voidshow(Shape&shape)。

10.主要考查考生对构造函数的掌握,构造函数的成员列表初始化法要注意它的格式,即成员列表前要有标识符':

',因此语句改为:

Book(constchar*theTitle,intpages):

num_pages(pages)。

主要考查考生对const函数的掌握,在函数体中可以看到有语句cur_page=page_no,即cur_page的值发生改变,因此该函数不是const函数。

主要考查考生对派生类的构造函数的掌握,派生类的构造函数要使用成员列表初始法先对基类进行初始化。

Room(the_room_no,the_length,the_width)

主要考查考生对运算符重载的掌握,题目要求重载赋值运算符函数。

要重载的运算符是"=",即赋值的意思。

提示:

可以调用辅助函数setString。

该函数的功能是拷贝形参的字符串到sPtr中,因此,首先复制length,其次通过函数setString复制sPtr,最后按要求返回*this;。

11.考查构造函数参数默认值,题目要求输出语句:

Thevalueis10,从主函数中

可以看出,obj1并没有初始化,但是obj1调用Print()函数时它的值为10,由此可知构造函数的形参有默认值,且值为10,因此得出语句MyClass(inti=10)。

主要考查考生对拷贝构造函数的掌握,拷贝构造函数的形参都为引用,同时为了不改变形参的值要加上const,因此得出语句MyClass(constMyClass&p)。

主要考查考生对析构函数的掌握,析构函数和构造函数一样,前面不能添加任何类型,需把void去掉。

主要考查考生对派生类的构造函数的掌握,派生类的构造函数使用成员列表初始化法,先对基类初始化。

主要考查考生对动态数组的掌握,val是double型指针,要给val赋值,就要先给它分配空间,应使用new来完成。

主要考查考生对动态数组的掌握,val是double型指针,要给val赋值,就要先给它分配空间,应使用new来完成。

12.主要考查的是Dog类,其中涉及enum,静态私有成员,const函数,构造函数。

strcpy函数用来复制字符串,而对double、int等类型直接用'='赋值即可。

定义同一类型的变量时,几个变量之间用','分开。

主要考查的是DataList类,其中涉及动态数组,构造函数,析构函数,const函数,排序算法。

Sort函数是一个排序函数,对于排序可以使用的方法很多,考生只需要使用自己最擅长的方法即可,题目并没有指定考生使用哪种方法。

13.本题考查Line类,其中涉及构造函数,this指针,const函数。

判断一个函数是否为const函数,就要观察该函数体内是否有变量值发生改变,若有变量值发生改变,则该函数不是const函数。

一般构造函数不能用const,因为要给私有成员赋初始值。

类的私有成员不能被类外函数调用,只能通过成员函数调用。

主要考查考生对this指针的掌握,由函数length的声明doublelength(Line),可知length函数的形参是Line类,在voidshow()const函数里,this指针指向的是当前Line类,因此,可以用*this表示当前Line类。

this是指向自身对象的指针,它是一个指针类型,因此要使用标识符'*'来取出它所指向的值。

主要考查考生对成员函数的掌握,length函数是类外函数,不能直接调用类的私有成员,因此要通过成员函数取得对应的值。

主要考查考生对成员函数的掌握,题目要求显示最后一个元素。

前面有纯虚函数virtualdoublegetElement(inti)const=0,因此可以直接调用getElement函数来取得最后一个元素,注意最后一个元素位置是Length()-1而不是Length()。

主要考查SortedList类,其中涉及动态数组,构造函数,析构函数,const函数,排序算法。

插入算法有两个步骤,一是比较,即要插入的元素在哪里;二是插入元素,后面的元素要逐个后移一位,为新加入的元素空出位置。

14.本题考查CDeepCopy类,其中涉及动态数组,构造函数,析构函数,运算符重载。

运算符重载要先把类的定义弄清,其次要理解被重载的运算符的含义。

主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。

要重载的运算符是'=',该类的成员是动态数组p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。

15.主要考查考生对友元函数的掌握,友元函数并不属于类,因此定义时前面不用加类名和作用域符号。

友元函数考查较少,但是也是很关键的,友元函数并不属于类,只是可以使用类的私有成员而已,因此定义的时候就当作普通函数处理即可。

16.本题考查Door类,其中涉及bool型私有成员及成员函数,构造函数,其他成员函数。

在构造函数中this指针指向的是当前类,因此当参数名和要赋值的成员名称一样时,使用this指针来区别。

主要考查考生对this指针的掌握,在构造函数中this指针指向的是当前类,因此要给num赋值使用语句this->num=num完成。

主要考查考生对const函数的掌握,lock函数体中存在语句locked=true,即有参数发生改变,因此不能用const。

主要考查考生对构造函数的掌握,由函数体内strcpy(this->name,name),可知要使用成员列表初始化的成员为is_male和birth_date。

主要考查考生对strcmp函数的掌握,先看程序对该函数功能要求:

利用strcmp()函数比较姓名,返回一个正数、0或负数,分别表示大于、等于、小于。

因为strcmp()函数的功能是比较字符串大小,因此可以直接被return语句调用:

returnstrcmp(name,p.getName());。

strcmp函数、strcpy函数、strlen函数等是经常会用到的系统函数,要了解各个函数的功能:

stralt(连接)、strcly(复制)、strump(比较)、strlen(求长度)。

主要考查考生对有序数组的掌握,题目要求成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。

遍历数组elem中的元素,找出和形参element相等的元素,并将其删除掉,每删除一个元素,即将

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1