前几天查了成绩,笔试2.0 机考3.0 差强人意吧..
10.6.6
______________________________________________________________________________________________
本来周六就已经考完了,结果考完当天晚上就感冒得歪歪的,呵呵,不知道是不是像很多YY小说中写的那样,原本就不堪重负的身体终于因为完成了某项伟大的使命而轰然倒下,汗一个。可能最准确的说明来自于大佬:“你的考前神经过敏衰弱无聊…3K字…超级无敌综合症怎么还没好?!”
说实话,我当初报这个考试的时候,首先是听了信管的一个老师的建议开始学习C++,后来又发现自己实在是太懒散了,一个如此漫长的学期下来也才看了三百来页,所以为了有点动力逼自己看书,就报了名。不过效果也达到了,起码寒假的最后的几天我还是看了不少书的(相对之前而言啦= =!!)。
近几年的笔试题(包括我刚刚结束的这次)中,代码量都非常大,像10年3月的这次我感觉(考试的时候没有仔细算)大概占了一半以上。所以准备学习的过程中,一定不要光看看概念定义还有语法什么的就完了,一定要多些在电脑上进行实际操作,这样才能帮助你快速而且准确的阅读代码。C++是一门实践性的语言,光看其实是很难真正学懂的。代码题应尽可能做到不丢分,因为这部分只要语法懂了,并细心一点基本上都是可以拿下的。此外就是概念题,往往是“以下选项错误/正确的是?”这类,结合排除法也要尽可能的多拿分。最后就是那30分公共基础知识,因为没有真正系统学过,如果时间不是很充裕的话建议选择性放弃,即撇除自己不理解的概念部分,把理解的部分拿到就可以了。
至于上机考,电脑会在题库中抽取一套题给你,也就是说你和你旁边的人所做的题是不一样的。如果RP好的话像我抽到的题刚好很熟悉10分钟就可以交卷了,RP不好像我旁边那个我交卷的时候他连改错题都没做完。还有,上机考一定要注意的一点是,当你打开VC++6.0的时候,它是一个全空的初始界面,一定要学会怎样打开项目窗口并找到main.cpp文件(可能有些还不止一个main.cpp,还需要查看自定义的头文件,我的那道设计题就是这样的)。对VC++6.0的操作也是大纲中规定的考点之一,复习的时候还是先把VS撇开先。要不就像我考试的课室某位仁兄一样,一个劲的跟监考老师反映是程序坏了,没有代码窗口,这就杯具了(这个时候监考老师只是重复:“没错,就是这样的,这就是它要考你的啊!”)。
错误纠正题都不会很难。因为可以利用编译器帮助你快速而且准确的判断错误。题目会告诉你该程序要达成的目的是什么(一般是在屏幕上输出一些字符串和数据),然后会在出错的语句前标注//erro+编号如//erro01。我做这类题的时候一般首先关注main函数,先弄清楚程序中的哪几个语句进行了cout的操作,然后再找出数据中有什么地方出现了算法的错误或者遗漏了什么语句(例如,在#include<iostream>的情况下缺少了using namespace std;或者在调用cout的时候没有std::cout)。而语法错误完全可以由编译器来进行查找。
程序补充题,题目一般是设计一个类,并定义了一系列成员,并实现一些功能。代码中有很多//found+编号后跟着_______下划线。做题的时候把下划线删去并填写代码就可以了。这些题一般我都不会完全通读整个程序代码,因为大部分时候题目对每个下划线的说明都不需要你理解整个程序就可以CODING了。当然,考试的时候还是检查一下比较好。
以上这两种题总计有60分,而且大都比较简单,拿下以后就和格啦。注意答题的时候,不要添加行或者删除行,也不要改动其它代码。机考的评卷是电脑阅卷为主,人工阅卷为辅的所以如果你移动了代码可能就会被误判0分。
最后是程序设计题,40分。一般是要求你设计一个函数,该函数已经有固定的参数了(由题目给出),你要做的就是书写函数的具体内容,并实现题目要求的功能(例如将某数据项插入一个链表中)。这题考察的是综合运用能力,所以可能很难(以前从来没见过,而且一时间也没有好的思路),也可能很简单(刚好做过,或者很快找到解题思路)。这类题没什么太多技巧,只能是平时多练一些。
考试的报名方式非常随机,因为报名海报往往贴出来几个小时后就会被覆盖,所以如果没能在深大找到报名的联系人,可以直接联系深大成教学院报名。每年的报名时间一般在6月和12月,考试时间在9月底和4月初,每年的时间都会有些出入,可以在http://www.51test.net/ncre/guangdong/这里查到。
囧,啰啰嗦嗦也3K字了,不知道我这些个人的感受到底有没有用。下面是我个人印象比较深的考点和易错点,单纯要背的概念什么的我就不重复了,可能个人的情况不同,没兴趣的同学可以跳过:
数据结构与算法
(1)二叉树的遍历,包括前序、后序、中序。
以下图为例,作出它的中序遍历。根节点是A,先遍历其左子树,对于T来说,它没有左子树,它本身是一个“相对的”根结点,所以中序遍历的第一个字母是T。再遍历它的右子树。对于B而言,先遍历左子树,也就是Z。而此时B是其“相对的”根节点,所以第三个字母是Z,第四个字母是B。此时A的左子树已经遍历完了,A是根结点所以有一半的中序遍历:TZBA。继续遍历右子树,根据相同的原则可以得出后半部分的结果是:CTXP。所以整个遍历结果为TZBACTXP。不知道我讲清楚没有,实在不理解的话再上网查查资料吧。
(2)叶子结点、度、深度等二叉树中的变量之间的关系和计算。
(3)冒泡排序法、选择排序法、插入排序法、堆排序法的原理及最坏情况。
(4)链表、队列及其中关于指针的运用。
(5)算法的复杂度。
(6)二分查找法及其最坏情况。
程序设计基础和软件工程
(1)注意区分“对象”的特性和“面向对象的设计思想”的特性。
(2)软件工程中最花时间的是软件的维护。
(3)结构化分析的常用工具和过程设计的常用工具(注意区分)。
(4)软件测试与软件调试的区别与作用。
数据库
这部分我觉得基本上是背的……
(1)注意把ER模型和结构/过程化分析的常用工具区分开来。
(2)投影是针对列的操作,选择是针对行的操作。
(3)数据库的发展特点:共享越来越多,冗余越来越小。
(1)熟悉VC++6.0的操作,一定要熟悉!最好要重新安装一次,因为考试的时候用的VC++是处于初始状态的,连文件列表都没有。
(2)变量的命名,数字不能作为开头,保留字不能作为变量名。
(3)各种转义符的作用。
(4)指针类型的定义及调用。
(5)自增符与自减符一定要弄清楚。
(6)switch语句中小心每个分支后是否有break;。
(7)因为0或者NULL(其实NULL在ACII码的编号就是0)在逻辑上可以理解成false。所以在条件语句中可以用来作为条件。例如while(i--){……},当i = 0 的时候循环就终止了。这个功能很实用,在后面我会再举一个例子。
(8)do……while语句和while语句的循环次数是不同的,前者是先运行一次再判断,后者是先判断在运行。
(9)goto语句是限制使用,但不是说绝对不可以用;continue的意思是结束当前次的循环(continue后面的语句都不执行了),进入下一轮循环;break的意思是跳出当前循环(即不再循环了)。
(10)数组的变量名其实是指向第一个元素的指针,反之同。
(12)虽然C++中增加了专用的字符串类型string,但不知道为什么总是考字符数组形式(char*str)的字符串,所以字符串函数strlen,strcpy,streat,strcmp,strstr要清楚(这些函数的调用需要头文件<cstring>)
(13)指针。可能是C++中最让人头晕的东西,没什么好方法,多写代码吧。)
(14)类的默认成员默认继承都是私有的。
(15)类模板和多态性的问题一定要弄清楚。
(16)重载运算符中哪些是可以重载的,哪些不行;哪些必须用友元函数,哪些不用。
(17)构造函数和析构函数的调用顺序(先基类的构造函数,如果有多个基类则按顺序调用。然后是成员对象的构造函数,然后才是本身的构造函数;析构函数的顺序相反,即先构造后析构,后构造先析构)。
(18)值参、形参的使用;指针变量在函数中的调用。
(19)虚函数的作用,纯虚函数的写法,什么是抽象类。
(20)输入/输出流的相关概念及参数。(ios::binary是二进制、cin是一个对象等)
纠错题和填空题一般都比较简单,主要是弄清楚什么时候调用的是什么对象(函数)就可以了。程序设计题是难点,一般考察的是字符串的运用或者链表的运用。我把一些比较常用的算法列出来,基本上考的都是这几种算法的组合。当然,理解思路是最重要的,具体操作方式要灵活处理。
(1)获取字符串数组的长度。
{
typeName temp;
}
(4)将int类型的数num转化为二进制的字符串str。
除二取余法,还需要将所得结果逆序,详细代码我就不写了。
(5)查找数组中的某个元素key,已知长度len。
for ( int i = 0 ; i < len ; i ++ )
{
}
(6)链表中的操作
orderedNodeType.h
template<class Type>
class orderedLinkedListType : public linkedListType<Type>
{
public:
};
/ranNodeType.h
template<class Type>
struct ranNodeType
{
};
template<class Type>
class linkedListType
{
public:
protected :
private:
};
/orderNodeType.cpp
template<class Type>
bool orderedLinkedListType<Type>::search(const Type& searchItem) const //查找固定项目
{
}
template<class Type>
void orderedLinkedListType<Type>::insertNode(const Type& newItem) const//将项目插在有序列表(从大到小)的适当位置(保证插入后列表仍然有序)
{
}
template<class Type>
void orderedLinkedListType<Type>::deleteNode ( const Type& deleteItem)//删除一个节点
{
}
//ranNodeType.cpp
template<class Type>
bool linkedListType<Type>::isEmpty () const
{
}
template<class Type>
linkedListType<Type>::linkedListType()//构造函数
{
}
template<class Type>
void linkedListType<Type>::destroyList()
{
}
template<class Type>
void linkedListType<Type>::initializeList ()
{
}
template<class Type>
void linkedListType<Type>::print ( ostream & outdata ) const
{
}
template<class Type>
int linkedListType<Type>::length () const
{
}
template<class Type>
Type linkedListType<Type>::front () const
{
}
template<class Type>
Type linkedListType<Type>::back () const
{
}
template<class Type>
bool linkedListType<Type>::search ( const Type& searchItem ) const //查找列表中的给定项
{
}
template<class Type>
void linkedListType<Type>::insertFirst ( const Type& newItem )
{
}
template<class Type>
void linkedListType<Type>::insertLast (const Type& newItem ) //在末尾插入一个新项
{
}
template<class Type>
void linkedListType<Type>::deleteNode (const Type& deleteItem ) //删除一项
{
}
template<class Type>
const linkedListType<Type> & linkedListType<Type>::operator =
{
}
template<class Type>
linkedListType<Type>::linkedListType( const linkedListType <Type>& otherList)//复制构造函数
{
}
template<class Type>
linkedListType<Type>::~linkedListType() //析构函数
{
}
//private:
template<class Type>
void linkedListType<Type>::copyList(const linkedListType<Type>& otherList)
{
}
啰嗦完了,总之,希望我能考过吧。。。TEL哥保佑!
10.03.31