用C语言编写程序,模拟实现短进程优先调度算法。
时间: 2024-01-22 08:17:38 浏览: 55
以下是用C语言编写的短进程优先调度算法的实现:
```c
#include<stdio.h>
#include<stdlib.h>
struct process{
int pid,at,bt,wt,tat,ct; //进程id,到达时间,运行时间,等待时间,周转时间和完成时间
};
void main(){
int n,i,j;
printf("请输入进程数:");
scanf("%d",&n);
struct process p[n],temp;
float avg_wt=0,avg_tat=0;
for(i=0;i<n;i++){
printf("请输入第%d个进程的到达时间和运行时间:",i+1);
scanf("%d %d",&p[i].at,&p[i].bt);
p[i].pid=i+1;
}
//按到达时间排序
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(p[j].at>p[j+1].at){
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
//计算等待时间、周转时间和完成时间
int total_time=p[0].at;
for(i=0;i<n;i++){
p[i].wt=total_time-p[i].at;
p[i].ct=total_time+p[i].bt;
p[i].tat=p[i].ct-p[i].at;
total_time=p[i].ct;
}
//按运行时间排序
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(p[j].bt>p[j+1].bt){
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
//输出结果
printf("\n进程\t到达时间\t运行时间\t等待时间\t周转时间\n");
for(i=0;i<n;i++){
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n",p[i].pid,p[i].at,p[i].bt,p[i].wt,p[i].tat);
avg_wt+=p[i].wt;
avg_tat+=p[i].tat;
}
printf("\n平均等待时间:%f\n",avg_wt/n);
printf("平均周转时间:%f\n",avg_tat/n);
}
```
该程序实现了输入若干个进程的到达时间和运行时间,然后按照到达时间排序,计算出每个进程的等待时间、周转时间和完成时间,并按照运行时间排序输出结果,最后计算出平均等待时间和平均周转时间。
阅读全文