c语言有关同学校对不同专业平行志愿录取过程代码
时间: 2023-08-01 17:09:55 浏览: 53
以下是一个简单的 C 代码示例,用于模拟同学校对不同专业平行志愿录取过程:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100 //最大学生数
#define MAX_DEPARTMENTS 10 //最大专业数
#define MAX_PREFERENCES 3 //每个学生的最大志愿数
typedef struct {
char name[20]; //学生姓名
int preferences[MAX_PREFERENCES]; //志愿列表
int admitted; //是否已被录取
int department; //所在专业
} Student;
typedef struct {
char name[20]; //专业名称
int capacity; //招生人数
int admitted; //已录取人数
int students[MAX_STUDENTS]; //录取的学生列表
} Department;
int main() {
int i, j, k;
int num_students, num_departments;
Student students[MAX_STUDENTS];
Department departments[MAX_DEPARTMENTS];
//读入数据
printf("请输入学生数和专业数:\n");
scanf("%d%d", &num_students, &num_departments);
printf("请输入学生姓名和志愿(最多%d个),每个志愿用空格隔开:\n", MAX_PREFERENCES);
for (i = 0; i < num_students; i++) {
scanf("%s", students[i].name);
for (j = 0; j < MAX_PREFERENCES; j++) {
scanf("%d", &students[i].preferences[j]);
students[i].preferences[j]--; //将专业编号转换为从0开始的下标
}
}
printf("请输入专业名称和招生人数:\n");
for (i = 0; i < num_departments; i++) {
scanf("%s%d", departments[i].name, &departments[i].capacity);
departments[i].admitted = 0;
}
//平行志愿录取过程
for (k = 0; k < MAX_PREFERENCES; k++) {
for (i = 0; i < num_students; i++) {
if (!students[i].admitted) { //未被录取的学生
int department = students[i].preferences[k];
if (departments[department].admitted < departments[department].capacity) { //该专业还有名额
departments[department].students[departments[department].admitted] = i;
departments[department].admitted++;
students[i].admitted = 1;
students[i].department = department;
}
}
}
}
//输出结果
printf("录取结果如下:\n");
for (i = 0; i < num_departments; i++) {
printf("%s专业录取了以下%d名学生:\n", departments[i].name, departments[i].admitted);
for (j = 0; j < departments[i].admitted; j++) {
int student = departments[i].students[j];
printf("%s\n", students[student].name);
}
printf("\n");
}
return 0;
}
```
该代码使用结构体存储学生和专业信息,并且实现了一个简单的平行志愿录取过程。首先读入学生和专业的信息,然后按照学生的志愿列表,依次尝试录取学生。如果学生未被录取且志愿列表中的某个专业还有名额,则将该学生录取到该专业,并标记该学生已被录取。最后输出各个专业录取的学生列表。