用C语言实现先来先服务算法
时间: 2023-06-02 22:01:39 浏览: 51
以下是一个简单的用C语言实现先来先服务算法的示例代码:
```
#include<stdio.h>
#include<stdlib.h>
struct process{
int pid; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 执行时间
};
int main(){
int num_processes, i, j;
float avg_wait_time = 0, avg_turnaround_time = 0; // 平均等待时间和平均周转时间
printf("请输入进程数量:");
scanf("%d", &num_processes);
struct process p[num_processes], temp;
int waiting_time[num_processes], turnaround_time[num_processes]; // 每个进程的等待时间和周转时间
// 输入每个进程的到达时间和执行时间
for(i=0; i<num_processes; i++){
printf("请输入进程 %d 的到达时间和执行时间:", i+1);
scanf("%d %d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i+1;
}
// 对进程按照到达时间排序(冒泡排序)
for(i=0; i<num_processes-1; i++){
for(j=0; j<num_processes-i-1; j++){
if(p[j].arrival_time > p[j+1].arrival_time){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
// 计算每个进程的等待时间和周转时间
waiting_time[0] = 0;
turnaround_time[0] = p[0].burst_time;
for(i=1; i<num_processes; i++){
waiting_time[i] = waiting_time[i-1] + p[i-1].burst_time - p[i].arrival_time + p[i-1].arrival_time;
turnaround_time[i] = waiting_time[i] + p[i].burst_time;
}
// 计算平均等待时间和平均周转时间
for(i=0; i<num_processes; i++){
avg_wait_time += waiting_time[i];
avg_turnaround_time += turnaround_time[i];
}
avg_wait_time /= num_processes;
avg_turnaround_time /= num_processes;
// 输出结果
printf("\n进程ID\t到达时间\t执行时间\t等待时间\t周转时间\n");
for(i=0; i<num_processes; 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, waiting_time[i], turnaround_time[i]);
}
printf("平均等待时间 = %f\n", avg_wait_time);
printf("平均周转时间 = %f\n", avg_turnaround_time);
return 0;
}
```
该程序首先输入进程数量,然后依次输入每个进程的到达时间和执行时间。接着,该程序使用冒泡排序算法将进程按照到达时间排序,然后计算每个进程的等待时间和周转时间。最后,该程序输出每个进程的进程ID、到达时间、执行时间、等待时间和周转时间,以及平均等待时间和平均周转时间。