#include <stdio.h>
#include <stdlib.h>
typedef struct {
float ready; // 到达时间
float run; // 执行时间
} Process;
int main() {
int i, n; // n用来记录进程的个数
float finish, sum; // finish完成时间,sum总周转时间
printf("输入进程的个数:");
scanf("%d", &n);
Process *processes = (Process *)malloc(n * sizeof(Process));
for (i = 0; i < n; i++) {
printf("请输入第%d个进程的到达时间与执行时间:\n", i + 1);
printf("到达时间=");
scanf("%f", &processes[i].ready);
printf("运行时间=");
scanf("%f", &processes[i].run);
}
// 按照到达时间对进程进行排序(升序)
for (i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (processes[j].ready > processes[j + 1].ready) {
// 交换位置
Process temp = processes[j];
processes[j] = processes[j + 1];
processes[j + 1] = temp;
}
}
}
finish = processes[0].ready + processes[0].run;
sum = finish - processes[0].ready;
//第一个到达进程
printf("进程\t到达时间\t执行时间\t周转时间\n");
printf("%d\t%.2f\t\t%.2f\t\t%.2f\n", 1,
processes[0].ready, processes[0].run, sum);
for (i = 1; i < n; i++) {
if (finish < processes[i].ready) {
finish = processes[i].ready;
}
finish += processes[i].run;
sum += finish - processes[i].ready;
printf("%d\t%.2f\t\t%.2f\t\t%.2f\n", i + 1,
processes[i].ready, processes[i].run,
finish - processes[i].ready);
}
printf("进程的平均周转时间为:%.2f\n", sum / n);
free(processes); // 释放动态分配的内存
return 0;
}
到达时间 | 执行时间 | 开始时间 | 结束时间 | 周转时间 |
0 | 3 | 0 | 3 | 3 |
2 | 4 | 8 | 12 | 10 |
1 | 5 | 3 | 8 | 7 |
周转时间 = 结束时间 - 到达时间
等待时间 = 周转时间 - 执行时间
执行时间 = 周转时间 - 等待时间
响应时间 = 开始时间 - 到达时间
响应比 = 1 +等待时间/执行时间
带权周转时间 = 周转时间 / 执行时间