江苏计算机二级(VC++)上机考试分析与策略

2013-04-29 06:02黄霞
无线互联科技 2013年6期

摘 要:江苏计算机二级(VC++)上机考试历来被认为是学生通过等级考试的一大难点,总结多年教学的经验,针对历届上机考题进行了分析,分别对其改错题和编程题给出了相应的策略。

关键词:江苏计算机二级(VC++);上机考试分析与策略

江苏计算机二级(VC++)上机考试,主要是针对程序改错和类的编程进行考核,程序改错考核的是学生对程序的理解和调试能力;而类的编程主要是考核学生对面向对象的编程能力。而这两类题的解答在笔者看来,都有很多可以应对的技巧和策略,可分别对其分析后,进行归纳总结。

1 改错题

一般程序的错误分为两种,一种是语法错误,程序一开始编译时就能发现,也比较容易改正;另一种是逻辑错误,编译时不会报错,但在运行时,可能运行不出来,或运行不出正确结果,这时可以由运行的结果,倒退回去找错,看为什么会出现上述结果,推算出错误之处予以改正。

1.1 改错题解题步骤

改错题首先要读题干,读懂下面程序要实现什么功能。接下来读程序,先别急着改错,尽量弄懂程序如何实现上述功能,各程序段分别做了哪些操作,来实现以上功能。接下来才开始改程序,看每个程序语句对完成上述功能所要完成的任务,如果没有看懂的要再联系上下程序段看,如果没有做到所要完成的任务,再看应该怎么改,改完整个程序后可以编译和运行,也可以边改边编译或运行。

1.2 常见错误要点分析

1.2.1 预编译命令

(1)包含库函数相应的头文件,如果包含的头文件写错,这时程序中头文件所在的相应库函数不能被识别而报错。

如:#include //改为 #include

#include // 改为 #include

(2)宏定义不正确,这时编译出错不是在宏定义,而是在宏代换后的程序行。因为宏定义是预编译处理,在程序编译前中作代换不作语法检查,代换后编译时才作语法检查。

如:#define pi 3.14; //改为 #define pi 3.14

1.2.2 变量

变量定义是否正确,变量是否有正确的初始值。变量定义的位置决定了变量的作用域。变量只在其作用域有效。变量定义后如要参与运算,变量需要给出正确的初始值。

如:int s,a[5]={1,2,3,4,5};

for(int i=0;i<5;i++)

s+=a[i];

上面和变量s给出了定义,但没赋初值,无法正确对数组元素进行求和。

1.2.3 数组

定义一维数组时数组长度要求为正整型常量,定义二维数组时列数不能省略。数组中元素下标是否超界,是数组元素使用时经常忽略的问题,在编译时也并不对数组元素下标超界作语法检查,但在运行时会报错。

如:int a[5]={1,2,3,4,5},i;

for(i=0;i<=5;i++)

cout<

上面数组元素下标超界,5个长度的数组没有元素a[5]。

1.2.4 函数

函数的原型声明是否与函数的定义对应。函数的定义如有返回值,函数定义是否有正确的返回类型,返回的是否为正确的结果表达式。函数如没有返回值,返回类型是否为void。函数调用与函数定义是否对应,函数调用的实参与函数定义的形参进行参数传递时是否匹配。

1.2.5 流程结构

程序的流程控制中注意区分if语句与while语句及for语句,if 语句只作一次选择判断,而while语句及for语句是做循环判断,如果判断为非0即真,执行循环体,一直到循环判断为0,才退出循环。另外要区别循环体中continue与break,continue是结束本次循环,而break是退出所在的循环。

1.2.6 判断表达式

要关注选择或循环的判断表达式是否正确。判断表达式中要注意区分赋值号(=)与关系相等运算符(==)是否混淆;逻辑判断表达式中,==与!=是否混淆,!运算是加还是不加,&&与|| 是否混淆。

1.2.7 指针

指针就是地址,包括常量地址和指针变量。常量地址主要是指数组名。数组名是常量地址不能被重新赋值或做自加运算。一维数组名是数组第0个元素的地址。而二维数组名表示的是第0行的行地址。

指针变量包括指向数据类型变量的指针变量和行指针变量。指向数据类型变量的指针变量,是否用同类型的变量或元素的地址赋值 ,在其前加*表示指针指向的变量或元素。另外要区分指针变量还是指针指向变量的自加与自减。如*p++和(*p)++的区别,前者是指针变量作后置++,后者是指针变量指向的变量作后置++。行指针变量,是否用相同列数的行地址赋值,行指针前加*表示同行第0列元素的地址,元素地址前加*表示元素。反过去的转换加&运算符。当函数返回类型是指针时,要求认清返回的是否为正确的地址。

