pta c语言 程序填空题:结构体数组复制
时间: 2025-06-23 07:28:25 浏览: 17
### 关于PTA平台上的C语言程序填空题:结构体数组复制
当处理涉及结构体数组的操作时,尤其是复制操作,理解如何正确传递和访问这些数据至关重要。下面展示了一个具体的例子来说明如何实现这一功能。
#### 定义并初始化结构体数组
首先定义一个学生信息的结构体,并创建一个包含多个此类记录的数组:
```c
#include <stdio.h>
#include <string.h>
struct Student {
char name[20];
int score;
};
int main() {
struct Student students[10];
// 输入10位同学的名字以及他们的分数
for (int i = 0; i < 10; ++i) {
printf("Enter student %d's name and C language grade:\n", i + 1);
scanf("%s %d", students[i].name, &students[i].score);
}
```
这段代码展示了如何声明`Student`类型的结构体变量,并通过循环读取用户的输入以填充该数组中的每一个元素[^1]。
#### 实现结构体数组的深拷贝
为了安全地复制整个结构体数组而不只是其地址,在目标位置分配足够的空间是非常重要的。这里提供了一种方法来进行这样的深层复制:
```c
// 创建一个新的相同大小的空间用于存储副本
struct Student copiedStudents[10];
for (int i = 0; i < 10; ++i){
strcpy(copiedStudents[i].name, students[i].name); // 复制字符串成员
copiedStudents[i].score = students[i].score; // 整型可以直接赋值
}
```
此部分实现了对学生信息列表的一个完整的、独立的副本来确保不会因为修改原表而影响到新表的数据。
#### 对结构体数组按成绩降序排序后输出
最后一步是对已有的学生成绩进行排序并将结果打印出来:
```c
void sortAndPrint(struct Student *arr, size_t n) {
// 使用简单的冒泡排序算法对成绩字段进行降序排列
for (size_t i = 0; i < n - 1; ++i)
for (size_t j = 0; j < n - 1 - i; ++j)
if (arr[j].score < arr[j + 1].score) {
struct Student temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
// 输出排序后的名单
puts("\nSorted list by descending order of scores:");
for (size_t k = 0; k < n; ++k)
printf("%s : %d\n", arr[k].name, arr[k].score);
}
sortAndPrint(students, sizeof(students)/sizeof(*students));
```
上述代码片段不仅完成了对原始数组的排序工作,还提供了直观的结果展示方式。
阅读全文
相关推荐


















