您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 一个先来先服务的算法,运行不下去,经常报错

一个先来先服务的算法,运行不下去,经常报错

来源:网络整理     时间:2016/7/17 11:11:58     关键词:

关于网友提出的“ 一个先来先服务的算法,运行不下去,经常报错”问题疑问,本网通过在网上对“ 一个先来先服务的算法,运行不下去,经常报错”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 一个先来先服务的算法,运行不下去,经常报错
描述:

#include   
#include   
#include   
#define getpch(type)(type*)malloc(sizeof(type))  
struct worktime{
  float Tb; //作业运行时刻
  float Tf; //作业完成时刻
  float Ti; //周转时间
  float Wi; //带权周转时间
};
struct jcb{ /*定义作业控制块JCB */
  int resource; //所需资源
  char state; //作业状态
char name[10]; //作业名
  float subtime; //作业提交时间
  float runtime; //作业所需的运行时间
  float Rp; //后备作业响应比
  struct jcb *next; //链指针
  struct worktime wt; //时间   
}*jcb_ready = NULL,*j;
typedef struct jcb JCB;
int num = 0;
float T = 0;
sort() /* 建立对作业进行提交时间排列函数*/
{  
  JCB *first, *second;
  int insert=0;
  if((jcb_ready == NULL) || ((j->subtime) < (jcb_ready->subtime))) {/*作业提交时间最短的,插入队首*/
  j->next = jcb_ready;
  jcb_ready = j;
  j->Rp = 1;
  }
  else { /* 作业比较提交时间,插入适当的位置中*/
  first = jcb_ready;
  second = first->next;
  while(second != NULL){
  if((j->subtime) < (second->subtime)){ /*若插入作业比当前作业提交时间短,插入到当前作业前面*/
  j->next = second;
  first->next = j;
  second = NULL;
  insert = 1;
  }
  else { /* 插入作业优先数最低,则插入到队尾*/
  first = first->next;
  second = second->next;
  }
  }
  if (insert == 0)  
  first->next = j;
  }
}  
input() { /* 建立作业控制块函数*/
  int i;
  for(i = 0;i < num;i++)
  {
  printf("\n 作业号No.%d:\n",i);
  j=getpch(JCB);
  printf("\n 输入作业名:");
  scanf("%s",j->name);
  printf("\n 输入作业提交时刻:");
  scanf("%f",&j->subtime);
  printf("\n 输入作业运行时间:");
  scanf("%f",&j->runtime);
  printf("\n 输入作业运行所需的资源数:");
scanf("%d",&j->resource);
  printf("\n");
  j->state = 'f';
  j->next = NULL;
  sort(); /* 调用sort函数*/
  }
  return num;
}
copy(){
;
}
FSFC(JCB *p) {
  float sumTi = 0,sumWi = 0;
  int i;
  T = jcb_ready->subtime + jcb_ready->runtime;
  jcb_ready->wt.Ti = jcb_ready->runtime;
  jcb_ready->wt.Wi = 1;
  jcb_ready->wt.Tb = jcb_ready->subtime;
  p->wt.Tf = T;
printf(" name state stime rtime resource betime fitime tutime attime\n");
for(i = 0; i < num; i++){
printf(" %s ",p->name);
printf(" %c ",p->state);
printf(" %0.1f ",p->subtime );
printf(" %0.1f ",p->runtime);
printf(" %d ",p->resource);
printf(" %0.1f ",p->wt.Tb);
printf(" %0.1f ",p->wt.Tf);
printf(" %0.1f ",p->wt.Ti);
printf(" %0.1f ",p->wt.Wi);
printf("\n");
sumTi = sumTi + p->wt.Ti;
sumWi = sumWi + p->wt.Wi; 
p = p->next;
if(jcb_ready != NULL){     / /测试说是这里有问题,不过老是找不出来,求大侠帮忙
if (T >= p->subtime)  
p->wt.Tb = T;  
else  
p->wt.Tb = p->subtime;
}printf("adf");
p->wt.Tf = p->wt.Tb + p->runtime;
p->wt.Ti = p->wt.Tf - p->subtime;
p->wt.Wi = p->wt.Ti / p->runtime;
T = p->wt.Tf;

printf("\n The Average turnover time is %0.2f",sumTi/num);
printf("\n The Weighted average turnover time is %0.2f",sumWi/num);
}
dis(JCB *jcb_ready){
int i = 0;
printf("The JCB is:\n");
for (i = 0; i < num; i++){
printf(" name state subtime runtime resource \n");
printf(" %s ",jcb_ready->name);
printf(" %c ",jcb_ready->state);
printf(" %0.1f ",jcb_ready->subtime);
printf(" %0.1f ",jcb_ready->runtime);
printf(" %.0d ",jcb_ready->resource);
jcb_ready = jcb_ready->next;
printf("\n");
}
}
main(){
float sumTi = 0,sumWi = 0;
int i;
printf("\n 请输入所要运行的作业的数目:");
  scanf("%d",&num);
input();
printf("\n 按任一键继续......\n");  
getch();
while(jcb_ready != NULL){
printf("\n The first algorithm is FCFS!\n");
FSFC(jcb_ready);} 
}
之前是可以运行的,但后来不知道为啥,突然断掉了


解决方案1:

jcb_ready->wt.Wi = 1;
...
if(jcb_ready != NULL){ / /测试说是这里有问题,不过老是找不出来,求大侠帮忙
看你代码,jcb_ready不会是NULL,不然上面赋值出就出问题了。
单步调试下


以上介绍了“ 一个先来先服务的算法,运行不下去,经常报错”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2743813.html

相关图片

相关文章