学习随感

今天又是待了一天的机房,代码没少敲,改进设计一中的短作业调度进程的算法。感觉感触挺大的,因为,很久没有这么认真去对待一件事情了,后果便是:感触颇深——只要你认真和专注地去做一件事情,结果肯定会出来的。

附上短作业调度的c语言代码:


#include<stdio.h>
struct sjf {
	char name[10]; //进程名
	float arrivetime; //到达时间
	float servicetime;//服务时间
	float starttime; //开始时间
	float finishtime;//完成时间
	float zztime;//周转时间
	float dqzztime;//带权周转
};
sjf p[100];

void Sinput(sjf *p, int N)
{
	int i;
	printf("输入进程名称,到达时间,服务时间:\n");
	for (i = 0; i<N; i++)
	{
		printf("输入第%d进程的名称,到达时间,服务时间:", i+1);
		scanf("%s%f%f", &p[i].name, &p[i].arrivetime, &p[i].servicetime);
	}
}

void Sprint(sjf *p, int N) 
{		int k;
		printf("run order:");
		printf("%s",p[0].name);
	for(k=1;k<N;k++)
	{
		printf("-->%s",p[k].name);
	} 
		printf("\nname\tarrive\tservice\tstart\tfinish\tzztime\tdqzztime\n");

     for(k=0;k<=N-1;k++)

	{ 
printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].name,p[k].arrivetime,
		p[k].servicetime,p[k].starttime,p[k].finishtime,(p[k].finishtime-p[k].arrivetime),
		((p[k].finishtime-p[k].arrivetime)/p[k].servicetime));
	}

}

void Ssort(sjf *p, int N) {
	
	for (int i = 1; i < N; i++) {
		for (int j = 1; j <= i; j++) {
				if((p[i].arrivetime<=p[j].arrivetime))
			{
				if(p[i].servicetime<p[j].servicetime)
				{	
				sjf temp;
				temp = p[i];
				p[i] = p[j];
				p[j] = temp;
				}			
			}
		}
	}
}

void Sdeal(sjf *p,int N,float arrivetime,float servicetime,float finishtime)
{
	int k;
	for(k=0;k<=N;k++)
	{
		if(k==0){
		p[k].starttime=p[k].arrivetime;
		p[k].finishtime=p[k].arrivetime+p[k].servicetime;}
		else{
			p[k].starttime=p[k-1].finishtime;
			p[k].finishtime=p[k-1].finishtime+p[k].servicetime;}
	}
}

void SJF(sjf *p, int N)
{
	float arrivetime=0,servicetime=0,finishtime=0;
	Ssort(p, N);
	Sdeal(p,N,arrivetime,servicetime,finishtime);
	Sprint(p, N);
}
int main()
{
	int M;
	printf("短作业优先调度算法\n");
	printf("输入进程数:");
	scanf("%d", &M);
	Sinput(p, M);
	SJF(p, M);

	
}

调试过之后没啥问题了,

猜你喜欢

转载自blog.csdn.net/yezongzhen/article/details/80357170