CPP/计算机组成原理实验代码/FCFS.cpp
2023-05-12 00:34:15 +08:00

92 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#define n 5
struct JCB
{
int name; //进程名
int atime; //进程到达时间
int runtime; //进程运行时间
int ftime; //进程完成时间
int total; //周转时间
float welght; //带权周转时间(周转系数)
int arun; //进程到达运行
}f[n];
//开始执行时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。
int main()
{
int amount;
int i,j,l,k,h;
struct JCB f[n];
printf("请输入进程个数(2-24):\n");
scanf("%d",&amount);
for(i=0;i<amount;i++)
{
printf("请输入进程名进程到达时间0-30进程运行时间1-8:\n");
scanf("%d",&f[i].name);
scanf("%d",&f[i].atime);
scanf("%d",&f[i].runtime);
}
printf("进程名\t进程到达时间\t进程运行时间\n");
for(i=0;i<amount;i++)
{
printf("%d\t%d\t\t%d\t\n",f[i].name,f[i].atime,f[i].runtime);
}
printf("------先来先服务FCFS调度算法------\n");
for(i=0;i<amount-1;i++) //按进程到达时间的先后排序
{ //如果两个进程同时到达,按在屏幕先输入的先运行
for(j=i+1;j<amount;j++)
{
if(f[j].atime < f[i].atime)
{
l =f[j].atime;
h =f[j].runtime;
k =f[j].name;
f[j].atime =f[i].atime;
f[j].runtime =f[i].runtime;
f[j].name =f[i].name;
f[i].atime =l;
f[i].runtime =h;
f[i].name =k;
}
}
}
printf("按进程到达时间的先后排序\n\n");
printf("进程名\t进程到达时间\t进程运行时间\n");
for(i=0;i<amount;i++)
{
printf("%d\t%d\t\t%d\t\n",f[i].name,f[i].atime,f[i].runtime);
}
printf("进程名 进程到达 开始运行 进程运行 进程结束 周转时间 周转系数\n");
f[0].arun=0;
for(i=0;i<amount;i++)
{
if(f[i].arun<f[i].atime)
{
f[i].arun =f[i].atime;
}
f[i].ftime=f[i].arun+f[i].runtime;
f[i].total=f[i].ftime-f[i].atime;
f[i].welght=(float)f[i].total/(float)f[i].runtime;
printf("%d\t%d\t %d\t %d\t %d\t\t%d\t%f\n",f[i].name,f[i].atime,f[i].arun,f[i].runtime,f[i].ftime,f[i].total,f[i].welght);
f[i+1].arun=f[i].arun+f[i].ftime;
}
printf("进程名 进程到达 开始运行 进程运行 进程结束 周转时间 周转系数\n");
for(i=0;i<amount;i++)
{
printf("%d\t%d\t %d\t %d\t %d\t\t%d\t%f\n",f[i].name,f[i].atime,f[i].arun,f[i].runtime,f[i].ftime,f[i].total,f[i].welght);
}
}