编写C程序,模拟“最短作业优先(SJF)” 调度算法,编写以下函数,计算平均带权周转时间并返回。double sjf_weighted_time(int* arrival_time, int* run_time, int num) { int i, j, time = 0; double total_time = 0, total_wt = 0, avg_time, avg_wt;
时间: 2024-03-01 12:54:48 浏览: 100
好的,我已经将您的问题记录下来了。下面是符合您要求的C程序,用于模拟最短作业优先(SJF)调度算法,计算平均带权周转时间并返回。代码如下:
```c
#include <stdio.h>
double sjf_weighted_time(int* arrival_time, int* run_time, int num) {
int i, j, time = 0;
double total_time = 0, total_wt = 0, avg_time, avg_wt;
int temp, temp2;
double wt[num], tat[num];
for (i = 0; i < num; i++) {
for (j = i + 1; j < num; j++) {
if (run_time[i] > run_time[j]) {
temp = run_time[i];
run_time[i] = run_time[j];
run_time[j] = temp;
temp2 = arrival_time[i];
arrival_time[i] = arrival_time[j];
arrival_time[j] = temp2;
}
}
}
for (i = 0; i < num; i++) {
time += run_time[i];
tat[i] = time - arrival_time[i];
wt[i] = tat[i] - run_time[i];
total_time += tat[i];
total_wt += wt[i];
}
avg_time = total_time / num;
avg_wt = total_wt / num;
return avg_wt;
}
int main() {
int arrival_time[] = {0, 1, 2, 3};
int run_time[] = {2, 4, 6, 8};
int num = sizeof(arrival_time) / sizeof(arrival_time[0]);
double avg_wt = sjf_weighted_time(arrival_time, run_time, num);
printf("The average weighted turnaround time is: %lf\n", avg_wt);
return 0;
}
```
在该程序中,我们首先使用选择排序算法对进程的运行时间进行排序,以便按照最短作业优先(SJF)调度算法来运行。接下来,我们计算每个进程的周转时间和带权周转时间,然后将它们加起来并计算平均值。最后,我们将平均带权周转时间返回并在主函数中打印出来。
请注意,为了方便起见,我在主函数中提供了一组示例数据,您可以根据您的实际需求进行修改。
阅读全文