模拟调度

  模拟调度
1 #include<stdio.h> 2 3 #define N 10 4 5 typedef struct process //进程结构 6 7 { 8 9 char name; 10 11 int arrive; 12 13 int prio; 14 15 int needTime; 16 17 char state; 18 19 20 21 }Process; 22 23 Process a[N]; 24 25 26 27 28 void input(Process a[],int n){ //输入函数 29 30 int i; 31 32 for(i=0;i<n;i++) 33 34 { 35 36 printf("请输入第%d个进程的进程名:",i+1); 37 38 scanf("%c",&a[i].name); 39 40 printf("请输入第%d个进程的优先级:",i+1); 41 42 scanf("%d",&a[i].prio); 43 44 printf("请输入第%d个进程的到达时间:",i+1); 45 46 scanf("%d",&a[i].arrive); 47 48 printf("请输入第%d个进程的需要时间:",i+1); 49 50 scanf("%d",&a[i].needTime); 51 52 a[i].state='r'; 53 54 getchar(); 55 56 printf("\n"); 57 58 } 59 60 } 61 62 void sort(Process a[],int n) //排序算法 63 64 { 65 66 int i,j; 67 68 Process temp; 69 70 for(i=0;i<n;i++) 71 72 for(j=i;j<n;j++) 73 74 { 75 76 if(a[j].prio>a[i].prio) //按进程优先级排序 77 78 { 79 80 temp=a[j]; 81 82 a[j]=a[i]; 83 84 a[i]=temp; 85 86 } 87 88 if(a[j].prio==a[i].prio) //如果优先级相同,按先来先服务原则排序 89 90 { 91 92 if(a[j].arrive<a[i].arrive) 93 94 { 95 96 temp=a[j]; 97 98 a[j]=a[i]; 99 100 a[i]=temp; 101 102 } 103 104 } 105 106 } 107 108 } 109 110 void output(Process a[],int n) 111 112 { 113 114 int i; 115 116 printf("\t进程排序结果:\n"); 117 118 printf("\t********************************\n"); 119 120 printf("\t进程名\t优先级\t到达\t需要\n"); 121 122 for(i=0;i<n;i++) 123 124 printf("\t%c\t%d\t%d\t%d\t%c\n",a[i].name,a[i].prio,a[i].arrive,a[i].needTime,a[i].state); 125 126 printf("\t********************************\n"); 127 128 } 129 130 void running(Process a[],int n) 131 132 { 133 134 int i; 135 136 for(i=0;i<n;i++) 137 138 { 139 140 while(a[i].needTime!=0) 141 142 { 143 144 printf("\t按任意键继续。。。。。\n"); 145 146 fflush(stdin); 147 148 getchar(); 149 150 a[i].needTime=a[i].needTime-1; 151 152 a[i].prio=a[i].prio-1; 153 154 if(a[i].needTime==0) 155 156 { 157 158 a[i].state='f'; 159 160 } 161 162 printf("\t现在执行的进程信息:\n"); 163 164 printf("\t进程名\t优先级\t需要\n"); 165 166 printf("\t%c\t%d\t%d\t%c\n",a[i].name,a[i].prio,a[i].needTime,a[i].state); 167 168 printf("\t********************************\n"); 169 170 sort(a,n); 171 172 output(a,n); 173 174 } 175 176 } 177 178 } 179 180 void yxj() 181 182 { 183 184 int n; 185 186 printf("你想输入多少个进程:"); 187 188 scanf("%d",&n); 189 190 getchar(); 191 192 input(a,n); 193 194 sort(a,n); 195 196 running(a,n); 197 198 } 199 200 201 202 203 204 205 void main() 206 { 207 int a,o=1; 208 209 loop: while(o==1) 210 { 211 printf("\n"); 212 printf("\t\t/****************************************/\n"); 213 printf("\t\t/**** **** ** 进程调度模拟 ** **** ****/\n"); 214 printf("\t\t/***************************************/"); 215 printf("\n\t\t/* 1、优先级优先 调 度 */"); 216 printf("\n\t\t/* 2、短作业优先 调 度 */"); 217 printf("\n\t\t/* 3、时间片轮转 调 度 */"); 218 printf("\n\t\t/* 4、先到先服务 调 度 */"); 219 printf("\n\t\t/* 0、 退 出 */\n"); 220 printf("\t\t/****************************************/"); 221 printf("\n\t\t请选择菜单项?\t"); 222 scanf("%d",&a); 223 printf("\n"); 224 225 switch(a) 226 { 227 case 4: printf("此功能未完成\n") ;break;//fcfs() 228 case 2: printf("此功能未完成\n") ;break;//sjf() 229 case 3: printf("此功能未完成\n") ;break;//sjf() 230 case 1: yxj();break;//printf("4\n") 231 default: break; 232 } 233 if(a<0 || a>4){ 234 printf("\t\t输入有误,请重新输入!!") ; 235 goto loop; 236 } 237 } 238 }
总结:这次实验收益匪浅,也历时很久,刚开始做的时候一直在翻书看回以前的知识,然后整理思路,做出个框架来,再逐步实现各个功能,但是发现挺难的,中间出现很多很多的错误,再自己一点一点不断的改进。
posted @ 2016-05-18 15:57  36-林秋雁  阅读(141)  评论(0编辑  收藏  举报