急求学C语言,帮忙看一个程序!!QQ 1012442345
追问:#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define getpch(type) (type*)malloc(sizeof(type))/*用getpcb(type)给type类型的变量申请一个空间*/
struct pcb { /*定义进程控制块PCB */
char name[10]; /*进程名*/
char state; /*进程状态*/
int ntime; /*进程需要运行时间*/
int rtime; /*进程已经运行的时间*/
struct pcb *link; /*定义了一个指向pcb结构类型的指针link作为自己的成员函数*/
}*ready=NULL,*p; /*定义了两个指向pcb结构类型的指针ready和p ,ready的初值为空*/typedef struct pcb PCB; /*定义PCB为struct pcb的别名*/
void inunization() /*初始化界面函数*/
{
printf("\n\n\t\t********************************************\t\t\n");
printf("\t\t\t\t jihchengdiaodu\n");
printf("\t\t*********************************************\t\t\n");
printf("\n\n\n\t\t\t07wuzhuang\n");
printf("\t\t\tname:lixueyan\n");
printf("\t\t\txuehao:08030043\n");
printf("\t\t\tfinished time:2011.10.28\n\n\n\n");
printf("\t\t\t\tenter any button to operate\n");
getch();
}void sort1() /*对进程进行轮转调度排列函数 */
{
PCB *first;
if(ready==NULL) /*如果就绪队列为空*/
{
ready=p; /*将新建进程放入就绪队列中,将ready指向队首进程 */
}
else /*就绪队列中有进程在等待,将新建进程插入到队尾 */
{
first=ready; /*first指针指向队首进程 */
while(first->link!=NULL) first=first->link; /*当first指针没有指向队尾时,指针后移 */
first->link=p;/*将P指向的进程插入队尾*/
}
}
void input(flag) /*建立进程控制块函数*/
{
int i;
system("cls"); /*清屏*/
printf("\nenter the information of six process\n");
for(i=0;i<6;i++)
{
printf("\n process number No.%d:\n",i + 1);
p=getpch(PCB); /*给进程申请一个空间,并用指针p指向这个空间*/
printf("\n process name:");
scanf("%s",p->name); /*输入进程的名字 */printf("\n runtime:");
scanf("%d",&p->ntime); /* 输入进程的运行时间*/
printf("\n");
p->rtime=0; /*进程已运行的时间的初值为0*/
p->state='w';
p->link=NULL; /*新建进程的指针域为空*/
if(flag==1)/*如果标志变量flag等于1,则属于最先优先数优先算法*/sort1(); /*调用sort1函数*/
}
}int space() /*计算进程控制块个数的函数 */
{
int l=0; PCB* pr=ready; /* pr指向队首进程*/
while(pr!=NULL) /*pr为空,则说明计数完成*/
{
l++;
pr=pr->link; /* pr向下以一个进程*/
}
return(l);
}void disp1(PCB * pr)/*建立进程显示函数,用于显示使用FCFS算法的当前进程*/
{
printf("\n qname \t state \t ndtime runtime \n");
printf(" |%s\t",pr->name); /* 显示当前进程的进程名*/
printf(" |%c\t",pr->state); /*显示当前进程的状态 */
printf(" |%d\t",pr->ntime); /*显示当前进程的运行时间 */
printf(" |%d\t",pr->rtime); /* 显示当前进程的已运行时间 */
printf("\n");
}
void check(flag) /*进程查看函数*/
{
PCB* pr;
printf("\n ***running process is:",p->name);/*显示当前运行进程 */
if(flag==1)
disp1(p); /*标志变量不为1,调用disp1()函数*/
pr=ready; /*pr指向等待队列的队首进程*/
printf("\n ****wait queue is:\n"); /*显示就绪队列状态*/
while(pr!=NULL) /*就绪队列不为空时*/
{ /*根据标识符值显示不同算法下的就绪队列状态*/
if(flag==1)disp1(pr);
pr=pr->link;
}
}
void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf("\n process [%s] finished.\n",p->name);
free(p);
}
void running() /*建立进程就绪函数(进程运行时间到,置就绪状态)*/
{
(p->rtime)++; /* 进程的运行时间加1 */
if(p->rtime==p->ntime) /* 如果已运行时间等于进程运行所需的时间,则将进程释放 */
destroy(); /*调用destroy函数 */}
void running1() /*建立进程就绪函数(进程运行时间到,置就绪状态) */
{
(p->rtime)++; /*进程的运行时间加1 */
p->state='w'; /* 将状态置为等待 */
sort1(); /*调用sort1函数 */}
void RoundRobin() /*轮转法模块,FCFS算法的程序入口*/
{
int len, h=0; /* len用来存放进程的个数*/
char ch;
system("cls");
input(0); /*调用input1函数,输入进程信息*/
len=space(); /*进程个数赋给len*/
while((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf("\n The execute number:%d \n",h);
p=ready; /*将队首指针赋给p*/
ready=ready->link; /*ready指向原ready的下一个进程*/
p->link=NULL; /*p的link赋空*/
p->state='R'; /*p的运行状态置为运行*/
check(0); /*调用check函数,运用值传递*/
running1(); /*调用running1函数*/
printf("\n press any button......");
}
printf("\n\n process is finished.\n");}
/*****************************模块结束************************************/
void menu() /*菜单*/
{
int m;
system("cls");
printf("\n\n\t\t*********************************************\t\t\n");
printf("\t\t\t\t进程调度演示\n");
printf("\t\t*********************************************\t\t\n");printf("\n\t\t\t1.yian shi lunzhuangfa.");
printf("\n\t\t\t0.exit.");
printf("\n\n\t\t\t\tenter choice:");
scanf("%d",&m);
switch(m)
{
case 1:RoundRobin(); /*轮转法演示进程的程序入口*/
system("cls"); /*清屏*/
menu(); /*调用菜单函数*/
break;
case 0:
system("cls");
break;
default:
system("cls");
menu();
}
}
main()
{
inunization();
menu();
getch();
}