📄 全好.txt
字号:
#include"string.h"
#include "stdio.h"
struct pcb
{char name[10];
int dt;/*到达时间*/
int nt;/*需要时间==服务时间ft*/
int bt;/*开始时间*/
int ot;/*完成时间*/
int rt;/*周转时间*/
int ft;/*服务时间==需要时间nt*/
float brt;/*带权周转时间*/
};
void sort(struct pcb s[],int n)
{int i,k,j;
struct pcb t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(s[k].dt>s[j].dt)
k=j;
if(k!=i)
{t=s[i];
s[i]=s[k];
s[k]=t;
}
}
}
void fcfs()
{
int i,N;
struct pcb s[100];
printf("input the course number:\n");
scanf("%d",&N);
printf("input %d the name dt nt:\n",N);
for(i=0;i<N;i++)
scanf("%s%d%d",&s[i].name,&s[i].dt,&s[i].nt);
sort(s,N);
printf("the dt is:\n");
for(i=0;i<N;i++)
printf("%s %d %d\n",s[i].name,s[i].dt,s[i].nt);
s[0].bt=s[0].dt;
for(i=0;i<N;i++)
if(s[i].bt+s[i].nt>s[i+1].dt)
s[i+1].bt=s[i].bt+s[i].nt;
else
s[i+1].bt=s[i+1].dt;
printf("the name bt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].bt);
for(i=0;i<N;i++)
s[i].ot=s[i].bt+s[i].nt;
printf("the name ot is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].ot);
for(i=0;i<N;i++)
s[i].rt=s[i].ot-s[i].dt;
printf("the name rt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].rt);
for(i=0;i<N;i++)
s[i].brt=(float)(s[i].rt)/(float)(s[i].nt);
printf("the name brt is:\n");
for(i=0;i<N;i++)
printf("%s %5.2f\n",s[i].name,s[i].brt);
}
void sjf()
{
int i,j,N,count=0,m,n,k;
struct pcb t;
struct pcb s[100];
printf("input the course number:\n");
scanf("%d",&N);
printf("input %d the name dt nt:\n",N);
for(i=0;i<N;i++)
scanf("%s%d%d",&s[i].name,&s[i].dt,&s[i].nt);
sort(s,N);
printf("the dt is:\n");
for(i=0;i<N;i++)
printf("%s %d %d\n",s[i].name,s[i].dt,s[i].nt);
s[0].bt=s[0].dt;
s[0].ot=s[0].bt+s[0].nt;
for(i=0;i<N;i++)
{if(s[i+1].dt>=s[i].ot)
{s[i+1].bt=s[i+1].dt;
s[i+1].ot=s[i+1].bt+s[i+1].nt;}
else
{
{
for(j=i+1;j<N;j++)
if(s[j].dt<=s[i].ot)
count++;
}
if(count>1)
{for(m=i+1;m<i+count;m++)
{k=m;
for(n=i+2;n<i+1+count;n++)
if(s[k].nt>s[n].nt)
k=n;
if(k!=m)
{ t=s[m];
s[m]=s[k];
s[k]=t;
}
}
s[i+1].bt=s[i].ot;
s[i+1].ot=s[i].ot+s[i+1].nt;
count=0;
if(i>N-2)
s[i].bt=s[i-1].ot;
s[i].ot=s[i-1].ot+s[i].nt;
}
else
{s[i+1].bt=s[i].ot;
s[i+1].ot=s[i].ot+s[i+1].nt;
count=0;
if(i>N-2)
s[i].bt=s[i-1].ot;
s[i].ot=s[i-1].ot+s[i].nt;
}
}
}
printf("the name bt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].bt);
for(i=0;i<N;i++)
s[i].ot=s[i].bt+s[i].nt;
printf("the name ot is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].ot);
for(i=0;i<N;i++)
s[i].rt=s[i].ot-s[i].dt;
printf("the name rt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].rt);
for(i=0;i<N;i++)
s[i].brt=(float)(s[i].rt)/(float)(s[i].nt);
printf("the name brt is:\n");
for(i=0;i<N;i++)
printf("%s %5.2f\n",s[i].name,s[i].brt);
}
void rr()
{
int i,j,k=0,N,q,m,count=0,p;
struct pcb s[100];
printf("input the course number:\n");/*输入作业个数*/
scanf("%d",&N);
printf("input %d the name dt ft:\n",N);/*输入作业名、到达时间、服务时间*/
for(i=0;i<N;i++)
scanf("%s%d%d",s[i].name,&s[i].dt,&s[i].ft);
sort(s,N);
printf("the new name dt ft is:\n");
for(i=0;i<N;i++)
printf("%s %d %d\n",s[i].name,s[i].dt,s[i].ft);
for(i=0;i<N;i++)
s[i].nt=s[i].ft;
printf("input the round number:\n");/*输入时间片*/
scanf("%d",&m);
q=m;
p=s[i].nt%m;/*需要时间是否是时间片的整数倍*/
for(j=0;j<100*N;j++)
for(i=0;i<N;i++)
if(s[i].nt!=0)/*判断作业是否运行完*/
{
if(s[i].nt<=q)/*判断的需要时间是否大于时间片*/
{if(p!=0)/*判断需要时间是否是时间片的整数倍*/
{ s[i].ot=s[i].nt+count;
count=count+s[i].nt;
s[i].nt=0;
q=q-s[i].nt;
if(q==0)
q=m;
}
else
s[i].ot=s[i].nt+count;
count=count+s[i].nt;
q=q-s[i].nt;
s[i].nt=0;
if(q==0)
q=m;
}
else
{s[i].nt=s[i].nt-q;
count=count+q;
q=m;
}
}
for(i=0;i<N;i++)
s[i].bt=k,k++;
printf("the name bt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].bt);
printf("the name ot is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].ot);
for(i=0;i<N;i++)
s[i].rt=s[i].ot-s[i].bt;
printf("the name rt is:\n");
for(i=0;i<N;i++)
printf("%s %d\n",s[i].name,s[i].rt);
for(i=0;i<N;i++)
s[i].brt=(float)(s[i].rt)/(float)(s[i].ft);
printf("the name brt is:\n");
for(i=0;i<N;i++)
printf("%s %5.2f\n",s[i].name,s[i].brt);
}
void main()
{int x;
printf("please input the chose number 1-fcfs,2-sjf,3-rr:\n");
scanf("%d",&x);
switch(x)
{case 1: fcfs();
break;
case 2: sjf();
break;
case 3: rr();
break;
default:printf("error\n");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -