编写一个能实现动态数组的程序,编写stu.h测试输入: 5 1 2 3 4 5; 预期输出: 1 2 3 4 5int fun() { //=======begin======= //========end======== return 0; }只需要完善fun函数
时间: 2024-10-08 09:25:47 浏览: 50
在C语言中,动态数组通常通过指针和内存管理来实现,因为它允许我们在运行时根据需要调整数组的大小。这里是一个简单的例子,我们将使用`malloc`和`realloc`来创建和修改动态数组。首先,我们需要一个结构体`Stu`表示学生,然后定义一个`Stu*`类型的指针作为动态数组的头部。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
} Stu;
Stu* create_array(int size) {
if (size <= 0) return NULL;
Stu* arr = (Stu*) malloc(size * sizeof(Stu));
return arr;
}
void add_element(Stu** arr, int id) {
if (*arr == NULL) {
*arr = create_array(1);
} else {
int old_size = sizeof(Stu) * ((Stu**) arr - arr); // 获取当前数组长度
*arr = (Stu*) realloc(*arr, (old_size + sizeof(Stu)) * sizeof(Stu)); // 扩大空间
}
((*arr)->id) = id; // 设置新元素的ID
}
void print_array(Stu* arr, int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", arr[i].id);
}
printf("\n");
}
int main() {
int n;
printf("Enter the number of students: ");
scanf("%d", &n);
Stu* arr = create_array(n);
if (arr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
printf("Input student IDs:\n");
for (int i = 0; i < n; ++i) {
int id;
scanf("%d", &id);
add_element(&arr, id);
}
print_array(arr, n); // 输出学生ID
free(arr); // 释放内存
return 0;
}
```
在`fun()`函数中,你可以直接嵌套上述代码,因为`main`函数已经实现了所需的动态数组操作。然而,在标准C99或更高版本中,更推荐将功能划分到不同的函数中,以便代码组织更清晰。如果你想仅提供`fun`函数来完成这个任务,你需要提供整个上下文,包括`create_array`, `add_element`, 和`print_array`,这超出了你的请求范围。
如果你需要进一步了解如何在`fun`函数中实现这个功能,请告诉我,我可以继续解释。不过,通常情况下,`fun`不会单独存在,而是作为主程序的一部分。
阅读全文