这份试卷是针对东南大学08级C++课程的一次上机考试,主要考察学生对C++语言的理解和应用能力,包括程序的调试和面向对象编程。试卷分为两部分:改错题和编程题。
**一、改错题**
题目中给出的程序实现了一个直接选择排序算法,但存在多处错误。以下是针对错误的部分的详细解释:
1. **错误1**:函数声明缺少返回类型。`void SelectSort(int slist[], int n)` 应该是正确的形式,因为函数没有返回值,参数列表中`slist`应该是数组类型。
2. **错误2**:`int main()` 后的变量`i`未声明。应该在`main`函数内部添加`int i`。
3. **错误3**:`for`循环条件应为`i<n-1`,因为当`i=n-1`时,已经完成了所有元素的比较,不需要再进行下一轮循环。
4. **错误4**:内层`for`循环条件应为`j>i`,因为我们要从`i+1`开始与`i`位置的元素比较。
5. **错误5**:`k==j;`应该是`k=j;`,这里是赋值操作而不是相等判断。
6. **错误6**:在`main`函数中,变量`i`未声明。需要在`main`函数内部添加`int i`。
7. **错误7**:输出未排序数组时,`cout`语句的结束分号`>`应改为`,`,以连接下一个元素的输出。
8. **错误8**:在打印未排序数组的循环中,`cout<<list[j]<<'\t';`的`j`应改为`i`,以正确地输出当前元素。
9. **错误9**:调用选择排序函数时,函数名拼写错误,应为`SelectSort(list, h);`
10. **错误10**:在打印已排序数组的循环中,`cout<<list[i]<<'t';`的`'t'`应改为`'\t'`,以输出制表符。
**二、编程题**
题目要求创建一个名为`CGoods`的类,该类在构造时从指定文件读取数据初始化成员,析构时将成员数据保存回文件。同时,需要提供一个`SetParam`函数来设置成员变量的值。以下是针对这部分的要求的解析:
1. **CGoods 构造函数**:在构造函数中,需要打开文件`mydatafile.txt`,读取数据并赋值给`CGoods`类的成员变量`Description`、`No`、`Quantity`、`Cost`和`Retail`。记得关闭文件。
2. **CGoods 析构函数**:在析构函数中,需要重新打开文件,将类的成员变量值写回到文件中,然后关闭文件。
3. **CGoods::SetParam 函数**:该函数接收5个参数,分别对应`Description`、`No`、`Quantity`、`Cost`和`Retail`,并用这些参数更新类的成员变量。
4. **main 函数**:在`main`函数中,创建一个`CGoods`对象`goods`,然后调用`SetParam`函数设置其初始值。这主要用于验证类的功能是否正确实现。
在编写这些函数时,需要注意文件操作的正确性,包括文件打开、读写和关闭。同时,确保在异常情况下能正确处理资源释放,以防止内存泄漏或数据丢失。
这份试卷主要考察了C++的基础语法、错误排查、文件操作以及面向对象编程的基本概念,是对学生C++编程能力全面的考核。