使用C语言编写短作业优先调度算法,要求键盘输入作业请求,其中作业开始时间使用时钟法表示,并在最后输出平均周转时间和带权平均周转时间
时间: 2024-03-25 14:39:06 浏览: 24
好的,以下是使用C语言编写短作业优先调度算法的示例代码:
```c
#include <stdio.h>
struct Job {
int id; // 作业编号
int arriveTime; // 到达时间
int burstTime; // 执行时间
int waitingTime; // 等待时间
int turnaroundTime; // 周转时间
float weightTurnaroundTime; // 带权周转时间
};
void sortJobs(struct Job *jobs, int n) {
// 对作业按照执行时间进行升序排序
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (jobs[i].burstTime > jobs[j].burstTime) {
struct Job temp = jobs[i];
jobs[i] = jobs[j];
jobs[j] = temp;
}
}
}
}
float calculateAvgTurnaroundTime(struct Job *jobs, int n) {
float sum = 0;
for (int i = 0; i < n; i++) {
sum += jobs[i].turnaroundTime;
}
return sum / n;
}
float calculateAvgWeightTurnaroundTime(struct Job *jobs, int n) {
float sum = 0;
for (int i = 0; i < n; i++) {
sum += jobs[i].weightTurnaroundTime;
}
return sum / n;
}
int main() {
int n; // 作业数量
printf("请输入作业数量:");
scanf("%d", &n);
struct Job jobs[n];
for (int i = 0; i < n; i++) {
printf("请输入作业信息(作业编号,到达时间,执行时间):");
scanf("%d%d%d", &jobs[i].id, &jobs[i].arriveTime, &jobs[i].burstTime);
}
sortJobs(jobs, n); // 对作业按照执行时间进行升序排序
int currentTime = 0;
for (int i = 0; i < n; i++) {
// 计算等待时间和周转时间
jobs[i].waitingTime = currentTime - jobs[i].arriveTime;
jobs[i].turnaroundTime = jobs[i].waitingTime + jobs[i].burstTime;
jobs[i].weightTurnaroundTime = (float) jobs[i].turnaroundTime / jobs[i].burstTime;
currentTime += jobs[i].burstTime; // 更新当前时间
}
// 输出每个作业的信息
printf("作业编号\t到达时间\t执行时间\t等待时间\t周转时间\t带权周转时间\n");
for (int i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n",
jobs[i].id, jobs[i].arriveTime, jobs[i].burstTime,
jobs[i].waitingTime, jobs[i].turnaroundTime, jobs[i].weightTurnaroundTime);
}
// 计算平均周转时间和带权平均周转时间
float avgTurnaroundTime = calculateAvgTurnaroundTime(jobs, n);
float avgWeightTurnaroundTime = calculateAvgWeightTurnaroundTime(jobs, n);
// 输出平均周转时间和带权平均周转时间
printf("平均周转时间:%.2f\n", avgTurnaroundTime);
printf("带权平均周转时间:%.2f\n", avgWeightTurnaroundTime);
return 0;
}
```
在上面的代码中,我们使用了一个 `Job` 结构体来表示一个作业,其中包含作业编号、到达时间、执行时间、等待时间、周转时间和带权周转时间等信息。首先,我们通过键盘输入作业请求,并对作业按照执行时间进行升序排序。然后,我们依次计算每个作业的等待时间、周转时间和带权周转时间,并根据这些信息输出每个作业的信息。最后,我们计算平均周转时间和带权平均周转时间,并输出结果。
需要注意的是,本示例代码仅供参考,实际应用中可能需要根据具体的需求进行修改和优化。