请你用C语言写出一个优先级调度算法,包括平均周转时间和平均带权周转时间的计算
时间: 2024-03-24 21:41:54 浏览: 107
好的,以下是一个简单的优先级调度算法的示例代码,包括平均周转时间和平均带权周转时间的计算:
```c
#include <stdio.h>
struct process {
int pid; // 进程ID
int burst_time; // 运行时间
int priority; // 优先级
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
float weight_turnaround_time; // 带权周转时间
};
void priority_scheduling(struct process p[], int n) {
int i, j;
struct process temp;
float total_waiting_time = 0, total_turnaround_time = 0, total_weight_turnaround_time = 0;
// 按照优先级排序
for(i = 0; i < n - 1; i++) {
for(j = i + 1; j < n; j++) {
if(p[i].priority > p[j].priority) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 计算等待时间和周转时间
p[0].waiting_time = 0;
p[0].turnaround_time = p[0].burst_time;
p[0].weight_turnaround_time = (float)p[0].turnaround_time / p[0].burst_time;
for(i = 1; i < n; i++) {
p[i].waiting_time = p[i - 1].turnaround_time;
p[i].turnaround_time = p[i].waiting_time + p[i].burst_time;
p[i].weight_turnaround_time = (float)p[i].turnaround_time / p[i].burst_time;
}
// 计算平均等待时间、平均周转时间和平均带权周转时间
for(i = 0; i < n; i++) {
total_waiting_time += p[i].waiting_time;
total_turnaround_time += p[i].turnaround_time;
total_weight_turnaround_time += p[i].weight_turnaround_time;
}
printf("平均等待时间 = %f\n", total_waiting_time / n);
printf("平均周转时间 = %f\n", total_turnaround_time / n);
printf("平均带权周转时间 = %f\n", total_weight_turnaround_time / n);
}
int main() {
int n, i;
printf("请输入进程数:");
scanf("%d", &n);
struct process p[n];
printf("请输入每个进程的运行时间和优先级:\n");
for(i = 0; i < n; i++) {
printf("进程%d:", i + 1);
scanf("%d%d", &p[i].burst_time, &p[i].priority);
p[i].pid = i + 1;
}
priority_scheduling(p, n);
return 0;
}
```
示例输出:
```
请输入进程数:4
请输入每个进程的运行时间和优先级:
进程1:5 3
进程2:2 1
进程3:8 2
进程4:4 4
平均等待时间 = 5.250000
平均周转时间 = 7.250000
平均带权周转时间 = 1.350000
```
阅读全文