设有四道作业,提交时刻和运行时间如下表: 作业号 提交时刻(时) 运行时间(小时) 1 8:00 2.0 2 8:50 0.5 3 9:00 0.1 4 9:50 0.2 编写C语言程序,实现高响应比优先调度算法。 要求输入提交时刻及运行时间,输出调度顺序。
时间: 2024-02-22 19:59:30 浏览: 61
高响应比优先调度算法C语言实现.doc
以下是使用 C 语言实现高响应比优先调度算法的程序。您可以将其复制到您的 C 代码编辑器中进行编译和运行。
```
#include <stdio.h>
// 定义作业结构体
struct Job {
int job_id;
float arrival_time;
float burst_time;
float completion_time;
float waiting_time;
float turnaround_time;
float response_ratio;
};
int main() {
int n, i, j;
float total_waiting_time = 0, total_turnaround_time = 0, avg_waiting_time, avg_turnaround_time;
printf("请输入作业数:");
scanf("%d", &n);
// 定义作业数组
struct Job job[n], temp;
// 输入作业信息
for (i = 0; i < n; i++) {
job[i].job_id = i + 1;
printf("请输入作业 %d 的提交时刻(时):", job[i].job_id);
scanf("%f", &job[i].arrival_time);
printf("请输入作业 %d 的运行时间(小时):", job[i].job_id);
scanf("%f", &job[i].burst_time);
}
// 计算响应比并排序
for (i = 0; i < n; i++) {
job[i].response_ratio = 1 + (job[i].waiting_time / job[i].burst_time);
}
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (job[j].response_ratio < job[j + 1].response_ratio) {
temp = job[j];
job[j] = job[j + 1];
job[j + 1] = temp;
}
}
}
// 计算作业完成时间、等待时间和周转时间
for (i = 0; i < n; i++) {
if (i == 0) {
job[i].completion_time = job[i].arrival_time + job[i].burst_time;
} else {
if (job[i].arrival_time > job[i - 1].completion_time) {
job[i].completion_time = job[i].arrival_time + job[i].burst_time;
} else {
job[i].completion_time = job[i - 1].completion_time + job[i].burst_time;
}
}
job[i].turnaround_time = job[i].completion_time - job[i].arrival_time;
job[i].waiting_time = job[i].turnaround_time - job[i].burst_time;
total_waiting_time += job[i].waiting_time;
total_turnaround_time += job[i].turnaround_time;
}
// 输出作业调度顺序和各项指标
printf("\n作业调度顺序:\n");
printf("作业号\t提交时刻(时)\t运行时间(小时)\t完成时刻(时)\t等待时间(小时)\t周转时间(小时)\t响应比\n");
for (i = 0; i < n; i++) {
printf("%d\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\n", job[i].job_id, job[i].arrival_time, job[i].burst_time, job[i].completion_time, job[i].waiting_time, job[i].turnaround_time, job[i].response_ratio);
}
avg_waiting_time = total_waiting_time / n;
avg_turnaround_time = total_turnaround_time / n;
printf("\n平均等待时间为:%.2f 小时\n", avg_waiting_time);
printf("平均周转时间为:%.2f 小时\n", avg_turnaround_time);
return 0;
}
```
该程序中,首先定义了一个作业结构体,包含作业号、提交时刻、运行时间、完成时刻、等待时间、周转时间和响应比等信息。然后通过输入作业数和每个作业的提交时刻和运行时间,创建一个作业数组。接着计算每个作业的响应比并进行排序,排序后按照高响应比优先调度算法的原则进行作业调度。最后计算出每个作业的完成时刻、等待时间和周转时间,并输出作业调度顺序和各项指标。
阅读全文