使用C语言编程实现先来先服务算法
时间: 2023-07-26 08:20:48 浏览: 43
好的,使用C语言实现先来先服务算法(FCFS),可以按照以下步骤进行:
1. 定义进程结构体,包含进程ID、到达时间、服务时间、开始时间、完成时间、周转时间、带权周转时间等信息。
```c
struct Process {
int pid; // 进程ID
int arrive_time; // 到达时间
int service_time; // 服务时间
int start_time; // 开始时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
float w_turnaround_time;// 带权周转时间
};
```
2. 输入进程信息,可以手动输入或者从文件中读取。
```c
int n; // 进程数
struct Process processes[MAX_PROCESS]; // 进程数组
// 输入进程信息
printf("请输入进程数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入进程%d的到达时间和服务时间:", i + 1);
scanf("%d %d", &processes[i].arrive_time, &processes[i].service_time);
processes[i].pid = i + 1;
}
```
3. 按照到达时间对进程进行排序。
```c
// 按照到达时间对进程进行排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (processes[j].arrive_time > processes[j+1].arrive_time) {
struct Process temp = processes[j];
processes[j] = processes[j+1];
processes[j+1] = temp;
}
}
}
```
4. 计算每个进程的开始时间、完成时间、周转时间和带权周转时间。
```c
// 计算每个进程的开始时间、完成时间、周转时间和带权周转时间
int current_time = 0;
for (int i = 0; i < n; i++) {
if (current_time < processes[i].arrive_time) {
current_time = processes[i].arrive_time;
}
processes[i].start_time = current_time;
processes[i].finish_time = current_time + processes[i].service_time;
processes[i].turnaround_time = processes[i].finish_time - processes[i].arrive_time;
processes[i].w_turnaround_time = (float)processes[i].turnaround_time / processes[i].service_time;
current_time = processes[i].finish_time;
}
```
5. 输出每个进程的信息。
```c
// 输出每个进程的信息
printf("进程\t到达时间\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\t\t%.2f\n", processes[i].pid, processes[i].arrive_time, processes[i].service_time, processes[i].start_time, processes[i].finish_time, processes[i].turnaround_time, processes[i].w_turnaround_time);
}
```
完整代码实现如下: