设有四道作业,提交时刻和运行时间如下表: 作业号 提交时刻(时) 运行时间(小时) 1 8:00 2.0 2 8:50 0.5 3 9:00 0.1 4 9:50 0.2 编写C语言程序, 实现SJF调度算法。要求输入提交时刻及运行时间,输出调度顺序。
时间: 2024-02-21 17:02:11 浏览: 83
作业提交时可以传递三个参数-ORACLE_DBA教程
好的,以下是实现SJF调度算法的C语言程序,可以满足你的需求:
```
#include <stdio.h>
struct job {
int id; // 作业编号
float arrival_time; // 提交时刻
float exe_time; // 运行时间
};
int main() {
int n, i, j, min_idx;
float curr_time = 0; // 当前时间
struct job jobs[100], temp;
// 输入作业数量和每个作业的信息
printf("请输入作业数量:");
scanf("%d", &n);
printf("请输入每个作业的提交时刻和运行时间:\n");
for (i = 0; i < n; i++) {
jobs[i].id = i + 1;
scanf("%f%f", &jobs[i].arrival_time, &jobs[i].exe_time);
}
// 对作业按照提交时刻从小到大进行排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (jobs[i].arrival_time > jobs[j].arrival_time) {
temp = jobs[i];
jobs[i] = jobs[j];
jobs[j] = temp;
}
}
}
// 按照运行时间从小到大进行排序
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (jobs[j].exe_time < jobs[min_idx].exe_time) {
min_idx = j;
}
}
if (min_idx != i) {
temp = jobs[i];
jobs[i] = jobs[min_idx];
jobs[min_idx] = temp;
}
}
// 输出调度顺序
printf("作业调度顺序为:\n");
for (i = 0; i < n; i++) {
printf("作业%d\n", jobs[i].id);
curr_time += jobs[i].exe_time;
}
return 0;
}
```
你可以将上面的代码复制到本地的C语言开发环境中,编译运行后就可以输入作业的提交时刻和运行时间,然后输出调度顺序了。希望这个程序能够帮到你!
阅读全文