📄 chulijidiaodusuanfa.txt
字号:
void Input(){
char s[30];
int pr;
//通过输入E开始的进程名结束输入操作
while(scanf("%s", &s) && s[0]!='E'){
scanf("%d %d", &t, &pr);
strcpy(temp.name, s);
temp.runtime = t;
temp.priority = pr;
temp.state = 'R';
queue[i++] = temp;
}
t = i;
Sort();
}
按照调度规则运行处理机调出程序
void Deal(){
if(queue[0].runtime != 0){
if(queue[0].priority!=0)
queue[0].priority--;
queue[0].runtime--;
Sort();
Del();
}
}
交换函数,将两个进程控制块的信息交换
void Swap(PCB p1, PCB p2){
PCB temp;
strcpy(temp.name, p1.name);
temp.priority = p1.priority;
temp.runtime = p1.runtime;
strcpy(p1.name, p2.name);
p1.priority = p2.priority;
p1.runtime = p2.runtime;
strcpy(p2.name, temp.name);
p2.priority = temp.priority;
p2.runtime= temp.runtime;
}
排序函数,按照进程的优先级对进程信息进行排序
void Sort(){
for(j=0; j<t-1; j++){
for(k=j+1; k<t; k++){
if(queue[j].priority < queue[k].priority){
swap(queue[j], queue[k]);
}
}
}
}
删除进程函数,在进程的运行时间为0的时候对进程进行删除,这里的删除实际上是将进程送到队尾去,这样便于我们对进程的相关信息进行观察。
void Del(){
for(j=0; j<t; j++){
if(queue[j].runtime == 0){
strcpy(queue[i].name ,queue[j].name);
queue[i].priority = queue[j].priority;
queue[i].runtime = queue[j].runtime;
queue[i].state = 'E';
for(k=j; k<i; k++){
strcpy(queue[k].name ,queue[k+1].name);
queue[k].priority = queue[k+1].priority;
queue[k].runtime = queue[k+1].runtime;
queue[k].state = queue[k+1].state;
}
j--;
t--;
}
}
}
输出进程信息
void Print(){
printf("优先级 运行时间 进程状态 进程名\n");
for(j=0; j<i; j++){
printf("%6d %8d", queue[j].priority, queue[j].runtime);
if(queue[j].state == 'R') printf(" 运行中…");
else printf(" 运行完成");
printf(" %s\n", queue[j].name);
}
}
主函数
int main(){
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
Input();
while(queue[0].runtime != 0){
Print();
printf("\n");
Deal();
}
Print();
printf("\n");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -