跳转至

数据学院2025级程序设计期末考试

2025级期末没有纸笔考试了,只有上机考试.平时他们也没有上机测验,因此这唯一的一次上机便是期末.

A卷

这里是根据你上传的图片内容整理的 Markdown 格式文字。我已经按照题目的顺序将其分块整理,并将样例放入了代码块中。


1. 共享单车计费

Description

某城市的共享单车计费规则如下:

  • 基本费用
  • 骑行时间在15分钟及以内收费1.5元;
  • 第1个小时内,若超出15分钟,接下来每15分钟加收0.5元(不足15分钟按15分钟计);
  • 第1个小时后,每15分钟加收1.5元(不足15分钟按15分钟计)。
  • 会员优惠
  • 若为普通用户,按上述规则计费;
  • 若为月卡会员,总账单按8折收费;
  • 若为年卡会员,第1个小时免费,第1个小时后按每15分钟加收1.4元(不足15分钟按15分钟计)。

请编写程序,根据用户输入的会员等级和骑行时间(分钟),计算账单金额。

Input

2行整数:

  • 第1行整数表示会员等级(0表示普通用户;1表示月卡会员;2表示年卡会员)
  • 第2行整数表示骑行时间(分钟),系统保证输入介于 1~1000 之间

Output

模拟输出给用户的账单消息,若账单金额为12.5元,应按照以下格式输出:

Amount Payable: 12.50

注意冒号为英文输入法下的冒号,冒号后面有一个空格,金额保留2位小数,不得输出多余的换行符。

Sample Input 1

0
17

Sample Output 1

Amount Payable: 2.00

Sample Input 2

1
62

Sample Output 2

Amount Payable: 3.60

Sample Input 3

2
62

Sample Output 3

Amount Payable: 1.40

Hint

提示:

  • 可引入 math.h 头文件后使用 ceil 方法,其函数签名为 double ceil(double x);,功能为返回大于或等于 x 的最小整数值。

警告:

  • 若直接按照输入用例输出结果,本题作答无效。
  • 如果使用C++语言作答,仅允许引入 iostreammath 头文件,若引入其他头文件,则本题作答无效。

2. 素数等差数列校验器

Description

如果一组素数(质数)能够构成等差数列,那么称这组数为“素数等差数列”。例如:3, 7, 11 是一个公差为 4 的等差数列。

请编写一个程序完成以下功能:

  • 定义函数 int is_prime(int n);,函数功能为判断传入的参数 n 是否为一个素数,如果是素数,函数返回 1,否则返回 0;
  • 定义函数 int check_prime_as(int start, int diff, int count);,函数功能为检查从 start 开始,公差为 diff 的连续 count 个数是否全部为素数,如果全部为素数,函数返回 0,否则返回第一个不是素数的项;
  • 在主函数中接收标准输入提供的 3 个整数,分别表示起始值、公差和数列长度,调用函数检查是否为“素数等差数列”:
  • 如果是,输出 YES 字样;
  • 如果不是,输出数列中第一个不是素数的数字。

Input

一行内3个正整数,以空格间隔:

  • 第 1 个正整数为起始值,保证介于 2~50,000,000 之间;
  • 第 2 个正整数为公差,保证介于 2~500,000 之间;
  • 第 3 个正整数为数列长度,保证介于 3~1000 之间。

Output

如果提供的参数是素数等差数列,输出 YES 字样;

如果不是,输出数列中第一个不是素数的数字。

不要输出多余的换行符。

Sample Input 1

3 4 3

Sample Output 1

YES

Sample Input 2

7 2 3

Sample Output 2

9

Hint

提示:

  • 若最后一个测试点超时(提示Time Limit Exceeded),请考虑优化判断素数的方法。若其他测试点通过,则本题按照95%的成绩计入总分。

警告:

  • 如果没有按照题目要求定义函数并调用,则本题最多按60%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 如果使用C++语言作答,仅允许引入 iostreammath 头文件,若引入其他头文件,则本题作答无效。

