26届嵌入式组提前批C/C++考核题
考前须知:
本次考试禁止各种形式的作弊,禁止使用AI,如发现取消考试成绩
可以翻看自己记录的笔记
1.选择题判断题的答案通过.txt文件保存
2.编程题每一题将源文件和头文件封装进文件夹,文件夹按照题号命名1,2,3,4,5
3.将所有题目封装进总文件夹命名格式为:姓名-学号
4.总文件夹打成压缩包zip格式通过邮件发送到060203selina@gmail.com
如被Gmail退回请发送到2762335112@qq.com
一、选择题 10题 × 3分 = 30分
单选 01|在文件作用域写下 `int system_mode;` 且没有显式初始化。程序开始运行时,`system_mode` 的值是( )。 [3分]
A.0
B.随机值
C.1
D.编译错误
单选 02|执行下列代码后,输出结果是( )。 [3分]
int a = 6;
int b = a;
int* p = &a;
*p = 9;
std::cout << a << " " << b;A.6 6
B.9 9
C.9 6
D.6 9
单选 03|执行下列代码后,输出结果是( )。 [3分]
int count = 2;
{
int count = 5;
++count;
}
std::cout << count;A.2
B.3
C.5
D.6
单选 04|执行下列代码后,`result` 的值是( )。 [3分]
int x = 7;
int result = (x % 2 == 0) ? x / 2 : x + 1;A.3
B.4
C.7
D.8
单选 05|执行下列代码后,输出结果是( )。 [3分]
int n = 0;
do {
n += 2;
} while (n < 0);
std::cout << n;A.0
B.2
C.无限循环
D.编译错误
单选 06|执行下列代码后,输出结果是( )。 [3分]
int data[4] = {10, 20, 30, 40};
int* p = &data[1];
std::cout << *(p + 1);A.10
B.20
C.30
D.40
单选 07|执行下列代码后,输出结果是( )。 [3分]
void update(int value, int* target) {
value += 2;
*target += 2;
}
int a = 3;
int b = 3;
update(a, &b);
std::cout << a << " " << b;A.3 3
B.5 3
C.3 5
D.5 5
单选 08|执行下列代码后,输出结果是( )。 [3分]
struct Data { int value; };
Data d = {4};
Data* p = &d;
p->value = 10;
std::cout << d.value;A.4
B.10
C.输出地址
D.编译错误
单选 09|关于头文件中的 `extern int total;`,下列说法正确的是( )。 [3分]
A.它要求每个包含该头文件的源文件都定义一个独立的 total
B.它通常声明 total 在其他位置有且只有一个定义
C.它把 total 定义为局部变量
D.它使 total 成为常量
单选 10|关于 `union`,下列说法正确的是( )。 [3分]
A.所有成员始终拥有互不重叠的独立存储
B.所有成员共享同一块存储,写入一个成员会影响这块共享存储
C.联合体大小一定等于所有成员大小之和
D.联合体不能包含整型成员
二、判断题 5题 × 2分 = 10分
判断 01|在包含正确头文件的 C++ 程序中,`printf` 和 `std::cout` 都可以用于输出。 [2分]
答案:( )
判断 02|函数内的普通局部变量`int value;` 如果没有初始化,读取它时一定得到 0。 [2分]
答案:( )
判断 03|指针变量本身也是一个有存储和地址的对象;它保存的值通常是另一个对象的地址或空指针值。 [2分]
答案:( )
判断 04|把指针传给函数时,复制的是指针值;函数重设形参指针不会改变调用者的指针,但通过解引用仍可修改所指对象。 [2分]
答案:( )
判断 05|只要在头文件中写`extern int total;`,链接器就会为每个源文件各创建一个独立的 `total`。 [2分]
答案:( )
三.编程题
进入编程题前自检|每个变量保存什么值?每个指针保存谁的地址?函数修改的是副本还是原对象?
编程题 1|变量赋值与数值换算 8分
任务|编写完整程序:输入两个整数 `raw` 和 `offset`。先执行 `int corrected = raw;`,再将 `offset` 加到 `corrected`;若结果小于 0 则改为 0,若大于 4095 则改为 4095。定义常量 `REF_VOLTAGE = 3.3`,按 `voltage = corrected * REF_VOLTAGE / 4095.0` 计算电压并保留两位小数。输入 `2000 100` 时输出 `raw=2000`、`corrected=2100`、`voltage=1.69V`。最后用一句话解释为什么修改 `corrected` 不会改变 `raw`。
考查点|变量、常量、赋值复制、数据类型、运算符、if/else、浮点除法
编程题 2|函数编写与值传递 10分
任务|声明并定义 `void addOne(int value)`,在函数内执行 `value += 1`;再声明并定义 `int stepValue(int start, int step, int times)`,使用 `while` 循环把 `step` 累计 `times` 次并返回结果。在 `main` 中令 `int n = 10`,调用 `addOne(n)` 后输出 `n`,再输出 `stepValue(n, 3, 4)`。预期结果分别为 10 和 22,并解释第一个结果。
考查点|函数声明、定义、调用、返回值、局部变量、while、值传递
编程题 3|指针与结构体 14分
任务|定义 `struct Motor { int id; int speed; bool enabled; };`。实现 `bool setSpeed(Motor* motor, int newSpeed)`:空指针或速度不在 -5000~5000 时返回 `false`,否则写入速度、将 `enabled` 设为 `true` 并返回 `true`。实现 `void stopMotor(Motor* motor)`:非空时把速度设为 0、使能设为 `false`。在 `main` 中创建 `Motor m = {1, 1200, true}` 和 `Motor* p = &m`,输出 `&m` 与 `p`,依次调用 `setSpeed(p, 1500)`、`stopMotor(&m)` 并打印每步结果。说明两个地址为什么相同、函数为什么能修改原结构体。
考查点|结构体对象、取地址、指针值、空指针、`->`、通过地址修改原对象
struct Motor {
int id;
int speed;
bool enabled;
};
bool setSpeed(Motor* motor, int newSpeed);
void stopMotor(Motor* motor);编程题 4|分文件编程并调用 12分
任务|建立 `counter.h`、`counter.cpp` 和 `main.cpp`。在命名空间 `counter` 中:头文件声明 `extern int total;`、`void reset();`、`void add(int value);`、`int getTotal();`;`counter.cpp` 中只定义一次 `total` 并实现三个函数;`main.cpp` 中调用 `reset()`,再依次加入 4 和 7,输出 `total=11`。写出同时编译两个 `.cpp` 文件的命令,并说明`extern` 声明与变量定义的区别。
考查点|头文件、声明与定义、extern、命名空间、跨文件调用与链接
// counter.h
namespace counter {
extern int total;
void reset();
void add(int value);
int getTotal();
}编程题 5|混合应用:采样通道分析 16分
任务|定义 `enum State { NORMAL, ALERT };` 和结构体 `Channel`,其中包含 `id`、6 个整型样本、`minimum`、`maximum`、`average`、`state`。实现 `int sumSamples(const int* data, int length)`;实现 `void findMinMax(const int* data, int length, int* minValue, int* maxValue)`;实现 `void analyze(Channel* channel, int threshold)`,计算最小值、最大值和平均值,平均值大于等于阈值时设为 `ALERT`;实现 `void printChannel(const Channel* channel)`,使用 `switch` 输出状态。`main` 中使用样本 `{62, 68, 75, 80, 85, 90}`、阈值 75,应得到 `minimum=62`、`maximum=90`、`average=76.67`、`state=ALERT`。
考查点|枚举、结构体、数组、for、函数、指针、输出参数、if、switch、综合调试
enum State { NORMAL, ALERT };
struct Channel {
int id;
int samples[6];
int minimum;
int maximum;
double average;
State state;
};

