C语言按同一个学生可以选择3个不同的专业这种填法进行专业录取平行志愿并输出及按选择的不同专业中的一个专业编码交进行筛选代码怎么打
时间: 2023-09-10 20:05:08 浏览: 33
对于第一个问题,我理解的是需要实现一个专业录取平行志愿的程序,可以按照同一个学生选择3个不同的专业的填法进行录取,并输出录取结果。以下是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define NUM_STUDENTS 5
#define NUM_MAJORS 5
#define NUM_CHOICES 3
int main() {
// 专业编码表
char *major_codes[NUM_MAJORS] = {"MAJOR1", "MAJOR2", "MAJOR3", "MAJOR4", "MAJOR5"};
// 学生选择表
int student_choices[NUM_STUDENTS][NUM_CHOICES] = {
{0, 1, 2},
{1, 2, 3},
{2, 3, 4},
{3, 4, 0},
{4, 0, 1}
};
// 录取结果表
int admission_results[NUM_STUDENTS][NUM_CHOICES] = {0};
// 进行录取
for (int i = 0; i < NUM_STUDENTS; i++) {
for (int j = 0; j < NUM_CHOICES; j++) {
int choice = student_choices[i][j];
if (admission_results[choice][j] == 0) {
admission_results[choice][j] = i + 1;
break;
}
}
}
// 输出录取结果
for (int i = 0; i < NUM_MAJORS; i++) {
printf("%s: ", major_codes[i]);
for (int j = 0; j < NUM_CHOICES; j++) {
if (admission_results[i][j] != 0) {
printf("%d ", admission_results[i][j]);
}
}
printf("\n");
}
// 按专业编码进行筛选
char *target_major_code = "MAJOR2";
printf("Students admitted to %s:\n", target_major_code);
for (int i = 0; i < NUM_STUDENTS; i++) {
for (int j = 0; j < NUM_CHOICES; j++) {
int choice = student_choices[i][j];
if (admission_results[choice][j] == i + 1 && strcmp(major_codes[choice], target_major_code) == 0) {
printf("%d ", i + 1);
break;
}
}
}
printf("\n");
return 0;
}
```
程序中使用了一个二维数组`student_choices`来表示每个学生的选择情况,其中第一维是学生的编号,第二维是选择的顺序,从0开始。例如,`student_choices[0][1]`表示第一个学生的第二个选择。
程序中使用了一个二维数组`admission_results`来表示每个专业的录取情况,其中第一维是专业的编号,第二维是录取的顺序,从0开始。例如,`admission_results[2][1]`表示第三个专业的第二个录取。
程序中先进行了一次简单的录取过程,按照学生的选择顺序依次尝试录取,如果当前选择的专业还有名额,则录取成功,否则尝试下一个选择。
程序中最后按照专业编码进行了一次筛选,输出被录取到指定专业的学生编号。