优先级不能调用
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
struct process_type
{
char name;
int youxian;
int daxiao;
};
struct process_type jiuxu[5];
struct process_type guaqi[5];
struct process_type cpu;
int number1=0,number2=0,first=0;
void create()
{
if(number1>=5)
{
printf("\n就绪进程已满,请先删除或挂起进程\n");
}
else
{
if(number1==0)
{
printf("\n这是你第一次输入进程信息,它将直接调入CPU运行!\n");
printf("请输入新进程名\n");
scanf("%c",&cpu.name);
printf("请输入新进程的优先级\n");
scanf("%d",&cpu.youxian);
printf("请输入新进程的大小\n");
scanf("%d",&cpu.daxiao);
number1++;
}
else
{
printf("\n请输入新进程名\n");
scanf("%s",&jiuxu[number1].name);
printf("请输入新进程的优先级\n");
scanf("%d",&jiuxu[number1].youxian);
printf("请输入新进程的大小\n");
scanf("%d",&jiuxu[number1].daxiao);
number1++;
}
}
}
void run() /*建立进程显示函数,用于显示当前进程*/
{
printf("\n 进程名 优先级 运行时间 \n");
printf(" %c \t",cpu.name);
printf(" %d \t",cpu.youxian);
printf(" %d \t",cpu.daxiao);
printf("\n");
}
swap(struct process_type a,struct process_type b)
{
int m,n;
char p;
m=a.youxian;
a.youxian=b.youxian;
b.youxian=m;
n=a.daxiao;
a.daxiao=b.daxiao;
b.daxiao=n;
p=a.name;
a.name=b.name;
b.name=p;
}
void huanchua()
{
int i,m,t,p;
char n;
for(i=1;i<number1+1;i++)
{
if(jiuxu[i].youxian>cpu.youxian)
swap(jiuxu[i],cpu) ;
}
for(i=1;i<number1+1;i++)
{
if(p==jiuxu[i].youxian)
{
m=cpu.daxiao;
cpu.daxiao=jiuxu[i].daxiao;
n=cpu.name;
cpu.name=jiuxu[i].name;
t=cpu.youxian;
cpu.youxian=jiuxu[i].youxian;
break;
}
else continue;
}
for(i=0;i<number1-1;i++)
{
jiuxu[i].daxiao=jiuxu[i+1].daxiao;
jiuxu[i].name=jiuxu[i+1].name;
jiuxu[i].youxian=jiuxu[i+1].youxian;
}
jiuxu[i].daxiao=m;
jiuxu[i].name=n;
jiuxu[i].youxian=t;
}
void huanchub()
{
int i;
char p;
printf("\n请输入想要挂起的进程名:\n(在以下中选:");
for(i=0;i<number1;i++)
{
printf("%c",jiuxu[i].name);
}
printf(")\n");
scanf("%s",&p);
for(i=0;i<number1;i++)
{
if(p==jiuxu[i].name)
{
guaqi[number2].daxiao=jiuxu[i].daxiao;
guaqi[number2].name=jiuxu[i].name;
guaqi[number2].youxian=jiuxu[i].youxian;
number2++;
break;
}
else continue;
}
for(i=0;i<number1;i++)
{
jiuxu[i].daxiao=jiuxu[i+1].daxiao;
jiuxu[i].name=jiuxu[i+1].name;
jiuxu[i].youxian=jiuxu[i+1].youxian;
}
number1--;
}
void huanchuc()
{
int i;
jiuxu[number1].daxiao=guaqi[0].daxiao;
jiuxu[number1].name=guaqi[0].name;
jiuxu[number1].youxian=guaqi[0].youxian;
number1++;
for(i=0;i<number2;i++)
{
guaqi[i].daxiao=guaqi[i+1].daxiao;
guaqi[i].name=guaqi[i+1].name;
guaqi[i].youxian=guaqi[i+1].youxian;
}
number2--;
}
void huanchud()
{
int i,m,t;
char p,n;
printf("\n请输入想要运行的进程名:\n(在以下中选:");
for(i=0;i<number1;i++)
{
printf("%c ",jiuxu[i].name);
}
printf(")\n");
scanf("%s",&p);
for(i=0;i<number1;i++)
{
if(p==jiuxu[i].name)
{
m=cpu.daxiao;
cpu.daxiao=jiuxu[i].daxiao;
jiuxu[i].daxiao=m;
n=cpu.name;
cpu.name=jiuxu[i].name;
jiuxu[i].name=n;
t=cpu.youxian;
cpu.youxian=jiuxu[i].youxian;
jiuxu[i].youxian=t;
break;
}
else continue;
}
}
void huanchue()
{
int i;
char p;
printf("\n请输入想要调入就绪的进程名:\n(在以下中选:");
for(i=0;i<number2;i++)
{
printf("%c ",guaqi[i].name);
}
printf(")\n");
scanf("%s",&p);
for(i=0;i<number2;i++)
{
if(p==guaqi[i].name)
{
jiuxu[number1].daxiao=guaqi[i].daxiao;
jiuxu[number1].name=guaqi[i].name;
jiuxu[number1].youxian=guaqi[i].youxian;
break;
}
else continue;
}
number1++;
for(i=0;i<number2;i++)
{
guaqi[i].daxiao=guaqi[i+1].daxiao;
guaqi[i].name=guaqi[i+1].name;
guaqi[i].youxian=guaqi[i+1].youxian;
}
number2--;
}
void huanchu()
{
int a;
printf("请你选择需要的交换方式:\n");
printf("1.将优先级高的进程调入CPU执行.\n");
printf("2.手动将进程挂起.\n");
printf("3.将挂起的进程按先入先出的方式调入就绪队列.\n");
printf("4.手动将就绪进程调入CPU执行.\n");
printf("5.手动将挂起的进程调入就绪队列.\n");
scanf("%d",&a);
switch(a)
{
case 1: huanchua();break;
case 2: huanchub();break;
case 3: huanchuc();break;
case 4: huanchud();break;
case 5: huanchue();break;
default:break;
}
}
void del()
{
int i;
char p;
printf("\n请输入想要删除的进程名:\n(在以下中选:");
for(i=0;i<number2;i++)
{
printf("%c ",guaqi[i].name);
}
printf(")\n");
scanf("%c",&p);
for(i=0;i<number2;i++)
{
if(p==guaqi[i].name)
{
for(i=0;i<number2;i++)
{
guaqi[i].daxiao=guaqi[i+1].daxiao;
guaqi[i].name=guaqi[i+1].name;
guaqi[i].youxian=guaqi[i+1].youxian;
}
number1--;
break;
}
else continue;
}
}
void main()
{
int n;
char a;
n=1;
while(n==1)
{
printf("\n********************************************");
printf("\n* 进程演示系统 *");
printf("\n* 1.创建新的进程 2.查看运行进程 *");
printf("\n* 3.换出某个进程 4.删除某个进程 *");
printf("\n* 5.退出演示系统 *");
printf("\n********************************************");
printf("\n请选择(1~5)");
a=getche();
switch(a)
{
case'1':create();break;
case'2':run();break;
case'3':huanchu();break;
case'4':del();break;
case'5':exit(0);
default:printf("输入有错!\n");break;
}
printf("\n********************************************");
}
}
可以运行,只是优先级高的调度出错,不能调入cpu中.(使用换出进程1时)
问题点数:20、回复次数:1Top
1 楼littlefish1981()回复于 2006-07-03 11:35:59 得分 0
你的huanchua()中if(p==jiuxu[i].youxian)//p的定义在哪里??Top