1.2.8 逻辑错误

逻辑错误,在编译时不能被发现,在运行时可能运行不出来或运行结果不对。改逻辑错误前一定先看清题目,理解程序要实现什么功能,再看程序,理解程序的算法,即程序是如何实现题目所要实现的功能,再分析每一行代码进行改错。

2 类的编程

类的编程主要来源于面向对象的程序设计思想。定义的一个类表示的是某一类事物,包含描述其静态属性的数据成员和动作行为的成员函数。用这个类来具体定义一个特定事物就是对象。这种类的对象,则拥有类所描述的所有静态属性和动作行为。

2.1 类定义的一般思路

(1)类中先定义私有数据成员,再定义公有的成员函数,每一个成员函数用一对{ }括起来,整个类用一对花括号括起来加分号结束。

(2)类中的成员函数主要包含构造函数,输出成员函数及功能成员函数,功能成员函数需要掌握相应类型的一些常用算法,如:数值求阶乘、数字与数字字符转换、数位分离、求素数、水仙数等,一维数组的选择排序、二分查找法,求最大值最小值等,二维数组的左移和右移、对角线、外围元素等,字符串的遍历、逆序、插入,删除和找子串等。另外对于指针成员,类中还需定义析构函数来释放指针指向的动态空间等。

(3)主函数中根据构造函数的形参,准备相应实参,定义类的对象,再通过对象来调用类定义的成员函数,而对象成员函数中所操作的成员就是当前对象的成员。

2.2 不同类型成员类的编程

对于等级考试中类的编程框架,一般比较固定,先定义一个类,在主函数中定义类的对象,并调用对象的成员函数进行类的测试。类的定义中,先写私有的数据成员,再写公有的成员函数。公有成员函数一般包括构造函数,输出函数和一至两个功能成员函数或辅助函数。功能成员函数或辅助函数因不同的题目和算法而不同;而对于构造函数和输出成员函数,则可根据其不同类型的数据成员进行如下归纳。

2.2.1 数值类型变量成员

数据类型成员,是单个变量做数据成员,构造函数中形参直接为变量赋值,但不是所有成员变量都能直接由构造函数赋值,有些成员变量的值需要进行相应运算和操作才能被求值,这时通常会用功能成员函数来实现相应成员变量的赋值。

2.2.2 数值型数组成员

构造函数一般用循环赋值,一维的用一重循环给一维数组成员的元素赋值,二维的用两重循环给二维数组成员的元素赋值。还有一些数组不是直接由构造函数赋值,而是派生生成的,利用成员函数给派生数组元素赋值。输出函数,一维的用一个循环将一维数组成员的元素一行输出,再换行;二维的外行循环体包含内列循环和换行语句,将二维数组成员的元素按行输出。

2.2.3 数值型指针成员

构造函数中一般先用new数值类型[数组长度],返回数组的首地址给指针成员赋值,再用循环给数组元素赋值。指针成员的赋值也可以在成员函数中做。析构函数用delete[]指针。输出函数利用循环将指针指向的数组元素按行输出。

2.2.4 字符类型数组成员

构造函数用拷贝函数将形参数组的字符串整体拷贝给字符数组成员,输出函数直接输出字符数组名,可以将字符数组成员指向的字符串作整体输出。

2.2.5 字符类型指针成员

构造函数一般是先用new char[形参指针指向字符串的字符个数+1],定义一个动态字符数组,返回动态字符数组的首地址给字符指针成员,再将形参指向的字符串用拷贝函数拷到字符指针指向的字符数组,析构函数用delete[]指针,释放指针指向的动态内存空间,输出函数直接输出字符指针成员指向的字符串。

3 总结

通过归纳计算机二级VC++上机考试改错题的各种类型错误,并对各种类型的数据成员进行类的编程,可以有针对性地作一些相应的练习来加强上机应考的能力,本文中所提到的一些策略,希望能对上机考试的复习起到抛砖引玉之功效。

[参考文献]

[1]凌翌.计算机等级考试与高校计算机基础教学改革[J].计算机教育,2010,11.

[2]李联宁.计算机等级考试的研究与思考[J].计算机教育,2011,10.

[3]高校计算机等级考试的教学与思考[J].中国科技信息,2005,2.

[4]黄霞.独立学012院计算机文化基础教学改革探索[J].无线互联科技,2012,10.

[5]秦春影,喻晓峰,仝海燕,唐淑萍.贵州大学报(自然科学版)[J].计算机等级考试组卷策略分析与研究,2012,4.