(1)模拟实现下面三个进程调度算法中的任意一个:①先来先服务算法;用C进行编译
时间: 2023-12-18 12:04:59 浏览: 38
以下是先来先服务算法的模拟实现,使用了C语言编写。
```c
#include<stdio.h>
//定义进程结构体
typedef struct Process {
int id; //进程ID
int arrivalTime; //到达时间
int burstTime; //需要执行的时间
int completionTime; //完成时间
int waitingTime; //等待时间
int turnaroundTime; //周转时间
} Process;
//计算各项时间
void calculateTime(Process *processes, int n) {
int currentTime = 0;
for(int i=0; i<n; i++) {
if(currentTime < processes[i].arrivalTime) {
currentTime = processes[i].arrivalTime;
}
processes[i].completionTime = currentTime + processes[i].burstTime;
processes[i].turnaroundTime = processes[i].completionTime - processes[i].arrivalTime;
processes[i].waitingTime = processes[i].turnaroundTime - processes[i].burstTime;
currentTime = processes[i].completionTime;
}
}
//按照到达时间排序
void sortProcesses(Process *processes, int n) {
for(int i=0; i<n-1; i++) {
for(int j=0; j<n-i-1; j++) {
if(processes[j].arrivalTime > processes[j+1].arrivalTime) {
Process temp = processes[j];
processes[j] = processes[j+1];
processes[j+1] = temp;
}
}
}
}
//打印结果
void printProcesses(Process *processes, int n) {
printf("进程\t到达时间\t服务时间\t完成时间\t等待时间\t周转时间\n");
for(int i=0; i<n; i++) {
printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].id, processes[i].arrivalTime, processes[i].burstTime, processes[i].completionTime, processes[i].waitingTime, processes[i].turnaroundTime);
}
printf("\n平均等待时间:%.2f\n", (float) calculateTotalWaitingTime(processes, n) / n);
printf("平均周转时间:%.2f\n", (float) calculateTotalTurnaroundTime(processes, n) / n);
}
//计算总等待时间
int calculateTotalWaitingTime(Process *processes, int n) {
int totalWaitingTime = 0;
for(int i=0; i<n; i++) {
totalWaitingTime += processes[i].waitingTime;
}
return totalWaitingTime;
}
//计算总周转时间
int calculateTotalTurnaroundTime(Process *processes, int n) {
int totalTurnaroundTime = 0;
for(int i=0; i<n; i++) {
totalTurnaroundTime += processes[i].turnaroundTime;
}
return totalTurnaroundTime;
}
int main() {
int n;
printf("请输入进程数:");
scanf("%d", &n);
Process processes[n];
//输入进程信息
for(int i=0; i<n; i++) {
printf("请输入进程%d的到达时间和需要执行的时间:", i+1);
scanf("%d %d", &processes[i].arrivalTime, &processes[i].burstTime);
processes[i].id = i+1;
}
//按照到达时间排序
sortProcesses(processes, n);
//计算各项时间
calculateTime(processes, n);
//打印结果
printProcesses(processes, n);
return 0;
}
```
程序运行后会先要求输入进程数,然后依次输入每个进程的到达时间和需要执行的时间。程序会按照到达时间进行排序,并计算出每个进程的完成时间、等待时间和周转时间,最后输出结果。
下面是程序的一个运行示例:
```
请输入进程数:4
请输入进程1的到达时间和需要执行的时间:0 8
请输入进程2的到达时间和需要执行的时间:1 3
请输入进程3的到达时间和需要执行的时间:2 4
请输入进程4的到达时间和需要执行的时间:3 1
进程 到达时间 服务时间 完成时间 等待时间 周转时间
1 0 8 8 0 8
2 1 3 11 7 10
3 2 4 15 9 13
4 3 1 16 12 13
平均等待时间:7.00
平均周转时间:11.00
```