输入N(N>0)个作业,输入每个作业的名字,到达时间,服务时间,按照短作业优先算法,计算每个作业的完成时间,周转时间,带权周转时间(保留2位小数)。使用c语言实现
时间: 2024-05-15 15:18:19 浏览: 14
好的,我会根据您的要求进行回答,并不会透露您的任何信息。对于您的问题,这是一个经典的进程调度算法问题,以下是一种基于C语言实现的解决方案:
```c
#include<stdio.h>
#include<stdlib.h>
#define N 50 //最大作业数
struct Job{
char name[10]; //作业名
int arrive_time; //到达时间
int serve_time; //服务时间
int finish_time;//完成时间
int turnover_time;//周转时间
float w_turnover_time;//带权周转时间
};
void SJF(struct Job job[],int n){ //短作业优先算法
int i;
struct Job temp;
for(i=0;i<n-1;i++){ //按到达时间排序
for(int j=0;j<n-i-1;j++){
if(job[j].arrive_time>job[j+1].arrive_time){
temp=job[j];
job[j]=job[j+1];
job[j+1]=temp;
}
}
}
int current_time=0; //当前时间
for(i=0;i<n;i++){
current_time+=job[i].serve_time;
job[i].finish_time=current_time;
job[i].turnover_time=job[i].finish_time-job[i].arrive_time;
job[i].w_turnover_time=1.0*job[i].turnover_time/job[i].serve_time;
}
}
int main(){
struct Job job[N];
int n,i;
printf("请输入作业数:");
scanf("%d",&n);
printf("请按照如下格式输入每个作业的名字、到达时间、服务时间:\n");
printf("name arrive_time serve_time\n");
for(i=0;i<n;i++){
scanf("%s%d%d",job[i].name,&job[i].arrive_time,&job[i].serve_time);
}
SJF(job,n); //短作业优先算法计算结果
printf("作业名\t到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n");
for(i=0;i<n;i++){
printf("%s\t%d\t%d\t\t%d\t\t%d\t\t%.2f\n",job[i].name,job[i].arrive_time,job[i].serve_time,job[i].finish_time,job[i].turnover_time,job[i].w_turnover_time);
}
return 0;
}
```
希望这个程序能够解决您的问题。如果您有其他问题,可以继续和我交流。