优化下列代码://先来先服务 #include <stdlib.h> #include <stdio.h> struct pcb{ // 定义一个结构体,里面包含的有一个进程相关的信息 char name[10]; //进程名称 (输入) float arrivetime; //到达时间 (输入) float servicetime; //服务时间 (输入) float starttime; //开始时间 float finishtime; //结束时间 float zztime; //周转时间=finishtime-arrivetime float dqzztime; //带权周转时间=zztime/servicetime }; //输入进程信息 void input(pcb *p, int N) //p为pdb数组名, N为pcb数组的元素个数 { int i; prin
时间: 2023-09-11 07:10:49 浏览: 98
下面是优化后的代码:
```c
#include <stdlib.h>
#include <stdio.h>
struct pcb {
char name[10]; //进程名称 (输入)
float arrivetime; //到达时间 (输入)
float servicetime; //服务时间 (输入)
float starttime; //开始时间
float finishtime; //结束时间
float zztime; //周转时间=finishtime-arrivetime
float dqzztime; //带权周转时间=zztime/servicetime
};
//输入进程信息
void input(pcb *p, int N) {
int i;
for (i = 0; i < N; i++) {
printf("请输入第%d个进程的信息:\n", i + 1);
printf("进程名称:");
scanf("%s", p[i].name);
printf("到达时间:");
scanf("%f", &p[i].arrivetime);
printf("服务时间:");
scanf("%f", &p[i].servicetime);
}
}
//先来先服务算法
void FCFS(pcb *p, int N) {
int i;
float sum_zztime = 0, sum_dqzztime = 0;
p[0].starttime = p[0].arrivetime;
p[0].finishtime = p[0].starttime + p[0].servicetime;
p[0].zztime = p[0].finishtime - p[0].arrivetime;
p[0].dqzztime = p[0].zztime / p[0].servicetime;
for (i = 1; i < N; i++) {
if (p[i].arrivetime <= p[i - 1].finishtime) {
p[i].starttime = p[i - 1].finishtime;
} else {
p[i].starttime = p[i].arrivetime;
}
p[i].finishtime = p[i].starttime + p[i].servicetime;
p[i].zztime = p[i].finishtime - p[i].arrivetime;
p[i].dqzztime = p[i].zztime / p[i].servicetime;
}
for (i = 0; i < N; i++) {
sum_zztime += p[i].zztime;
sum_dqzztime += p[i].dqzztime;
}
printf("先来先服务算法:\n");
printf("进程名称 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间\n");
for (i = 0; i < N; i++) {
printf("%-10s %-9.2f %-9.2f %-9.2f %-9.2f %-9.2f %-9.2f\n", p[i].name, p[i].arrivetime,
p[i].servicetime, p[i].starttime, p[i].finishtime, p[i].zztime, p[i].dqzztime);
}
printf("平均周转时间:%.2f\n", sum_zztime / N);
printf("平均带权周转时间:%.2f\n", sum_dqzztime / N);
}
int main() {
int N;
printf("请输入进程数:");
scanf("%d", &N);
pcb *p = (pcb *) malloc(N * sizeof(pcb));
input(p, N);
FCFS(p, N);
free(p);
return 0;
}
```
主要的优化点包括:
1. 在输入函数中使用了循环,减少了代码的重复部分。
2. 在输入函数中,结构体数组名直接作为参数传递,而不是再次定义一个变量来表示。
3. 在先来先服务算法函数中,使用了更简洁的代码来计算每个进程的开始时间、结束时间、周转时间和带权周转时间。
4. 在输出结果时,使用了更合理的格式化字符串,使输出结果更加美观。
5. 在主函数中,使用动态内存分配来申请结构体数组的内存,更加灵活。
阅读全文