3. 矩阵螺旋折叠提取器

Description

在图像处理和数据压缩中,经常需要按照特定的顺序对二维数组进行相关操作。请设计程序,从一个 \(3 \times 3\) 的矩阵中,按照对角线扫描的顺序提取元素并存入一个一维数组中,然后输出该一维数组的全部元素。

定义函数 void extract_diag(int matrix[3][3], int result[6]);,函数功能为将矩阵 matrix 的主对角线从左上到右下的 3 个元素拷贝至 result 数组的前 3 个元素位置,然后将矩阵 matrix 的副对角线从右上到左下的 3 个元素拷贝至 result 数组的后 3 个元素位置。函数体不要出现类似 matrix[1][1]result[1] 的通过索引访问数组方式,必须通过指针地址偏移的方式访问数组元素,若使用索引方式访问数组,则本题最多仅可获得50%的分数。

主函数接收标准输入提供的矩阵值,调用函数后输出 result 数组的全部元素(主函数内允许通过索引方式对数组操作)。

Input

\(3 \times 3\) 的整数矩阵,每个元素的值介于 -100~100 之间,最后一行最后一个整数最后没有换行符。

Output

输出 result 数组的全部元素,以空格间隔,最后一个数字后不要输出多余的空格。

Sample Input 1

1 2 3
4 5 6
7 8 9

Sample Output 1

1 5 9 3 5 7

Hint

警告:

  • 如果没有按照题目要求定义函数并调用,则本题最多按60%的成绩计入总分;
  • extract_diag 函数体中不要出现类似于 matrix[1][1]result[1] 的通过索引访问数组方式,请通过指针地址偏移的方式访问数组元素,否则本题最多按50%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 如果使用C++语言作答,仅允许引入 iostream 头文件,若引入其他头文件,则本题作答无效。

4. 删除空格 (文件版)

Description

编写函数char *delete_space(char *str),功能为删除 str中的所有空格,并将新字符串作为函数返回值。

在主函数中从文件接收一个字符串,调用函数后,将新字符串写入新的文件中。

Input (From File: 1.in)

读取 1.in 文件,文件中只有小写字母、空格、换行符。

Output (To File: 1.out)

将删除空格后的内容写入 1.out 文件。

Sample Input 1

hello tom

hello jerry

Sample Output 1

hellotom

hellojerry

Hint

警告:

  • 如果没有按照题目要求定义函数并调用,则本题最多按60%的成绩计入总分;
  • 如果没有正确释放文件指针和动态内存分配空间,则本题最多按90%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 本题仅限使用C语言作答,仅允许引入 stdio.hstdlib.h 头文件,引入其他任何头文件本题作答无效。

5. 成绩排序

Description

设计结构体 Student,其包含 3 个成员:

int stu_no;   // 学生学号
char *name;   // 学生姓名
int scores;   // 学生成绩

接收标准输入提供的 N 个学生的信息,按照以下规则对学生信息进行排序:

  • 学生成绩降序(从大到小)排序;
  • 如果学生成绩相同,按照学号升序排序(从小到大)排序。

排序后按照指定格式重新输出全体学生信息。

Input

第 1 行为一个正整数 N,表示接下来提供的学生信息数目, \(1 <= N <= 10\)

接下来 N 行按照姓名(仅包含大小写英文字母)、学号(由3位数字构成)、成绩(介于0~100)的顺序输入,以空格分隔。

所有学生的学号是唯一的。

Output

经过排序后的 N 行学生信息,按照学号、姓名、成绩的顺序输出,以空格分隔。

最后一行输出完毕后不要输出多余的换行符。

Sample Input 1

3
Tom 137 65
Jerry 139 75
Amy 131 75

Sample Output 1

131 Amy 75
139 Jerry 75
137 Tom 65

Hint

提示:

  • 使用动态分配内存的方式访问结构体指针数组、正确释放动态内存分配空间、通过本题所有测试点,总成绩可获得 5 分加分。

