请为上述程序的代码,增加注释
时间: 2024-03-23 08:36:13 浏览: 61
代码 辅助 注释
好的,以下是加上注释的程序代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DOCTOR 7
#define MAX_DAY 7
typedef struct {
char name; // 医生姓名
int day; // 值班日期,从0开始,0表示星期一,1表示星期二,以此类推
} Duty;
Duty duty[MAX_DAY]; // 每天的值班医生
int used[MAX_DOCTOR]; // 记录医生是否已经排班
// 获取医生在数组中的下标
int getDoctorIndex(char name) {
return name - 'A';
}
// 设置医生的值班情况
void setDuty(int day, char name) {
int index = getDoctorIndex(name);
duty[day].name = name;
duty[day].day = day;
used[index] = 1; // 标记该医生已排班
}
// 输出每天的值班医生
void printDuty() {
for (int i = 0; i < MAX_DAY; i++) {
printf("星期%d:%c\n", i + 1, duty[i].name);
}
}
int main() {
int n;
scanf("%d", &n);
// 先设置星期四的值班医生为F
setDuty(3, 'F');
// 处理输入的条件
for (int i = 0; i < n; i++) {
char left, op, right; // 左操作数、比较运算符、右操作数
int day; // 值班日期
scanf(" %c %c %c", &left, &op, &right);
if (op == '=') { // 如果是等于关系,则直接设置值班情况
scanf("%d", &day);
setDuty(day - 1, left);
} else { // 如果是比较关系,则根据比较运算符设置值班情况
scanf("%d", &day);
int index_l = getDoctorIndex(left);
int index_r = getDoctorIndex(right);
if (op == '>') { // 如果是“晚于”关系
if (!used[index_l]) setDuty(day + 1, left); // 如果左操作数未排班,则将其排在右操作数后面一天
if (!used[index_r]) setDuty(day, right); // 如果右操作数未排班,则将其排在左操作数前面一天
} else { // 如果是“早于”关系
if (!used[index_l]) setDuty(day, left); // 如果左操作数未排班,则将其排在右操作数前面一天
if (!used[index_r]) setDuty(day + 1, right); // 如果右操作数未排班,则将其排在左操作数后面一天
}
}
}
printDuty(); // 输出每天的值班医生
return 0;
}
```
注释中解释了变量的含义、函数的作用以及程序的执行流程,方便理解和阅读程序。
阅读全文