【发布时间】:2015-08-14 09:46:48
【问题描述】:
我正在编写代码以使用最短剩余时间优先算法 (SRTF) 计算进程的平均等待和周转时间。
我想以如下所示的格式打印结果。
Enter the number of processess:4
Enter the process name, CPU Burst Time, Arrival Time row wise:
1 3 0
2 6 1
3 4 4
4 2 6
Process CPU AT Finish TT WT
1 3 0 3 3 0
2 6 1 15 14 9
3 4 4 5 1 1
4 2 6 5 -1 3
The average turnaround time is: 4.000000
The average waiting time is: 3.000000
这里 AT = 到达时间,TT = 周转时间,WT = 等待时间。但是出现一些错误,因为过程 3 和 4 的完成时间是不可能的。这是我的代码:
#include<stdio.h>
#include<stdlib.h>
int **a;
int return_min(int upto, int n)
{
int min=1000, idx =-1;
for(int i=0; i<n; i++)
{
if(a[i][1]!=-1 && a[i][2]<=upto && min>a[i][1])
{
min=a[i][1];
idx = i;
}
}
return idx;
}
void main()
{
int n,i,j,time=0, idx,total_tt=0, total_wt=0;
float avg_tt, avg_wt;
printf("Enter the number of processess:");
scanf("%d",&n);
a=(int **)malloc(sizeof(int *)*n);
printf("\nEnter the process name, CPU Burst Time, Arrival Time row wise:\n");
for(i=0;i<n;i++)
{
*(a+i)=(int *)malloc(sizeof(int)*7);
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
a[i][6]=a[i][1];
}
while((idx=return_min(time,n)) != -1)
{
a[idx][1]--;
if(a[idx][1] == 0)
a[idx][1]--;
time++;
for(int i=0; i<n; i++)
{
if(a[i][1]!=-1 && i!=idx && a[i][2]<=time)
a[i][5]++;
}
}
printf("\n\tProcess\tCPU\tAT\tFinish\tTT\tWT\n");
for(i=0;i<n;i++)
{
a[i][1]=a[i][6];
a[i][3]=a[i][5]+a[i][1];
a[i][4]=a[i][3]-a[i][2];
for(j=0;j<6;j++)
{
printf("\t%d",a[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)
total_tt+=a[i][4];
avg_tt = total_tt/n;
printf("\nThe average turnaround time is: %f", avg_tt);
for(i=0;i<n;i++)
total_wt+=a[i][5];
avg_wt = total_wt/n;
printf("\nThe average waiting time is: %f\n", avg_wt);
}
我都犯了什么错误?请纠正我。
【问题讨论】:
-
你应该使用 int main(void){return 0) 而不是 void(main) 并且不需要强制转换 malloc 因为它的返回类型是 void* 如果你不知道,'for ' 循环初始声明只允许在 C99 或 C11 模式下 (int i= 0)
标签: c algorithm operating-system