警告:

  • 如果没有按照题目要求定义结构体或修改结构体成员的数据类型,则本题最多按50%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 若使用C语言作答,仅允许引入 stdio.hstdlib.h 头文件;若使用C++语言作答,仅允许引入 iostreamcstdlib 头文件,引入其他任何头文件本题作答无效。

作答情况

# Title Total AC Rate 通过人数
1 共享单车计费 268 15.67% 42
2 素数等差数列校验器 218 13.30% 29
3 矩阵螺旋折叠提取器 149 16.11% 24
4 删除空格(文件版) 101 1.98% 2
5 成绩排序 163 4.91% 8

B卷

好的,这是根据你提供的 image_07d82d.png 中的表格顺序整理的 Markdown 内容。


1. 停车收费

Description

某商场停车场计费规则如下:

  • 前 30 分钟(含)免费;
  • 停车时长在 3 小时(含)以内的,每小时收费 5 元,不满一小时按一小时计费;
  • 停车时长在 3 小时以上的,每小时收费 10 元,不满一小时按一小时计费;
  • 每 24 小时最高收费 65 元;
  • 若停车时长超过 24 小时,则收取每日最高收费后,重新按照以上规则累加计费。

请编写程序,根据用户输入停车时间(分钟),计算账单金额。

Input

1 行整数,表示停车时长(分钟),系统保证输入介于 0~10000 之间。

Output

输出停车金额,保留 1 位小数。

Sample Input 1

25

Sample Output 1

0.0

Sample Input 2

45

Sample Output 2

5.0

Sample Input 3

365

Sample Output 3

55.0

Hint

提示:

  • 可引入 math.h 头文件后使用 ceil 方法,其函数签名为 double ceil(double x);,功能为返回大于或等于 x 的最小整数值。

警告:

  • 若直接按照输入用例输出结果,本题作答无效。
  • 如果使用C++语言作答,仅允许引入 iostreammath 头文件,若引入其他头文件,则本题作答无效。

2. 卢卡斯数

Description

卢卡斯数是一个以数学家爱德华·卢卡斯命名的整数序列,他既研究了这个数列,也研究了有密切关系的斐波那契数。

\[L_n = L(n) = \begin{cases} 2 & \text{if } n = 0; \\ 1 & \text{if } n = 1; \\ L(n-1) + L(n-2) & \text{if } n > 1. \end{cases}\]

请设计函数 int lucas(int n);,函数功能为返回第 n 项卢卡斯数;

请设计函数 void find_lucas(int m, int n);,函数功能为输出 \([m, n]\) 区间内所有的卢卡斯数。

在主函数中接收用户从键盘上输入的两个数字,调用函数,输出区间内所有的卢卡斯数。

Input

以空格为间隔的两个正整数 m 和 n,保证 \(3 <= m <= n <= 10,000,000\)

Output

介于区间 [m, n] 中的所有卢卡斯数,若有多个数字,以空格间隔,输出最后一个数字后必须输出空格。

Sample Input 1

3 30

Sample Output 1

3 4 7 11 18 29

Hint

提示:

  • 若最后一个测试点超时(提示Time Limit Exceeded),请考虑优化函数代码。若其他测试点通过,则本题按照95%的成绩计入总分。

警告:

  • 如果没有按照题目要求定义函数并调用,则本题最多按60%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 如果使用C++语言作答,仅允许引入 iostream 头文件,若引入其他头文件,则本题作答无效。

3. 简易图像模糊滤镜

Description

假设你正在开发一个简单的图像处理软件。图像由 \(3 \times 3\) 的像素矩阵组成,每个像素的值为0~255。为了减少图像噪点,需要实现一个“平滑滤波器”:将矩阵中心位置的像素值,更新为其四周(含自身)共9个像素点的平均值。

定义函数 void smooth(int (*ptr)[3]); 函数功能为将 ptr 指向的区域及其后续区域表示的 \(3 \times 3\) 矩阵所有元素的值求平均值(取整数部分),并替换矩阵中心位置的值。

在主函数中使用动态内存分配方式创建数组,调用函数,并按照格式输出矩阵的每个元素。

整个程序代码不要出现类似 ptr[1][1] 通过索引访问数组方式,必须通过指针地址偏移的方式访问数组元素,若使用索引方式访问数组,则本题最多仅可获得50%的分数。

Input

3 行 3 列的整数序列,每个整数介于 [0, 255],每列以空格间隔。

Output

3 行 3 列的整数序列,每列以空格间隔,最后一个元素后不得输出空格或换行符。

Sample Input 1

10 20 30
40 100 60
70 80 90

Sample Output 1

10 20 30
40 55 60
70 80 90

Hint

警告:

  • 如果没有按照题目要求定义函数并调用,或没有通过动态分配内存方式创建数组,则本题最多按60%的成绩计入总分;
  • 代码中不要出现类似于 ptr[1][1] 通过索引访问数组方式,请通过指针地址偏移的方式访问数组元素,否则本题最多按50%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 如果使用C++语言作答,仅允许引入 iostreamcstdlib 头文件,若引入其他头文件,则本题作答无效。

4. 单词倒序(文件版)

Description

读取文件 1.in,文件内有多个单词构成的字符串,输出从右到左的字母顺序至文件 1.out。

例如文件内字符串为 hello world

输出 dlrow olleh

Input (From File: 1.in)

读取文件 1.in,文件内有多个单词构成的字符串。

Output (To File: 1.out)

输出从右到左的字母顺序至文件 1.out。

Sample Input 1

hello world

Sample Output 1

dlrow olleh

Hint

警告:

  • 如果没有正确释放文件指针和动态内存分配空间,则本题最多按90%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 本题仅限使用C语言作答,仅允许引入 stdio.hstdlib.h 头文件,引入其他任何头文件本题作答无效。

5. 成绩排序

Description

设计结构体 Student,其包含 3 个成员:

int stu_no;   // 学生学号
char *name;   // 学生姓名
int scores;   // 学生成绩

接收标准输入提供的 N 个学生的信息,按照以下规则对学生信息进行排序:

  • 学生成绩升序(从小到大)排序;
  • 如果学生成绩相同,按照学号降序排序(从大到小)排序。

排序后按照指定格式重新输出全体学生信息。

Input

第 1 行为一个正整数 N,表示接下来提供的学生信息数目, \(1 <= N <= 10\)

接下来 N 行按照姓名(仅包含大小写英文字母)、学号(由3位数字构成)、成绩(介于0~100)的顺序输入,以空格分隔。

所有学生的学号是唯一的。

Output

经过排序后的 N 行学生信息,按照学号、姓名、成绩的顺序输出,以空格分隔。

最后一行输出完毕后不要输出多余的换行符。

Sample Input 1

3
Tom 137 65
Jerry 139 75
Amy 131 75

Sample Output 1

137 Tom 65
139 Jerry 75
131 Amy 75

Hint

提示:

  • 使用动态分配内存的方式访问结构体指针数组、正确释放动态内存分配空间、通过本题所有测试点,总成绩可获得 5 分加分。

警告:

  • 如果没有按照题目要求定义结构体或修改结构体成员的数据类型,则本题最多按50%的成绩计入总分;
  • 若直接按照测试用例输出结果,本题作答无效;
  • 若使用C语言作答,仅允许引入 stdio.hstdlib.h 头文件;若使用C++语言作答,仅允许引入 iostreamcstdlib 头文件,引入其他任何头文件本题作答无效。

作答情况

Title Total AC Rate 通过人数
停车收费 364 9.07% 33
卢卡斯数 244 3.69% 9
简易图像模糊滤镜 130 11.54% 15
单词倒序(文件版) 70 4.29% 3
成绩排序 146 7.53% 11