编程实现进程或作业先来先服务调度算法C语言
时间: 2023-06-17 22:02:13 浏览: 119
以下是一个简单的先来先服务调度算法的 C 语言代码示例,其中使用了结构体来表示进程:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESS 10
struct process {
int pid; // 进程 ID
int arrival; // 到达时间
int burst; // 执行时间
int wait; // 等待时间
int turnaround; // 周转时间
int completed; // 完成时间
};
int main() {
int n, i, j;
float avg_wait = 0, avg_turnaround = 0;
struct process p[MAX_PROCESS], temp;
printf("Enter the number of processes: ");
scanf("%d", &n);
// 输入每个进程的到达时间和执行时间
for (i = 0; i < n; i++) {
printf("Enter arrival time and burst time for process %d: ", i + 1);
scanf("%d %d", &p[i].arrival, &p[i].burst);
p[i].pid = i + 1;
p[i].completed = 0;
}
// 按照到达时间排序
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (p[i].arrival > p[j].arrival) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 计算等待时间、周转时间和完成时间
int current_time = 0;
for (i = 0; i < n; i++) {
if (p[i].arrival > current_time) {
current_time = p[i].arrival;
}
p[i].wait = current_time - p[i].arrival;
p[i].turnaround = p[i].wait + p[i].burst;
p[i].completed = current_time + p[i].burst;
current_time = p[i].completed;
avg_wait += p[i].wait;
avg_turnaround += p[i].turnaround;
}
// 打印结果
printf("\nProcess\tArrival\tBurst\tCompleted\tWaiting\tTurnaround\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t%d\t%d\t\t%d\t%d\n", p[i].pid, p[i].arrival, p[i].burst, p[i].completed, p[i].wait, p[i].turnaround);
}
avg_wait /= n;
avg_turnaround /= n;
printf("Average waiting time: %.2f\n", avg_wait);
printf("Average turnaround time: %.2f\n", avg_turnaround);
return 0;
}
```
这个程序会依次读入每个进程的到达时间和执行时间,并按照到达时间从小到大排序。然后,对于每个进程,计算它的等待时间、周转时间和完成时间,并计算出平均等待时间和平均周转时间。最后,将结果打印出来。
阅读全文