#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 ( "\n 进程名\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] .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++8iQp2b2lkIG91dHB1dCgpIHsKICAgIHByaW50ZigiXG7ov5vnqIvlkI1cdOS8mOWFiOe6p1x06L+Y6ZyA5pe26Ze0XHTlt7Lov5DooYzml7bpl7RcdOeKtuaAgVxuIik7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlc1x0JWRcdCVkXHRcdCVkXHRcdCVjXG4iLAogICAgICAgICAgICBwY2JbaV0ubmFtZSwKICAgICAgICAgICAgcGNiW2ldLnByaW9yaXR5LAogICAgICAgICAgICBwY2JbaV0ubmVlZHRpbWUgLSBwY2JbaV0ucnVudGltZSwKICAgICAgICAgICAgcGNiW2ldLnJ1bnRpbWUsCiAgICAgICAgICAgIHBjYltpXS5zdGF0ZSk7CiAgICB9Cn0KCi8vIOi+k+WHuuWRqOi9rOaXtumXtOe7n+iuoQp2b2lkIHByaW50X3R1cm4oKSB7CiAgICBmbG9hdCB0b3RhbCA9IDA7CiAgICBwcmludGYoIlxuPT09PT0g5ZGo6L2s5pe26Ze057uf6K6hID09PT09XG4iKTsKICAgIHByaW50Zigi6L+b56iL5ZCNXHTlrozmiJDml7bpl7RcdOWRqOi9rOaXtumXtFxuIik7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgcGNiW2ldLnR1cm50aW1lID0gcGNiW2ldLmZpbmlzaHRpbWU7CiAgICAgICAgdG90YWwgKz0gcGNiW2ldLnR1cm50aW1lOwogICAgICAgIHByaW50ZigiJXNcdCVkXHRcdCVkXG4iLCBwY2JbaV0ubmFtZSwgcGNiW2ldLmZpbmlzaHRpbWUsIHBjYltpXS50dXJudGltZSk7CiAgICB9CiAgICBwcmludGYoIuW5s+Wdh+WRqOi9rOaXtumXtO+8miUuMmZcbiIsIHRvdGFsIC8gTik7Cn0KCmludCBtYWluKCkgewogICAgLy8g5Yid5aeL5YyW77yaYWHjgIFiYuOAgWNj77yI5ZKM5L2g5a6e6aqM5a6M5YWo5LiA5qC377yJCiAgICBzdHJjcHkocGNiWzBdLm5hbWUsICJhYSIpOwogICAgcGNiWzBdLnByaW9yaXR5ID0gMDsKICAgIHBjYlswXS5uZWVkdGltZSA9IDU7CiAgICBwY2JbMF0ucnVudGltZSA9IDA7CiAgICBwY2JbMF0uc3RhdGUgPSAnVyc7CiAgICBwY2JbMF0uZmluaXNodGltZSA9IDA7CgogICAgc3RyY3B5KHBjYlsxXS5uYW1lLCAiYmIiKTsKICAgIHBjYlsxXS5wcmlvcml0eSA9IDA7CiAgICBwY2JbMV0ubmVlZHRpbWUgPSA4OwogICAgcGNiWzFdLnJ1bnRpbWUgPSAwOwogICAgcGNiWzFdLnN0YXRlID0gJ1cnOwogICAgcGNiWzFdLmZpbmlzaHRpbWUgPSAwOwoKICAgIHN0cmNweShwY2JbMl0ubmFtZSwgImNjIik7CiAgICBwY2JbMl0ucHJpb3JpdHkgPSAxOwogICAgcGNiWzJdLm5lZWR0aW1lID0gMTA7CiAgICBwY2JbMl0ucnVudGltZSA9IDA7CiAgICBwY2JbMl0uc3RhdGUgPSAnVyc7CiAgICBwY2JbMl0uZmluaXNodGltZSA9IDA7CgogICAgcHJpbnRmKCI9PT09PSDmnIDpq5jkvJjlhYjmlbDosIPluqbnrpfms5UgPT09PT1cbiIpOwogICAgb3V0cHV0KCk7CgogICAgaW50IGZpbmlzaCA9IDA7CiAgICB3aGlsZShmaW5pc2ggPCBOKSB7CiAgICAgICAgLy8g5om+5LyY5YWI57qn5pyA6auY55qE6L+b56iLCiAgICAgICAgaW50IG1heCA9IC0xLCBydW4gPSAtMTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgIGlmKHBjYltpXS5zdGF0ZSA9PSAnVycgJiYgcGNiW2ldLnByaW9yaXR5ID4gbWF4KSB7CiAgICAgICAgICAgICAgICBtYXggPSBwY2JbaV0ucHJpb3JpdHk7CiAgICAgICAgICAgICAgICBydW4gPSBpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZihydW4gPT0gLTEpIGJyZWFrOwoKICAgICAgICAvLyDov5DooYwKICAgICAgICBwY2JbcnVuXS5zdGF0ZSA9ICdSJzsKICAgICAgICBwcmludGYoIlxu6L+Q6KGM6L+b56iL77yaJXNcbiIsIHBjYltydW5dLm5hbWUpOwoKICAgICAgICBjdXJyZW50X3RpbWUrKzsKICAgICAgICBwY2JbcnVuXS5ydW50aW1lKys7CgogICAgICAgIC8vIOi/kOihjOWujOaIkAogICAgICAgIGlmKHBjYltydW5dLnJ1bnRpbWUgPT0gcGNiW3J1bl0ubmVlZHRpbWUpIHsKICAgICAgICAgICAgcGNiW3J1bl0uc3RhdGUgPSAnRic7CiAgICAgICAgICAgIHBjYltydW5dLmZpbmlzaHRpbWUgPSBjdXJyZW50X3RpbWU7ICAvLyDinIUg6LWL5YC85a6M5oiQ5pe26Ze0CiAgICAgICAgICAgIGZpbmlzaCsrOwogICAgICAgICAgICBwcmludGYoIui/m+eoiyAlcyDov5DooYzlrozmr5VcbiIsIHBjYltydW5dLm5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBjYltydW5dLnByaW9yaXR5LS07ICAvLyDliqjmgIHkvJjlhYjnuqctMQogICAgICAgICAgICBwY2JbcnVuXS5zdGF0ZSA9ICdXJzsKICAgICAgICB9CgogICAgICAgIG91dHB1dCgpOwogICAgfQoKICAgIHByaW50ZigiXG49PT09PSDmiYDmnInov5vnqIvosIPluqblrozmiJAgPT09PT1cbiIpOwogICAgcHJpbnRfdHVybigpOyAgLy8g6L6T5Ye65ZGo6L2s5pe26Ze0CgogICAgcmV0dXJuIDA7Cn0=