其他的地方都没有问题,我写的这个短进程优先算法在主函数里没有运行,导致无输出不知道为什么,有没有朋友知道哪里出问题了呀
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
struct task_struct
{
char name[10]; //进程名称
int number; //进程编号
float come_time; //到达时间
float run_begin_time; //开始运行时间
float run_time; //运行时间
float run_end_time; //运行结束时间
float turn_time; //周转时间
float power_time; //带权周转时间
int order; //运行次序
int run_flag; //调度标志
}tasks[MAX];
int counter; //实际进程个数
int fcfs(); //先来先服务
int sjf(); //短作业优先
int hrrn(); //响应比高优先
int pinput(); //进程参数输入
int poutput(); //调度结果输出
void main()
{
int option;
pinput();
while(1)
{
printf("请选择调度算法(0~2):\n");
printf("1.先来先服务\n");
printf("2.短作业优先\n");
printf("3.最高相应比优先\n");
printf("0.退出\n");
scanf("%d",&option);
switch(option)
{
case 0:
printf("运行结束。\n");
exit(0);
break;
case 1:
printf("对进程按先来先服务调度。\n\n");
fcfs();
poutput();
break;
case 2:
printf("对进程按短作业优先调度。\n\n");
sjf();
poutput();
break;
case 3:
printf("对进程按响应比高优先调度。\n\n");
hrrn();
poutput();
break;
}
}
}
int fcfs() //先来先服务
{
for(int m=0;m<counter;m++) //遍历对比找出进程先后顺序
{
int torder=1;
for(int n=0;n<counter;n++)
{
if(m==n)
{
n++;
}
if((tasks[m].come_time>tasks[n].come_time)&&(n<counter))
{
torder++;
}
}
tasks[m].order=torder;
}
for(int p=1;p<=counter;p++) //计算进程开始和结束时间
{
for(int k=0;k<counter;k++)
{
if(tasks[k].order==p)
{
if(p==1)
{
tasks[k].run_begin_time=tasks[k].come_time;
tasks[k].run_end_time=tasks[k].run_begin_time+tasks[k].run_time;
}
else
{
for(int q=0;q<counter;q++)
{
if(tasks[q].order==tasks[k].order-1)
{tasks[k].run_begin_time=tasks[q].run_end_time;
tasks[k].run_end_time=tasks[k].run_begin_time+tasks[k].run_time;}
}
}
}
}
}
return 0;
}
int sjf() //短作业优先
{
int minindex[1000],a[1000],cou=counter,minindex0;
float min=99999;
for(int mm=0;mm<counter+1;mm++)
{
int k=0;
float min1=99999;
if(cou==counter)
{
for(int i=0;i<counter;i++)
{
if(tasks[i].come_time<min)
{
min=tasks[i].come_time;
minindex0=i;
}
}
for(int j=0;j<counter;j++)
{
while(tasks[j].come_time==tasks[minindex0].come_time)
{
a[k]=j; //a[]存放第一个到达的进程下标(可能有多个)
k++;
break;
}
}
}
else if(cou<counter)
{
for(int j1=0;j1<counter;j1++)
{
if(tasks[j1].run_flag==1)
continue;
while(tasks[j1].come_time<=tasks[minindex[mm]].run_end_time)
{
a[k]=j1;
k++;
break;
}
}
}
for(int b=0;b<k;b++) //k为第一个到达的进程的个数
{
if(tasks[a[b]].run_time<min1) //这里比较多个第一个到达的进程的运行时间,选出其中运行时间最小的进程
{
min1=tasks[a[b]].run_time;
minindex[mm+1]=a[b];
}
}
tasks[minindex[mm+1]].order=mm+1;
tasks[minindex[mm+1]].run_flag=1;
if(cou==counter)
tasks[minindex[mm+1]].run_begin_time=tasks[minindex[mm+1]].come_time;
else if(cou<counter)
tasks[minindex[mm+1]].run_begin_time=tasks[minindex[mm]].run_end_time;
tasks[minindex[mm+1]].run_end_time=tasks[minindex[mm+1]].run_begin_time+tasks[minindex[mm+1]].run_time;
cou--;
}
return 0;
}
int hrrn() /*响应比高优先*/
{
return 0;
}
int pinput() //进程参数输入
{
int i;
printf("请输入进程的数量:\n");
scanf("%d",&counter);
for(i=0;i<counter;i++)
{
printf("请输入第%d个进程信息 :\n",i+1);
printf("请输入进程名字:\n");
scanf("%s",tasks[i].name);
printf("请输入进程编号:\n");
scanf("%d",&tasks[i].number);
printf("请输入进程到达时间:\n");
scanf("%f",&tasks[i].come_time);
printf("请输入进程运行时间:\n");
scanf("%f",&tasks[i].run_time);
printf("%s %f %f ",tasks[i].name,tasks[i].come_time,tasks[i].run_time);
tasks[i].run_begin_time=0;
tasks[i].run_end_time=0;
tasks[i].order=0;
tasks[i].run_flag=0;
}
return 0;
}
int poutput() //调度结果输出
{
int i;
float turn_round_time=0,f1,w=0;
printf("进程名字 进程编号 到达时间 运行时间 开始时间 结束时间 运行次序 周转时间\n");
for(i=0;i<counter;i++)
{
f1=tasks[i].run_end_time-tasks[i].come_time; //完成时间-提交时间
turn_round_time+=f1;
w+=(f1/tasks[i].run_time);
printf("%s, %d, %5.3f, %5.3f, %5.3f, %5.3f,%d,%5.3f\n",tasks[i].name,tasks[i].number,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].order,f1);
}
printf("平均周转时间=%5.2f\n",turn_round_time/counter);
printf("平均带权周转时间=%5.2f\n",w/counter);
return 0;
}