Skip to content

2024-2025秋-程序设计基础-试题回忆

说明

斜体为记忆不清部分



一、选择题(4×10=40分)

1. C语言基础

关于c语言,下列哪个选项是错误的

  • A. 注释只能写在语句后面
  • B. c程序必须包含函数main
  • C. c程序主要是由函数构成的
  • D. 忘了

2. C++基础

关于c++下列选项错误的是

(选项缺失)


3. 类的构造函数

为了使下列程序正常编译,需要补充的是

class A{
    public:
    A(int a, int b): a(a), b(b) {}
    private:
    int a;
    int b;
};
class B: public A{
    /* 没啥东西*/
}
int main(){
    A a;
    B b;
    /* blablabla */
}
  • A. A的无参构造函数
  • B. B的无参构造函数
  • C. A的析构函数
  • D. B的析构函数

4. 数组初始化

下列选项不能生成一个长度为5的数组的是

  • A. int a[] = {5};
  • B. int a[5] = {0};
  • C. int* a = new int[5];
  • D. int a[5] = {1,2,3,4,5};

5. 循环语句

下列哪个语句不能完成循环功能

  • A. for
  • B. do while
  • C. while
  • D. switch case

6. 纯虚函数

关于纯虚函数,下列选项错误的是

  • A. 具有纯虚函数的类是抽象类,无法直接被实例化
  • B. 抽象类的派生类一定不是抽象类
  • C. 抽象类的派生类可以通过实现纯虚函数,来达到类的可实例化

7. 继承关系

类B保护继承了类A,类C保护继承了类B,则

  • A. 类C包含类A的所有数据成员
  • B. 类C中能直接调用类A的保护成员函数
  • C. 类C中能直接调用类B的公开成员函数
  • D. 类C继承了类A的构造函数

8. 标识符规则

标识符中不能含有以下哪个选项

  • A. 间隔符
  • B. 大小写字母
  • C. 数字
  • D. 下划线

二、编程题(3×10=30分)

1. 计程车(10分)

小明要搭乘计程车,计程车计费规则如下:

  • 不超过3公里,只收起步费10元;
  • 超过三公里,每公里收油费两元;
  • 超过十公里,每公里收50%返程费,即每公里收费三元;
  • 顾客每耽误司机5分钟,收取两元的误工费,不满五分钟不计该项费用。

输入格式:

行驶里程数(精确到一位小数) 顾客耽误的时间(整数)

输出格式:

总计费(四舍五入)

2. 数列元素求和plus(10分)

给定一个3的倍数n,接下来输入n个数字,要求以三个数字为一组,输出每组最大值之和。

输入格式:

数列长度(保证是三的倍数)
具体数列元素

输出格式:

每组元素之和

3. 打方块(10分)

小明想要玩打方块游戏,具体规则如下:

定义击打规则如下:

 0 
0#0
 0
  • "#"为击打的中心位置,该位置的方块直接被破坏;
  • "0"为击打范围之内波及的区域,该位置的方块发生损伤,损伤的方块再被波及一次即会被破坏。

输入格式:

题目给定棋盘的行数M和列数N,接下来给出棋盘中的每个元素,例如:

// M=5, N=5
00###
#0#0#
##000
#0000

其中符号"#"代表此处存在方块,符号"0"代表此处不存在方块。

接下来给定击打的次数和具体的击打坐标(X,Y),(1<=X<=N, 1<=Y<=M)

输出格式:

被破坏的方块总数 被损伤的方块总数

输入案例:

5 5
00###
#0#0#
##000
#0000
3
1 3
2 3
4 1

三、函数题(30分)

1. 运算符重载(10分)

给出类的定义和裁判程序及其输出,完善类的构造函数,大于 >,小于 <,输入 >>,输出 << 符号。


2. 水果类的定义(10分)

需要构建以下两个类:

1. Fruit类

  • 具有受保护的成员变量origin,类型为string
  • 具有受保护的成员变量weight,类型为int
  • 公开的构造函数
  • 公开的show()函数

2. Apple类

  • 私有的成员变量level,类型为int
  • 公开的构造函数
  • 公开的show()函数

3. 车辆限行政策(10分)

某地因为某种原因,需要实施车辆限行,具体规则如下:

新能源车:不受限行时段的影响。

燃油车:在限行时段按照以下规则限行:

  • 周一:车牌尾号为1、6的车辆限行
  • 周二:车牌尾号为2、7的车辆限行
  • 周三:车牌尾号为3、8的车辆限行
  • 周四:车牌尾号为4、9的车辆限行
  • 周五:车牌尾号为5、0的车辆限行
  • 周六、周日:不限行

裁判程序:

#include <iostream>
using namespace std;

class Vehicle {
protected:
    int plateNumber;    
    int dayOfWeek;       
    bool isRestrictTime; 
public:
    Vehicle(int plate, int day, bool time) : plateNumber(plate), dayOfWeek(day), isRestrictTime(time) {}
    virtual void isRestrict() = 0;  
};

/* 你的答案 */

int main() {
    int n;
    cin >> n;

    for (int i = 0; i < n; i++) {
        int type, plate, day, time;
        cin >> type >> plate >> day >> time;

        Vehicle* vehicle;
        if (type == 0) {
            vehicle = new NewEnergyVehicle(plate, day, time);
        } else {
            vehicle = new FuelVehicle(plate, day, time);
        }

        if(vehicle->isRestrict())
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;

    }

    return 0;
}

输入格式:

待判断的车辆数量
车辆类型(0:新能源车,1:燃油车) 车牌尾号 当前日期(1-7表示周一到周日) 是否在限行时段(0:不在限行时段,1:在限行时段)

输出格式:

每一行(限行与否)
Yes or No

输入案例:

4
2 1 1 1
1 2 1 1
1 4 2 0
1 0 5 1