用C语言编写一个给200个新生随机分配进50个宿舍的小程序。 (已知楼号,房号;学生学号,班级,性别等信息)
时间: 2023-08-31 18:28:15 浏览: 149
一个使用C语言设计的学生宿舍信息管理系统完全可以用于期末作业实现
### 回答1:
以下是一个简单的C语言程序,可以实现将200个新生随机分配进50个宿舍的功能。程序使用了rand()函数来生成随机数,同时使用了数组来存储学生和宿舍的信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_STUDENTS 200
#define NUM_DORMS 50
struct student {
int id;
char gender;
char class[20];
int dorm;
};
int main()
{
// 初始化随机数种子
srand(time(NULL));
// 创建学生数组
struct student students[NUM_STUDENTS];
for (int i = 0; i < NUM_STUDENTS; i++) {
students[i].id = i + 1;
students[i].gender = rand() % 2 == 0 ? 'M' : 'F';
sprintf(students[i].class, "Class %d", rand() % 10 + 1);
students[i].dorm = -1;
}
// 创建宿舍数组
int dorms[NUM_DORMS];
for (int i = 0; i < NUM_DORMS; i++) {
dorms[i] = i + 1;
}
// 随机分配宿舍
for (int i = 0; i < NUM_STUDENTS; i++) {
int dorm_index = rand() % NUM_DORMS;
while (dorms[dorm_index] == -1) {
dorm_index = rand() % NUM_DORMS;
}
students[i].dorm = dorms[dorm_index];
dorms[dorm_index] = -1;
}
// 输出学生信息
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("Student %d: Gender=%c, Class=%s, Dorm=%d\n", students[i].id, students[i].gender, students[i].class, students[i].dorm);
}
return 0;
}
```
程序首先创建了一个包含200个学生的数组,每个学生都有一个ID、性别、班级和宿舍号。然后,程序创建了一个包含50个宿舍的数组。接下来,程序使用rand()函数随机分配宿舍,直到所有宿舍都有学生为止。最后,程序输出所有学生的信息,包括他们的性别、班级和宿舍号。
### 回答2:
为了实现这个小程序,我们可以利用C语言中的随机函数和数据结构来完成分配进宿舍的任务。
首先,我们可以使用结构体来表示每个学生的信息,包括学号、班级、性别等。我们还可以使用另一个结构体来表示每个宿舍的信息,包括楼号、房号和已经分配的学生数量。
然后,我们可以在主函数中定义一个存储学生信息的数组,并初始化每个学生的信息。同时,我们还需要定义一个存储宿舍信息的数组,以及记录每个宿舍已分配学生数量的变量。
接下来,我们可以使用随机函数生成一个随机数,并根据这个随机数来确定每个学生被分配的宿舍。具体的分配算法可以是遍历宿舍数组,找到一个未满员的宿舍,并将学生信息加入该宿舍。
在分配完成后,我们可以输出每个宿舍中的学生信息,以及未分配宿舍的学生信息。
代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STUDENTS_NUM 200
#define DORMS_NUM 50
#define MAX_CAPACITY 4
typedef struct {
int studentID;
char classroom[20];
char gender;
} Student;
typedef struct {
int building;
int room;
int count;
Student students[MAX_CAPACITY];
} Dormitory;
int main() {
srand((unsigned)time(NULL)); // 设置随机数种子
Student students[STUDENTS_NUM];
Dormitory dorms[DORMS_NUM];
int studentIndex = 0;
// 初始化学生信息
for (int i = 0; i < STUDENTS_NUM; i++) {
students[i].studentID = i + 1;
sprintf(students[i].classroom, "class-%d", (i % 5) + 1);
students[i].gender = (i % 2) ? 'M' : 'F';
}
// 初始化宿舍信息
for (int i = 0; i < DORMS_NUM; i++) {
dorms[i].building = i / 10 + 1;
dorms[i].room = i % 10 + 1;
dorms[i].count = 0;
}
// 随机分配宿舍
for (int i = 0; i < STUDENTS_NUM; i++) {
int dormIndex = rand() % DORMS_NUM;
if (dorms[dormIndex].count < MAX_CAPACITY) {
dorms[dormIndex].students[dorms[dormIndex].count] = students[i];
dorms[dormIndex].count++;
}
else {
printf("宿舍已满,学生 %d 未分配宿舍\n", students[i].studentID);
}
}
// 输出宿舍信息
for (int i = 0; i < DORMS_NUM; i++) {
printf("宿舍楼:%d\t房号:%d\t人数:%d\n", dorms[i].building, dorms[i].room, dorms[i].count);
for (int j = 0; j < dorms[i].count; j++) {
printf("学号:%d\t班级:%s\t性别:%c\n", dorms[i].students[j].studentID, dorms[i].students[j].classroom, dorms[i].students[j].gender);
}
printf("\n");
}
return 0;
}
```
通过以上代码,我们使用了随机函数完成了宿舍分配,并最后输出了每个宿舍的学生信息以及未分配宿舍的学生信息。
### 回答3:
一个可能的解决方案如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct
{
int id;
int class;
char gender;
int dormitory;
int room;
} Student;
int main()
{
int i, j;
int num_students = 200;
int num_dormitory = 50;
int num_rooms = 4;
int capacity_per_room = 5;
int counter = 0;
// 初始化 random seed
srand(time(0));
// 创建学生数组,存储学生信息
Student students[num_students];
for (i = 0; i < num_students; i++)
{
students[i].id = i + 1; // 学号
students[i].class = rand() % 5 + 1; // 班级
students[i].gender = (rand() % 2 == 0) ? 'M' : 'F'; // 性别
students[i].dormitory = 0; // 初始宿舍号为0
students[i].room = 0; // 初始房号为0
}
// 随机分配宿舍
for (i = 1; i <= num_dormitory; i++)
{
for (j = 1; j <= num_rooms; j++)
{
int count = 0;
// 在该宿舍中找到未分配房间的学生
for (int k = 0; k < num_students; k++)
{
if (students[k].dormitory == 0 && students[k].room == 0)
{
// 将学生分配到这个宿舍和房间
students[k].dormitory = i;
students[k].room = j;
count++;
counter++;
if (count == capacity_per_room) // 房间满员
break;
}
}
}
}
// 输出学生分配结果
printf("学号\t班级\t性别\t宿舍\t房间\n");
for (i = 0; i < num_students; i++)
{
printf("%d\t%d\t%c\t%d\t%d\n", students[i].id, students[i].class, students[i].gender, students[i].dormitory, students[i].room);
}
return 0;
}
```
这个程序首先定义了一个 `Student` 结构体用于存储学生信息,然后使用随机数生成函数 `rand()` 分配学生的班级和性别。然后通过两层循环,逐个遍历宿舍和房间号,在每个房间中随机选择5个未分配学生作为宿舍成员。最后输出分配结果。
这个程序可以通过调整 `num_students`、`num_dormitory`、`num_rooms`、`capacity_per_room` 变量的值来适应不同规模的情况。
阅读全文