用c语言设计一个按先来先服务实现处理器调度的程序。
时间: 2024-02-23 10:01:55 浏览: 9
以下是一个简单的按先来先服务(FCFS)实现处理器调度的C语言程序,它使用了一个结构体数组来存储进程的信息,包括进程名、到达时间、服务时间和完成时间:
```c
#include <stdio.h>
#define MAX_N 100
struct Process {
char name[10];
int arriveTime;
int serviceTime;
int finishTime;
};
int main() {
int n, i, j;
struct Process processes[MAX_N];
float avgWaitTime = 0, avgTurnaroundTime = 0;
// 输入进程信息
printf("请输入进程个数:");
scanf("%d", &n);
printf("请输入进程信息(格式:进程名 到达时间 服务时间):\n");
for (i = 0; i < n; i++) {
scanf("%s %d %d", &processes[i].name, &processes[i].arriveTime, &processes[i].serviceTime);
}
// 按到达时间排序
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (processes[i].arriveTime > processes[j].arriveTime) {
struct Process temp = processes[i];
processes[i] = processes[j];
processes[j] = temp;
}
}
}
// 计算完成时间、等待时间和周转时间
for (i = 0; i < n; i++) {
if (i == 0) {
processes[i].finishTime = processes[i].arriveTime + processes[i].serviceTime;
} else {
processes[i].finishTime = processes[i-1].finishTime + processes[i].serviceTime;
}
int turnaroundTime = processes[i].finishTime - processes[i].arriveTime;
int waitTime = turnaroundTime - processes[i].serviceTime;
avgTurnaroundTime += turnaroundTime;
avgWaitTime += waitTime;
}
// 输出结果
printf("进程名 到达时间 服务时间 完成时间 等待时间 周转时间\n");
for (i = 0; i < n; i++) {
printf("%s\t%d\t%d\t%d\t%d\t%d\n", processes[i].name, processes[i].arriveTime, processes[i].serviceTime, processes[i].finishTime, processes[i].finishTime - processes[i].arriveTime - processes[i].serviceTime, processes[i].finishTime - processes[i].arriveTime);
}
printf("平均等待时间:%.2f\n", avgWaitTime/n);
printf("平均周转时间:%.2f\n", avgTurnaroundTime/n);
return 0;
}
```
该程序先输入进程个数和进程信息,然后按到达时间对进程进行排序,接着计算每个进程的完成时间、等待时间和周转时间,并输出结果和平均等待时间、平均周转时间。