XJTU计算机25级C程序设计期末考试

A卷

1. 计算

题目描述

给出一个区间 \([l, r]\),将这个区间划分为9个平均的小区间,共10个区间端点(包括 \(l, r\)),分别计算每个点的函数值,并将其加在一起,输出这十个函数值的和,保留4位小数。

函数:\(f(x) = x^2 - 3x + 2\)

输入格式

一行,两个整数 \(l\)\(r\),用空格分隔。

输出格式

一个浮点数,表示十个端点函数值的和,保留四位小数。

样例

输入:0 9
输出:170.0000

2. 回型数组

题目描述

输入 \(n\),输出一个 \(n \times n\) 大小的数组,要求数组具有回型结构,即从里层到外层,数依次为 1,2,3,...

输入格式

一行,一个整数 \(n\)

输出格式

输出 \(n\) 行,每行 \(n\) 个整数,每个整数之间用一个空格分隔,行末无多余空格。

样例1

输入:6
输出:
3 3 3 3 3 3
3 2 2 2 2 3
3 2 1 1 2 3
3 2 1 1 2 3
3 2 2 2 2 3
3 3 3 3 3 3

样例2

输入:5
输出:
3 3 3 3 3
3 2 2 2 3
3 2 1 2 3
3 2 2 2 3
3 3 3 3 3

3. 字符串转换

题目描述

输入一串字符串(可能包含空格),并给定一串模式串,要求字符串上的字母元素依次按照模式串上对应的方式对应进行转换:

  1. 根据模式串上对应字母的偏移值为:当模式串上的字母为大写时,其偏移值为其与 'A' ASCII 码的差值,当模式串上的字母为小写时,其偏移值为其与 'a' ASCII 码的差值。
  2. 字符串与模式串循环匹配。
  3. 大写字母保持为大写字母,小写字母保持为小写字母。
  4. 转换过程中 'z' + 1 = 'a', 'Z' + 1 = 'A'

输入格式

  • 第一行:待转换的字符串。
  • 第二行:模式串。

输出格式

一行,转换后的字符串。

样例

输入:
E#q A!j
bD
输出:
F#t B!m

4. 回文山峰

题目描述

给定长度为 \(n\) 的数组 nums,定义回文山峰区间满足3个条件:

  1. 对于区间 \([l, r]\),区间最大值(索引从0开始)为 nums[ (l + r) / 2 ]
  2. 对于任意 \(k \in [l, (l + r) / 2 )\)nums[k + 1] > nums[ k ]
  3. 对于任意 \(k \in [(l + r) / 2, r )\)nums[k + 1] < nums[ k ]

输出所有的回文山峰区间,及其山峰的索引值,如果没有回文山峰,输出 -1

输入格式

  • 第一行:一个整数 \(n\)
  • 第二行:\(n\) 个整数,表示数组 nums,用空格分隔。

输出格式

每行输出一个区间,格式为 [l,r]山峰索引。如果没有,输出 -1

样例1

输入:
7
1 3 5 7 5 3 1
输出:
[0,6]3
[1,5]3
[2,4]3

样例2

输入:
4
1 2 3 4
输出:
-1

5. 显卡测试

题目描述

