2007_全国_C++特别点.doc_第1页
2007_全国_C++特别点.doc_第2页
2007_全国_C++特别点.doc_第3页
2007_全国_C++特别点.doc_第4页
2007_全国_C++特别点.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

参考文档“2007年全国计算机等级考试二级C+大纲.doc”考试方式:笔试上机上机考试软件环境:操作系统: 中文版WINDOWS 2000。 应用软件: Microsoft Visual C+ 6.0。考试时间:笔试时间 90分钟上机考试时间定为90分钟。自动计时,提前5分钟自动报警来提醒考生应及时存盘,考试时间用完,系统将自动锁定计算机,考生将不能再继续考试。考试题型及分值:笔试满分100分,其中含公共基础知识部分的30分。 (选择题35个,填空题15个,每题2分)上机满分为100分,共有三种类型考题。1、基本操作题(30分)2、简单应用题(40分)3、综合应用题(30分)一般程序的书写方式:#include /兼容C语言的头文件 #include #include class Cint x,y; / 私有数据成员通常写在最上面 public:C( ) . .;void main ( ) . 全国等考中,一般程序的书写方式1:#include / C+自身的头文件,没有.h扩展名#include #include / 对应string.h#include / 对应math.h#include / 对应ctype.husing namespace std; / 使用C+的标准命名空间class Cpublic:C( ) . .private: / 私有成员通常写在最下面 int x,y;int main( ) / 返回值类型为int.return 0;全国等考中,一般程序的书写方式2:#include#include #include #include / 若省略 using namespace std;int main( ) /返回值类型为intint x;std:cinx; /则标准命名空间中的对象std:coutxstd:endl; /必须用std:限定return 0; /有return语句命名空间的概念:是一个由程序设计者命名的内存区域。程序设计可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各自的命名空间中,从而与其他全局实体分隔开来。例如,可以定义命名空间如下:namespace ns1int a=6;double b=5.0;此时,编写程序可以有两种方式。方式1:#includenamespace ns1int a=6;double b=5.0;int main( )coutns1:a,ns1:bn;return 0;方式2:#includenamespace ns1 int a=6;double b=5.0;using namespace ns1;int main( )couta,bn;return 0;注意:C+库中的所有标识符都是在一个名为std的命名空间中定义的。std是standard的所写,表示这是存放标准库的有关内容的命名空间。笔试部分要点:(例子)下列程序的输出结果是_A)42, 42 B)23, 23 C)23, 42 D)42, 23 #include void fun(int& x, int y) int t = x; x = y; y = t; int main( ) int a2 = 23, 42; fun(a1, a0); std:cout a0 , a1 , 等)全国的,考的多,一般34题,甚至5题。请认真阅读教材相关内容。(例子)若以非成员函数形式,为类Bounce重载 “!”运算符,其操作结果为一bool型数据,则该运算符重载函数的原型是 _ 。答案:bool operator !(Bounce)若用成员函数实现,在类体内定义,函数型是:bool operator !( ); 若在类体外定义成员函数,则原型是:bool Bounce : operator !( ); 需补充:下标运算符 的重载。阅读教材例子重载下标运算符( )较难跳过编译器对数组下标是否越界,不作语法检查,如下述程序编译能通过,但运行出错:#includeint main( )int a10;a100=5;couta100endl; return 0; 改进办法为:定义一个数组类,对下标检查。#include #include class Array public: Array(int len) Length = len; Buff = new intLength; /Buff是一维数组的指针 Array( ) delete Buff; int GetLength() return Length; int & operator (int i); private: int Length; int *Buff; ; int & Array:operator (int i) if( i=0 & iLength) return Buffi; else coutnIndex out of range. Index=iendl; exit(2); void main( ) Array a(5); for(int i=0; i5; i+) /若改成 iai; /编译器将 ai 解释成 a.operator (i) for(i=0; i5; i+) ai += 3; for(i=0; i5; i+) cout ai ,; /若本行改为 cout a.operator (i) ,; 亦可。coutendl; (例子)多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但 运算符只能作为类的_函数重载。答案:成员【备注】也只能作为成员函数重载l 堆栈操作 同学自行阅读(例子)有如下程序#include using namespace std; class Stack public:Stack(unsigned n=10): size(n) rep_=new intsize; top=0; Stack(Stack &s):size(s.size)rep_=new intsize;for(int i=0; isize; i+) rep_i=s.rep_i;top = s.top;Stack( ) delete rep_; void push(int a)rep_top=a; top+; int pop( ) -top; return rep_top; bool isEmpty( ) const return top=0; private:int *rep_;unsigned size,top;int main( )Stack s1;for(int i=1; i5; i+) s1.push(i);Stack s2(s1);for(i=1; i3; i+) couts2.pop( ),;s2.push(6);s1.push(7);while(!s2.isEmpty( ) couts2.pop( ),;return 0; 执行上面程序的输出是_ A) 4,3,2,1 B) 4,3,6,7,2,1C) 4,3,6,2,1 D) 1,2,3,4(例子)下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函数弹出栈顶元素。栈初始为空,top值为0,栈顶元素在stacktop-1中,在下面横线处填上适当语句,完成栈类模板的定义。template class Tstack enum size=1000; T stacksize; int top;public: Tstack( ): top(0) void push(const T &i)if(topsize) stacktop+=i; T pop( ) if(top = 0) exit(1); /栈空时终止运行 return_ ; /答案:stack - - top ;VC+中布尔类型(逻辑类型变量)例:#includeint main( )bool b=false; / true和false是bool类型量的值if(b)coutTruen;elsecout3;if(b)coutTruen;elsecoutFalsen; /输出Truereturn 0;(例子)Staff类含有int型数据成员ID,两个Staff对象相等是指它们的ID相同。下面的函数重载了运算符= =,它用来判断两个Staff对象是否相等,相等时返回true,否则返回false。请将横线处缺失部分补充完整。bool Staff:operator=(const Staff &s) / 正确的重载函数return(_); 答案:ID=s.ID用typedef声明类型可以用typedef声明一个新的类型名来代替已有的类型名,如:ltypedef int INTEGER; /注意:有分号/指定用标识符INTEGER代表int类型 typedef double REAL; /注意:有分号/指定用标识符REAL代表double类型则,以下两行等价:int i, j; double a, b;INTEGER i, j; REAL a, b; l也可以声明结构题类型:typedef struct date int month;int day;int year; DATE;这样,DATE是一个数据类型名,可以定义变量:DATE birthday; /相当于struct date birthday;DATE *p; /相当于struct date *p;l定义数组类型若有 typedef int ARRAY 100; ARRAY n;相当于定义 int n100;l定义字符指针若有 typedef char * STRING; STRING p, s10;相当于定义 char *p, *s10;归纳起来,声明一个新的类型名的方法是:先按定义变量的方法写出定义语句(如 int i; 或 int a10)将变量名换成新类型名(如将i换成INTEGER, a换成ARRAY)在最前面加typedef(如typedef int INTEGER; typedef int ARRAY10)然后用新类型名去定义变量。 如:INTEGER i, j; ARRAY a, b, c; 说明:(1)typedef 可以声明各种新的类型名,但不能用来定义变量。(2)typedef只是增加类新的类型名,但没有创造新的类型。(3)常用typedef声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用#include命令把它们包含进来,以提高编程效率。(4)使用typedef有利于程序的通用与移植。关于assert( )函数 程序用这个函数是啥意思?起什么作用? - assert( )是一个调试程序时经常使用的宏(可将它看成函数使用),在程序运行时它计算括号内的表达式,如果表达式为false (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常用来判断程序中是否出现了明显非法的数据,如果出现了则终止程序执行,以免导致严重后果,同时也便于查找错误。assert(表达式); 如果括号中的表达式为真,则程序继续执行;若表达式的值为假,中断程序的执行,同时会弹出调试命令窗口,提示具体在哪个文件的哪一行发生了断言错误!例如,三角形的三条边为 a,b,c,程序中可以书写以下语句对的a,b,c合理性作出检测#include #include /注意包含此头文件 void main()int a,b,c;cinabc;assert(a0 & b0 & c0 & a+bc & a+cb & b+ca);couta,b,cendl;程序运行过程中,一旦输入的a,b,c不能构成三角形,则程序中断执行。请分析以下程序的意义:#include #include void process_string(char *string) /* use assert to check argument */ assert(string != NULL); /如果是空指针,停止执行 assert(*string != 0); /如果是空串,停止执行 /* rest of code follows here */int main( ) process_string(hello); process_string(); return 0; 错误的抛出和异常处理程序中常见的错误有两大类:语法错误和运行错误。在编译时,编译系统能发现程序中的语法错误。在运行过程中也会出现异常,得不到正确的运行结果,甚至出现死机现象。例如:(1)被0除(2)内存不够,无法实现指定的操作。(3)数组下标越界。(4)无法打开输入文件。(5)输入数据时,数据类型有错。因此,应当事前分析程序中可能出现的各种意外情况,并且分别制定出相应的处理方法,这就是程序异常处理的任务。异常处理通常由throw运算符和try-catch结构实现(1)throw的语法形式为:throw 表达式; (2)try-catch结构为:try /通常含有抛出表达式 throw被检查的语句(包含可能引发异常的代码段)catch (异常信息类型1 变量名 ) /错误捕捉进行异常处理的语句1 catch (异常信息类型2 变量名 ) 进行异常处理的语句2 . /可能跟随多个catch段catch ( ) 进行异常处理的语句 语义:(1)在try块被检查的语句(包括被调用的函数中)中会出现throw运算符,抛出一个错误。(2)当遇到throw抛出的错误时,编译器自动寻找相应的catch处理块。例子:#include #include void main( ) double Area(double,double,double); double a,b,c; cinabc; try / 检查块 while(a0 & b0 & c0)coutArea=Area(a,b,c)abc;catch(double) /捕捉错误,括号中只有类型,变量名可缺省 couta,b,c , that is not a triangle!endl; double Area(double a,dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论