c语言设计一个响应比最高者优先算法来模拟实现作业调度过程。要求:1.从键盘输入作业个数N,及每个作业的作业名、作业入井时间、估计运行时间。例如:A 8.00 1202.输出采用响应比最高者优先算法得到的每个作业调度序号、作业名、作业入井时间、开始调度时间、运行时间、结束时间、周转时间, 以及所有作业的平均周转时间。
时间: 2023-08-13 19:08:32 浏览: 89
设计一个按响应比高者优先调度算法实现进程调度的程序。
5星 · 资源好评率100%
好的,我可以帮你实现这个程序。下面是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_JOB 100
struct Job {
char name[20];
float arriveTime;
float runTime;
float startTime;
float endTime;
float turnaroundTime;
float responseRatio;
};
void swap(struct Job *a, struct Job *b) {
struct Job temp = *a;
*a = *b;
*b = temp;
}
void sortJobs(struct Job jobs[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (jobs[j].responseRatio < jobs[j+1].responseRatio) {
swap(&jobs[j], &jobs[j+1]);
}
}
}
}
void printJob(struct Job job) {
printf("%-10s %5.2f %5.2f %5.2f %5.2f %5.2f %5.2f\n", job.name, job.arriveTime, job.startTime, job.runTime, job.endTime, job.turnaroundTime, job.responseRatio);
}
int main() {
struct Job jobs[MAX_JOB];
int n;
printf("请输入作业个数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d个作业的作业名、作业入井时间、估计运行时间:", i+1);
scanf("%s%f%f", jobs[i].name, &jobs[i].arriveTime, &jobs[i].runTime);
jobs[i].responseRatio = (jobs[i].runTime + jobs[i].arriveTime) / jobs[i].runTime;
}
sortJobs(jobs, n);
float time = 0;
float avgTurnaroundTime = 0;
printf("调度序号 作业名 入井时间 开始时间 运行时间 结束时间 周转时间 响应比\n");
for (int i = 0; i < n; i++) {
jobs[i].startTime = time;
jobs[i].endTime = time + jobs[i].runTime;
jobs[i].turnaroundTime = jobs[i].endTime - jobs[i].arriveTime;
avgTurnaroundTime += jobs[i].turnaroundTime;
time = jobs[i].endTime;
printJob(jobs[i]);
}
avgTurnaroundTime /= n;
printf("平均周转时间:%5.2f\n", avgTurnaroundTime);
return 0;
}
```
程序中,我们首先定义了一个`Job`结构体,表示每个作业的信息。其中`responseRatio`表示响应比,计算公式为`(runTime + arriveTime) / runTime`。`swap`函数用来交换两个作业的位置。`sortJobs`函数用来对作业按照响应比从大到小排序。`printJob`函数用来输出每个作业的信息。`main`函数中,我们先从键盘输入作业的个数和每个作业的信息,计算响应比,并对作业按照响应比排序。接着,我们按照排好序的顺序,依次计算每个作业的开始时间、结束时间、周转时间和平均周转时间,并输出每个作业的信息和平均周转时间。
使用该程序,可以方便地模拟响应比最高者优先算法的作业调度过程,从而帮助我们更好地理解该算法的原理和实现。
阅读全文