问题描述:要求输入3个进程的信息,假设这些进程均是在0时刻同时到达,若进程调度采用非剥夺式静态优先级(优先数数值大的表示优先级比较高;如果遇到优先级一样,按照输入顺序执行),计算并输出平均作业周转时间。
输入格式:程序要求输入3行,以回车符号作为分隔,每行有3个数据,以空格作为分隔。首先输入一个字符串(长度小于等于10),为进程名,第2个数据类型为整型,表示进程的优先数,第3个数据类型为整型,表示进程的运行时间。
输出格式:输出结果为一个浮点数,保留到小数点后一位,为系统的平均作业周转时间。
样例输入1:
P1 1 1
P2 2 2
P3 3 3
样例输出1:
4.7
样例输入2:
P1 10 10
P2 100 100
P3 100 100
样例输出2:
170.0
#include<stdio.h>
struct PCB{
char name[10]; //进程名
int yxji; //优先级
int ytime; //运行时间
}; //定义一个进程的结构体
void input(struct PCB p[]){
int i;
for(i=0;i<3;i++){
scanf("%s %d %d",p[i].name,&p[i].yxji,&p[i].ytime);
} //依次获取输入的进程名、优先级、运行时间存入结构体中
}
void jisuan(struct PCB p[]){
int m=0,n=0,b=0;
float sum=0,result;
int i,j;
struct PCB temp; //定义一个中间变量
for(i=0;i<3;i++){
for(j=0;j<i;j++){
if(p[i].yxji>p[j].yxji){
temp=p[i];
p[i]=p[j];
p[j]=temp;
} //将进程在结构体中按优先级降序排列
}
}
n=p[0].ytime+p[1].ytime;
b=n+p[2].ytime;
sum=p[0].ytime+n+b; //计算进程总的运行时间
result=sum/3; //计算平均周转时间
printf("%.1f",result); //保留一位小数输出结果
}
int main(){
struct PCB p[10];
input(p); //调用输入函数
jisuan(p); //调用计算函数
}