C语言实现先来先服务
时间: 2023-08-20 17:12:05 浏览: 41
下面是使用 C 语言实现先来先服务算法的一个简单例子:
```c
#include <stdio.h>
#include <stdlib.h>
struct process {
int pid; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
};
// 计算等待时间和周转时间
void calculate_time(struct process *p, int n) {
int i;
p[0].waiting_time = 0;
p[0].turnaround_time = p[0].burst_time;
for (i = 1; i < n; i++) {
p[i].waiting_time = p[i - 1].waiting_time + p[i - 1].burst_time;
p[i].turnaround_time = p[i].waiting_time + p[i].burst_time;
}
}
// 计算平均等待时间和平均周转时间
void calculate_average_time(struct process *p, int n, float *avg_waiting_time, float *avg_turnaround_time) {
int i;
int total_waiting_time = 0;
int total_turnaround_time = 0;
for (i = 0; i < n; i++) {
total_waiting_time += p[i].waiting_time;
total_turnaround_time += p[i].turnaround_time;
}
*avg_waiting_time = (float)total_waiting_time / n;
*avg_turnaround_time = (float)total_turnaround_time / n;
}
// 先来先服务算法
void fcfs(struct process *p, int n) {
int i;
calculate_time(p, n);
printf("PID\tArrival Time\tBurst Time\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].arrival_time, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time);
}
float avg_waiting_time, avg_turnaround_time;
calculate_average_time(p, n, &avg_waiting_time, &avg_turnaround_time);
printf("Average waiting time: %.2f\n", avg_waiting_time);
printf("Average turnaround time: %.2f\n", avg_turnaround_time);
}
int main() {
int n, i;
printf("Enter the number of processes: ");
scanf("%d", &n);
struct process *p = malloc(n * sizeof(struct process));
for (i = 0; i < n; i++) {
printf("Enter the arrival time and burst time of process %d: ", i + 1);
scanf("%d %d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i + 1;
}
fcfs(p, n);
free(p);
return 0;
}
```
在上面的代码中,我们定义了一个 `process` 结构体来存储每个进程的信息。`fcfs` 函数实现了先来先服务算法,并计算了每个进程的等待时间和周转时间。`calculate_average_time` 函数用于计算平均等待时间和平均周转时间。在 `main` 函数中,我们首先输入每个进程的到达时间和执行时间,然后调用 `fcfs` 函数来运行先来先服务算法。
相关推荐
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)