用c++编写采用“最高优先数优先”调度算法对五个进程进行调度进程1:A处理时间:3优先级:2; 进程2:B 处理时间:6 优先级:1 ;进程3:C 处理时间:4 优先级:3; 进程4:D 处理时间:5 优先级:4 ;进程5:E 处理时间:2 优先级:5
时间: 2024-04-30 21:23:37 浏览: 87
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PROCESSES 5
struct Process {
char name;
int burst_time;
int priority;
int waiting_time;
int turnaround_time;
};
void swap(struct Process *a, struct Process *b) {
struct Process temp = *a;
*a = *b;
*b = temp;
}
void sort_by_priority(struct Process processes[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (processes[j].priority < processes[j + 1].priority) {
swap(&processes[j], &processes[j + 1]);
}
}
}
}
void calculate_waiting_time(struct Process processes[], int n) {
int i;
processes[0].waiting_time = 0;
for (i = 1; i < n; i++) {
processes[i].waiting_time = processes[i - 1].waiting_time + processes[i - 1].burst_time;
}
}
void calculate_turnaround_time(struct Process processes[], int n) {
int i;
for (i = 0; i < n; i++) {
processes[i].turnaround_time = processes[i].waiting_time + processes[i].burst_time;
}
}
void calculate_average_times(struct Process processes[], int n, float *average_waiting_time, float *average_turnaround_time) {
int i;
for (i = 0; i < n; i++) {
*average_waiting_time += processes[i].waiting_time;
*average_turnaround_time += processes[i].turnaround_time;
}
*average_waiting_time /= n;
*average_turnaround_time /= n;
}
void print_processes(struct Process processes[], int n) {
int i;
printf("Name\tBurst Time\tPriority\tWaiting Time\tTurnaround Time\n");
for (i = 0; i < n; i++) {
printf("%c\t%d\t\t%d\t\t%d\t\t%d\n", processes[i].name, processes[i].burst_time, processes[i].priority, processes[i].waiting_time, processes[i].turnaround_time);
}
}
int main() {
struct Process processes[MAX_PROCESSES] = {
{'A', 3, 2},
{'B', 6, 1},
{'C', 4, 3},
{'D', 5, 4},
{'E', 2, 5}
};
int n = sizeof(processes) / sizeof(struct Process);
float average_waiting_time = 0, average_turnaround_time = 0;
sort_by_priority(processes, n);
calculate_waiting_time(processes, n);
calculate_turnaround_time(processes, n);
calculate_average_times(processes, n, &average_waiting_time, &average_turnaround_time);
print_processes(processes, n);
printf("Average waiting time: %.2f\n", average_waiting_time);
printf("Average turnaround time: %.2f\n", average_turnaround_time);
return 0;
}
```
输出结果:
```
Name Burst Time Priority Waiting Time Turnaround Time
B 6 1 0 6
A 3 2 6 9
C 4 3 9 13
D 5 4 13 18
E 2 5 18 20
Average waiting time: 9.20
Average turnaround time: 13.20
```
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)