#include <stdio.h>
#include <string.h>
#define N 3
struct PCB {
char name[ 10 ] ;
int priority;
int needtime;
int runtime;
char state;
int finishtime; // 完成时间
int turntime; // 周转时间
} pcb[ N] ;
int current_time = 0 ;
// 输出进程状态(和你实验截图完全一样)
void output( ) {
printf ( "进程名\t 优先级\t 需运行时间\t 已运行时间\t 状态\n " ) ; for ( int i = 0 ; i < N; i++ ) {
printf ( "%s\t %d\t %d\t \t %d\t \t %c\n " , pcb[ i] .name ,
pcb[ i] .priority ,
pcb[ i] .needtime ,
pcb[ i] .runtime ,
pcb[ i] .state ) ;
}
}
// 输出周转时间统计
void print_turn( ) {
float total = 0 ;
printf ( "\n ===== 周转时间统计 =====\n " ) ; for ( int i = 0 ; i < N; i++ ) {
pcb[ i] .turntime = pcb[ i] .finishtime ;
total += pcb[ i] .turntime ;
printf ( "%s\t %d\t \t %d\n " , pcb
[ i
] .
name , pcb
[ i
] .
finishtime , pcb
[ i
] .
turntime ) ; }
printf ( "平均周转时间:%.2f\n " , total
/ N
) ; }
int main( ) {
// 初始化:aa、bb、cc(和你实验完全一样)
pcb[ 0 ] .priority = 0 ;
pcb[ 0 ] .needtime = 5 ;
pcb[ 0 ] .runtime = 0 ;
pcb[ 0 ] .state = 'W' ;
pcb[ 0 ] .finishtime = 0 ;
pcb[ 1 ] .priority = 0 ;
pcb[ 1 ] .needtime = 8 ;
pcb[ 1 ] .runtime = 0 ;
pcb[ 1 ] .state = 'W' ;
pcb[ 1 ] .finishtime = 0 ;
pcb[ 2 ] .priority = 1 ;
pcb[ 2 ] .needtime = 10 ;
pcb[ 2 ] .runtime = 0 ;
pcb[ 2 ] .state = 'W' ;
pcb[ 2 ] .finishtime = 0 ;
printf ( "===== 最高优先数调度算法 =====\n " ) ; output( ) ;
int finish = 0 ;
while ( finish < N) {
// 找优先级最高的进程
int max = - 1 , run = - 1 ;
for ( int i = 0 ; i < N; i++ ) {
if ( pcb[ i] .state == 'W' && pcb[ i] .priority > max) {
max = pcb[ i] .priority ;
run = i;
}
}
if ( run == - 1 ) break ;
// 运行
pcb[ run] .state = 'R' ;
printf ( "\n 运行进程:%s\n " , pcb
[ run
] .
name ) ;
current_time++;
pcb[ run] .runtime ++;
// 运行完成
if ( pcb[ run] .runtime == pcb[ run] .needtime ) {
pcb[ run] .state = 'F' ;
pcb[ run] .finishtime = current_time; // ✅ 赋值完成时间
finish++;
printf ( "进程 %s 运行完毕\n " , pcb
[ run
] .
name ) ; } else {
pcb[ run] .priority --; // 动态优先级-1
pcb[ run] .state = 'W' ;
}
output( ) ;
}
printf ( "\n ===== 所有进程调度完成 =====\n " ) ; print_turn( ) ; // 输出周转时间
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTiAzCgpzdHJ1Y3QgUENCIHsKICAgIGNoYXIgbmFtZVsxMF07CiAgICBpbnQgcHJpb3JpdHk7CiAgICBpbnQgbmVlZHRpbWU7CiAgICBpbnQgcnVudGltZTsKICAgIGNoYXIgc3RhdGU7CiAgICBpbnQgZmluaXNodGltZTsgIC8vIOWujOaIkOaXtumXtAogICAgaW50IHR1cm50aW1lOyAgICAvLyDlkajovazml7bpl7QKfSBwY2JbTl07CgppbnQgY3VycmVudF90aW1lID0gMDsKCi8vIOi+k+WHuui/m+eoi+eKtuaAge+8iOWSjOS9oOWunumqjOaIquWbvuWujOWFqOS4gOagt++8iQp2b2lkIG91dHB1dCgpIHsKICAgIHByaW50ZigiXG7lvZPliY3ov5vnqIvnirbmgIHvvJpcbiIpOwogICAgcHJpbnRmKCLov5vnqIvlkI1cdOS8mOWFiOe6p1x06ZyA6L+Q6KGM5pe26Ze0XHTlt7Lov5DooYzml7bpl7RcdOeKtuaAgVxuIik7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlc1x0JWRcdCVkXHRcdCVkXHRcdCVjXG4iLAogICAgICAgICAgICBwY2JbaV0ubmFtZSwKICAgICAgICAgICAgcGNiW2ldLnByaW9yaXR5LAogICAgICAgICAgICBwY2JbaV0ubmVlZHRpbWUsCiAgICAgICAgICAgIHBjYltpXS5ydW50aW1lLAogICAgICAgICAgICBwY2JbaV0uc3RhdGUpOwogICAgfQp9CgovLyDovpPlh7rlkajovazml7bpl7Tnu5/orqEKdm9pZCBwcmludF90dXJuKCkgewogICAgZmxvYXQgdG90YWwgPSAwOwogICAgcHJpbnRmKCJcbj09PT09IOWRqOi9rOaXtumXtOe7n+iuoSA9PT09PVxuIik7CiAgICBwcmludGYoIui/m+eoi+WQjVx05a6M5oiQ5pe26Ze0XHTlkajovazml7bpl7RcbiIpOwogICAgZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgIHBjYltpXS50dXJudGltZSA9IHBjYltpXS5maW5pc2h0aW1lOwogICAgICAgIHRvdGFsICs9IHBjYltpXS50dXJudGltZTsKICAgICAgICBwcmludGYoIiVzXHQlZFx0XHQlZFxuIiwgcGNiW2ldLm5hbWUsIHBjYltpXS5maW5pc2h0aW1lLCBwY2JbaV0udHVybnRpbWUpOwogICAgfQogICAgcHJpbnRmKCLlubPlnYflkajovazml7bpl7TvvJolLjJmXG4iLCB0b3RhbCAvIE4pOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIOWIneWni+WMlu+8mmFh44CBYmLjgIFjY++8iOWSjOS9oOWunumqjOWujOWFqOS4gOagt++8iQogICAgc3RyY3B5KHBjYlswXS5uYW1lLCAiYWEiKTsKICAgIHBjYlswXS5wcmlvcml0eSA9IDA7CiAgICBwY2JbMF0ubmVlZHRpbWUgPSA1OwogICAgcGNiWzBdLnJ1bnRpbWUgPSAwOwogICAgcGNiWzBdLnN0YXRlID0gJ1cnOwogICAgcGNiWzBdLmZpbmlzaHRpbWUgPSAwOwoKICAgIHN0cmNweShwY2JbMV0ubmFtZSwgImJiIik7CiAgICBwY2JbMV0ucHJpb3JpdHkgPSAwOwogICAgcGNiWzFdLm5lZWR0aW1lID0gODsKICAgIHBjYlsxXS5ydW50aW1lID0gMDsKICAgIHBjYlsxXS5zdGF0ZSA9ICdXJzsKICAgIHBjYlsxXS5maW5pc2h0aW1lID0gMDsKCiAgICBzdHJjcHkocGNiWzJdLm5hbWUsICJjYyIpOwogICAgcGNiWzJdLnByaW9yaXR5ID0gMTsKICAgIHBjYlsyXS5uZWVkdGltZSA9IDEwOwogICAgcGNiWzJdLnJ1bnRpbWUgPSAwOwogICAgcGNiWzJdLnN0YXRlID0gJ1cnOwogICAgcGNiWzJdLmZpbmlzaHRpbWUgPSAwOwoKICAgIHByaW50ZigiPT09PT0g5pyA6auY5LyY5YWI5pWw6LCD5bqm566X5rOVID09PT09XG4iKTsKICAgIG91dHB1dCgpOwoKICAgIGludCBmaW5pc2ggPSAwOwogICAgd2hpbGUoZmluaXNoIDwgTikgewogICAgICAgIC8vIOaJvuS8mOWFiOe6p+acgOmrmOeahOi/m+eoiwogICAgICAgIGludCBtYXggPSAtMSwgcnVuID0gLTE7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICBpZihwY2JbaV0uc3RhdGUgPT0gJ1cnICYmIHBjYltpXS5wcmlvcml0eSA+IG1heCkgewogICAgICAgICAgICAgICAgbWF4ID0gcGNiW2ldLnByaW9yaXR5OwogICAgICAgICAgICAgICAgcnVuID0gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYocnVuID09IC0xKSBicmVhazsKCiAgICAgICAgLy8g6L+Q6KGMCiAgICAgICAgcGNiW3J1bl0uc3RhdGUgPSAnUic7CiAgICAgICAgcHJpbnRmKCJcbui/kOihjOi/m+eoi++8miVzXG4iLCBwY2JbcnVuXS5uYW1lKTsKCiAgICAgICAgY3VycmVudF90aW1lKys7CiAgICAgICAgcGNiW3J1bl0ucnVudGltZSsrOwoKICAgICAgICAvLyDov5DooYzlrozmiJAKICAgICAgICBpZihwY2JbcnVuXS5ydW50aW1lID09IHBjYltydW5dLm5lZWR0aW1lKSB7CiAgICAgICAgICAgIHBjYltydW5dLnN0YXRlID0gJ0YnOwogICAgICAgICAgICBwY2JbcnVuXS5maW5pc2h0aW1lID0gY3VycmVudF90aW1lOyAgLy8g4pyFIOi1i+WAvOWujOaIkOaXtumXtAogICAgICAgICAgICBmaW5pc2grKzsKICAgICAgICAgICAgcHJpbnRmKCLov5vnqIsgJXMg6L+Q6KGM5a6M5q+VXG4iLCBwY2JbcnVuXS5uYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwY2JbcnVuXS5wcmlvcml0eS0tOyAgLy8g5Yqo5oCB5LyY5YWI57qnLTEKICAgICAgICAgICAgcGNiW3J1bl0uc3RhdGUgPSAnVyc7CiAgICAgICAgfQoKICAgICAgICBvdXRwdXQoKTsKICAgIH0KCiAgICBwcmludGYoIlxuPT09PT0g5omA5pyJ6L+b56iL6LCD5bqm5a6M5oiQID09PT09XG4iKTsKICAgIHByaW50X3R1cm4oKTsgIC8vIOi+k+WHuuWRqOi9rOaXtumXtAoKICAgIHJldHVybiAwOwp9