使用c语言将56个人按没三个人一组分成若干组 要求代码完整可以运行
时间: 2024-09-07 17:00:56 浏览: 32
c代码-4.从键盘键盘输入3个整数,然后找出最小的数并输出。例如:输入"10,41,31",输出 "三个数是:10,41,31.最小数是:10."。
在C语言中,我们可以使用循环和动态内存管理来创建这样的程序。以下是一个完整的示例代码,它会将56个人分为每组3人:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id; // 学生ID
char name[20]; // 假设学生名字用字符串表示
} Student;
typedef struct Group {
Student members[3];
size_t count;
} Group;
Group* create_group() {
Group* group = (Group*)malloc(sizeof(Group));
group->count = 0;
return group;
}
void add_student_to_group(Student* student, Group** groups, size_t group_count) {
if (group_count >= 1 && groups[group_count - 1]->count == 3) {
// 当前组满,分配到下一个组
free(groups[group_count - 1]);
groups[group_count] = create_group();
group_count++;
}
groups[group_count - 1]->members[groups[group_count - 1]->count++] = *student;
}
void fill_groups(Student* students, int num_students, Group** groups) {
int i;
for (i = 0; i < num_students; i++) {
Student current_student = students[i];
add_student_to_group(¤t_student, groups, i / 3 + 1);
}
}
void print_groups(Group* groups, size_t group_count) {
for (size_t i = 0; i < group_count; i++) {
printf("Group %lu:\n", i + 1);
for (int j = 0; j < groups[i].count; j++) {
printf("%d: %s\n", groups[i].members[j].id, groups[i].members[j].name);
}
printf("\n");
}
}
int main() {
// 假设这里有56个学生的学号和姓名
Student students[] = {
{1, "张三"},
{2, "李四"},
... // 56个学生的数据
{56, "王五"}
};
int num_students = sizeof(students) / sizeof(students[0]);
Group* groups[19]; // 由于最多19个组,每个组3人,所以只需要19个组指针
fill_groups(students, num_students, groups);
print_groups(groups, 19);
// 清理内存
for (size_t i = 0; i < group_count; i++) {
free(groups[i]);
}
return 0;
}
```
这个程序首先定义了一个`Student`结构和`Group`结构,然后创建了一个`fill_groups`函数来填充分组,`print_groups`函数用于显示分组结果。注意,在实际使用时,你需要提供实际的56个学生的学号和姓名数据。
阅读全文