以下是用 C 语言实现的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义进程结构体 typedef struct { char name[10]; int arrivalTime; int runningTime; int priority; } Process; // 比较函数,用于优先级队列排序 int compare(const void *a, const void *b) { Process *p1 = (Process *)a; Process *p2 = (Process *)b; return p2->priority - p1->priority; } int main() { Process processes[4]; int i; // 输入进程信息 for (i = 0; i < 4; i++) { scanf("%s %d %d %d", processes[i].name, &processes[i].arrivalTime, &processes[i].runningTime, &processes[i].priority); } int currentTime = 0; int completedProcesses = 0; Process *runningProcess = NULL; Process readyQueue[4]; int readyQueueSize = 0; while (completedProcesses < 4) { // 将到达的进程放入就绪队列 for (i = 0; i < 4; i++) { if (processes[i].arrivalTime == currentTime) { readyQueue[readyQueueSize++] = processes[i]; } } // 如果没有运行进程且就绪队列不为空,选择优先级最高的进程运行 if (runningProcess == NULL && readyQueueSize > 0) { qsort(readyQueue, readyQueueSize, sizeof(Process), compare); runningProcess = &readyQueue[0]; readyQueueSize--; for (i = 0; i < readyQueueSize; i++) { readyQueue[i] = readyQueue[i + 1]; } } // 运行进程的优先级减 1,运行时间减 1 if (runningProcess!= NULL) { runningProcess->priority--; runningProcess->runningTime--; // 如果进程运行结束 if (runningProcess->runningTime == 0) { printf("%s 完成时间: %d\n", runningProcess->name, currentTime + 1); completedProcesses++; runningProcess = NULL; } } // 就绪进程的优先级加 1 for (i = 0; i < readyQueueSize; i++) { readyQueue[i].priority++; } currentTime++; } return 0; } ``` 额外需要注意的逻辑点: 1. 输入的进程信息格式要严格按照要求,包括字符串长度、数据类型和分隔方式。 2. 对于进程的调度和状态切换,要确保逻辑的准确性和完整性。 3. 处理就绪队列的操作,如添加、删除和排序,要注意边界情况和指针的使用。 [2024-11-21 16:58:31 | AI写代码神器 | 686点数解答]