⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 全好.txt

📁 进程的三种调度算法
💻 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 + -