东南大学C卷:程序设计与算法语言试题与解析

0 下载量 22 浏览量 更新于2024-08-04 收藏 97KB DOC 举报
"程序设计及算法语言C卷是东南大学吴健雄学院的一门课程的考试试卷,主要测试学生对C语言程序设计和算法的理解。试卷包括闭卷考试部分,总分为60分,另外还有上机编程30分以及平时成绩10分。试题涵盖了简答题和程序阅读与修改题,旨在考察学生对于类的定义、函数的使用以及异常处理等C++核心概念的掌握。 在简答题部分,题目主要涉及了类的定义和成员变量的声明: 1. 类Circle的定义中,使用了`register`和`auto`关键字,这两个在C++中并不是合法的存储类别修饰符。`register`通常用于告诉编译器尝试将变量存储在寄存器中以提高速度,但在这里不能用于类的数据成员。而`auto`在C++中用于变量声明,表示由编译器推断类型,但不能用于类的成员声明。正确的定义应去除这两个关键字。 2. 类Figure的定义中,析构函数`~Figure()`接受了一个布尔参数,这是不常见的。通常析构函数不接受任何参数,且在C++中,析构函数的主要作用是清理对象创建时分配的资源。如果需要特定行为,可以考虑使用带有参数的构造函数或重载函数,而不是析构函数。 3. 函数`swap(double d1, double d2)`用来交换两个双精度浮点数的值。然而,由于`d1`和`d2`是按值传递的,函数内部的修改不会影响到调用者中的原始变量。为了实现交换,需要使用引用或者指针。正确的函数定义应该是`void swap(double &d1, double &d2)`,这样函数内的修改会直接影响到传入的变量。 程序阅读与修改题部分,主要考察的是C++的异常处理。题目给出了一个自定义异常类ZeroExcep,当除数为0时抛出该异常。程序中使用`try-catch`结构捕获异常,打印出异常信息。异常处理部分的代码如下: ```cpp try { cout << "5.0/2.0=" << divide(5.0, 2.0) << endl; cout << "7.0/0.0=" << divide(7.0, 0.0) << endl; cout << "9.0/2.0=" << divide(9.0, 2.0) << endl; } catch (ZeroExcepze) { cout << ze.what() << endl; } ``` 当调用`divide(7.0, 0.0)`时,由于除数为0,会抛出ZeroExcep异常,程序进入对应的`catch`块,打印出异常信息“被0除异常”。其他两行正常执行,输出相应的除法结果。 综合来看,这个考试试卷全面地检查了学生对于C++语言基础、类和对象、函数使用以及异常处理的掌握程度,是评估学生程序设计和算法能力的有效方式。