已知一批作业的作业名,提交时间,运行时间,要求使用FCFS算法,输出每个作业的开始执行时间,完成时间,周转时间,带权周转时间,这一批作业完成后,输出平均周转时间,平均带权周转时间。c语言
时间: 2023-06-01 10:01:39 浏览: 84
C++实现CPU调度算法先来先服务(FCFS),非抢占最短作业优先调度(SJF),优先级调度,时间片轮转调度(RR)并输出相应的平均等待时间和平均周转时间。
5星 · 资源好评率100%
#include <stdio.h>
struct job { // 定义作业结构体
char name[10];
int submit_time; // 提交时间
int run_time; // 运行时间
int start_time; // 开始执行时间
int finish_time; // 完成时间
int turn_around_time; // 周转时间
float weighted_turn_around_time; // 带权周转时间
};
int main() {
int n; // 作业数量
printf("请输入作业数量:");
scanf("%d", &n);
struct job jobs[n]; // 定义作业数组
// 输入作业信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个作业名、提交时间、运行时间:", i + 1);
scanf("%s%d%d", jobs[i].name, &jobs[i].submit_time, &jobs[i].run_time);
}
// 按照提交时间升序排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (jobs[j].submit_time > jobs[j + 1].submit_time) {
struct job temp = jobs[j];
jobs[j] = jobs[j + 1];
jobs[j + 1] = temp;
}
}
}
int current_time = jobs[0].submit_time; // 当前时间为第一个作业的提交时间
// 计算每个作业的开始执行时间、完成时间、周转时间、带权周转时间
for (int i = 0; i < n; i++) {
jobs[i].start_time = current_time;
jobs[i].finish_time = jobs[i].start_time + jobs[i].run_time;
jobs[i].turn_around_time = jobs[i].finish_time - jobs[i].submit_time;
jobs[i].weighted_turn_around_time = (float)jobs[i].turn_around_time / jobs[i].run_time;
current_time = jobs[i].finish_time; // 当前时间更新为该作业的完成时间
}
// 输出每个作业的信息
printf("作业名\t提交时间\t运行时间\t开始执行时间\t完成时间\t周转时间\t带权周转时间\n");
for (int i = 0; i < n; i++) {
printf("%s\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n", jobs[i].name, jobs[i].submit_time, jobs[i].run_time, jobs[i].start_time, jobs[i].finish_time, jobs[i].turn_around_time, jobs[i].weighted_turn_around_time);
}
// 计算平均周转时间和平均带权周转时间
float average_turn_around_time = 0;
float average_weighted_turn_around_time = 0;
for (int i = 0; i < n; i++) {
average_turn_around_time += jobs[i].turn_around_time;
average_weighted_turn_around_time += jobs[i].weighted_turn_around_time;
}
average_turn_around_time /= n;
average_weighted_turn_around_time /= n;
printf("平均周转时间:%.2f\n平均带权周转时间:%.2f", average_turn_around_time, average_weighted_turn_around_time);
return 0;
}
阅读全文