用c语言编写sjf算法
时间: 2024-02-23 19:02:10 浏览: 69
以下是用 C 语言编写的 SJF(短作业优先)调度算法的示例代码:
```c
#include<stdio.h>
int main()
{
int n; // 进程数
int pid[20]; // 进程 ID 数组
int at[20]; // 到达时间数组
int bt[20]; // 执行时间数组
int wt[20]; // 等待时间数组
int tat[20]; // 周转时间数组
int ct[20]; // 完成时间数组
int i, j, temp;
float awt = 0, atat = 0; // 平均等待时间和平均周转时间
printf("Enter the number of processes: ");
scanf("%d", &n);
// 读入进程信息
for (i = 0; i < n; i++) {
printf("Enter process %d ID: ", i+1);
scanf("%d", &pid[i]);
printf("Enter process %d arrival time: ", i+1);
scanf("%d", &at[i]);
printf("Enter process %d burst time: ", i+1);
scanf("%d", &bt[i]);
}
// 根据到达时间排序
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (at[i] > at[j]) {
// 交换到达时间
temp = at[i];
at[i] = at[j];
at[j] = temp;
// 交换执行时间
temp = bt[i];
bt[i] = bt[j];
bt[j] = temp;
// 交换进程 ID
temp = pid[i];
pid[i] = pid[j];
pid[j] = temp;
}
}
}
// 计算完成时间
for (i = 0; i < n; i++) {
if (i == 0) {
ct[i] = at[i] + bt[i];
} else {
if (at[i] > ct[i-1]) {
ct[i] = at[i] + bt[i];
} else {
ct[i] = ct[i-1] + bt[i];
}
}
}
// 计算等待时间和周转时间
for (i = 0; i < n; i++) {
tat[i] = ct[i] - at[i];
wt[i] = tat[i] - bt[i];
awt += wt[i];
atat += tat[i];
}
// 输出结果
printf("\nProcess\tAT\tBT\tCT\tTAT\tWT\n");
for (i = 0; i < n; i++) {
printf("%d\t%d\t%d\t%d\t%d\t%d\n", pid[i], at[i], bt[i], ct[i], tat[i], wt[i]);
}
awt /= n;
atat /= n;
printf("\nAverage Waiting Time: %.2f\n", awt);
printf("Average Turnaround Time: %.2f\n\n", atat);
return 0;
}
```
此代码实现了 SJF 调度算法,可计算各个进程的等待时间、周转时间、平均等待时间和平均周转时间。
阅读全文