定义一个结构体 GPU,包含:

  • id:显卡编号(int
  • model[30]:显卡名称(char 数组)
  • memory:显存(int
  • scores[3]:3项测试分数(double
  • avg_score:3项测试平均分(double

要求实现3个函数:

  1. void input(GPU g[], int n):输入 \(n\) 个显卡的信息。
  2. void process(GPU g[], int n):计算每个显卡的3项测试平均分,并以平均分为第一关键字(降序)、显存为第二关键字(降序)排序。
  3. void output(GPU g[], int n):输出排序后的结果,包括 id, model, avg_score(保留两位小数)。

输入格式

  • 第一行:整数 \(n\)
  • 接下来 \(n\) 行:每行包含 id, model, memory, scores[0], scores[1], scores[2],用空格分隔。

输出格式

\(n\) 行,每行输出一个显卡的 id, model, avg_score

样例

输入:
4
1 name1 16 1.00 2.00 3.00
2 name2 24 1.00 2.00 3.00
3 name3 16 4.00 5.00 5.00
4 name4 32 5.00 5.00 5.00
输出:
4 name4 5.00
3 name3 4.66
2 name2 2.00
1 name1 2.00

B卷

1. 均匀采样

题目描述

给定一个闭区间 \([l, r]\),要求在区间内均匀采样五个点,包括区间的两个端点。将这五个采样点的值依次代入给定的二次函数: \(f(x) = x^2 - x + 1\) 计算每个采样点对应的函数值,然后将这五个函数值相乘,最后输出乘积的结果,保留四位小数。

输入格式

一行,两个整数 \(l\)\(r\),表示区间的左端点和右端点,用空格分隔。 数据范围:\(-100 \leq l < r \leq 100\)

输出格式

一个浮点数,表示五个采样点函数值的乘积,保留四位小数。

均匀采样规则

采样点的计算公式: \(x_i = l + i \times \frac{r - l}{4}, \quad i = 0, 1, 2, 3, 4\)

样例

输入:0 4
输出:121.0000

2. 数字方阵

题目描述

给定一个正整数 \(n\) (\(1 \leq n \leq 100\)),构造一个 \(n \times n\) 的数字方阵,方阵中每个位置的值由其所在层数决定:

  • 方阵的最外层(最外面一圈)所有元素均为 1。
  • 每向内一层,该层所有元素的值比外层增加 1。

输入格式

一行,一个整数 \(n\)

输出格式

输出 \(n\) 行,每行 \(n\) 个整数,表示构造出的方阵。每个整数之间用一个空格分隔,行末无多余空格。

示例1

输入:3
输出:
1 1 1
1 2 1
1 1 1

示例2

输入:4
输出:
1 1 1 1
1 2 2 1
1 2 2 1
1 1 1 1

示例3

输入:5
输出:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

3. 字符串移位加密

题目描述

现有一个基于字母移位的加密算法。算法使用一个密钥字符串对明文进行逐字符加密,加密方式为将明文字符按照密钥字符决定的偏移量进行移位。

加密规则

  1. 密钥预处理:将密钥字符串 \(k\) 倒序排列。
  2. 偏移量计算:对于密钥中的每个字符:
  3. 若为小写字母,偏移量 = 该字符ASCII码值 - 'a'的ASCII码值。
  4. 若为大写字母,偏移量 = 该字符ASCII码值 - 'A'的ASCII码值。
  5. 加密操作
  6. 对明文的第 \(i\) 个字符(从0开始计数):
    • 取预处理后密钥的第 \((i \mod 密钥长度)\) 个字符(密钥循环使用)。
    • 计算该密钥字符对应的偏移量。
    • 将明文字符的ASCII码值增加该偏移量。
  7. 大小写保持:明文字符加密后保持原有大小写状态。
  8. 字母表循环:移位操作在字母表内循环('z' 后接 'a''Z' 后接 'A')。

输入格式

输入共两行:

  • 第一行:字符串 \(m\),表示明文(仅包含大小写字母)。
  • 第二行:字符串 \(k\),表示密钥(仅包含大小写字母)。

输出格式

输出一行,为加密后的密文字符串(保持与明文对应的大小写)。

样例1

输入:
akJe
cB
输出:
bmKg

样例2

输入:
XYZxyz
AbC
输出:
CBAzyx

4. 山峰序列

题目描述

给定一个整数序列,请找出所有山峰区间,并按照特定的顺序输出。

  • 山峰:对于序列中的任意三个连续元素 a[i-1], a[i], a[i+1](其中 \(1 \leq i \leq n-2\)),如果满足 a[i] > a[i-1]a[i] > a[i+1],则称元素 a[i] 是一个山峰
  • 山峰区间:区间 \([i-1, i+1]\) 构成一个山峰区间

输入格式

  • 第一行包含一个整数 \(n\) ($ 3 \leq n \leq 1000$),表示序列的长度。
  • 第二行包含 \(n\) 个整数 a[0], a[1], ..., a[n-1],表示给定的序列,相邻数字之间用空格分隔(\(-10^6 \leq a[i] \leq 10^6\))。

输出格式

对于找到的每个山峰区间,按以下规则输出:

  • 输出顺序:优先按照山峰区间的左端点从小到大排序;如果左端点相同,则按照右端点从小到大排序。
  • 输出格式:每个山峰区间占一行,格式为 [左端点,右端点]山峰索引(所有索引从0开始计数)。
  • 如果没有山峰,输出 -1

样例1

输入:
5
1 3 2 5 4
输出:
[0,2]1
[2,4]3

样例2

输入:
7
4 2 5 1 6 3 7
输出:
[1,3]2
[3,5]4

样例3

输入:
4
1 2 3 4
输出:
-1

5. 结构体

题目描述

人工智能实验室正在对多个大语言模型(LLM)进行综合能力评估。每个LLM的评估包含四个维度:语言能力、代码能力、响应速度、情感得分。每个LLM的综合得分(total分数)计算公式为: total = 语言能力 × 0.3 + 代码能力 × 0.25 + 响应速度 × 0.25 + 情感得分 × 0.2

排序规则

  1. 按照综合得分(total分数)降序排列。
  2. 如果两个模型的综合得分相同,则按照模型名称的字典序升序排列。

输入格式

  • 第一行:一个整数 \(n\) (\(1 \leq n \leq 1000\)),表示待评估的大语言模型数量。
  • 接下来 \(n\) 行:每行描述一个LLM的信息,包含:模型名称(不含空格的字符串,长度不超过50)、语言能力(浮点数)、代码能力(浮点数)、响应速度(浮点数)、情感得分(浮点数)。

输出格式

按照排序规则输出排序后的结果,每行包含:排名、模型名称、综合得分(保留两位小数),格式为 排名 名称 得分

程序结构要求

必须定义结构体 LLM 并实现以下函数:

  • void inputLLMs(LLM llms[], int n)
  • void calculateTotal(LLM llms[], int n)
  • void sortLLMs(LLM llms[], int n)
  • void outputLLMs(LLM llms[], int n)

示例1

输入:
3
GPT-4 85.5 92.0 78.5 88.0
Claude 78.0 85.0 94.5 76.5
Bard 82.0 78.5 86.0 91.5
输出:
1 GPT-4 86.15
2 Bard 83.53
3 Claude 83.48

示例2

输入:
2
ModelA 80.0 80.0 80.0 80.0
ModelB 80.0 80.0 80.0 80.0
输出:
1 ModelA 80.00
2 ModelB 80.00