【发布时间】:2018-03-10 15:02:02
【问题描述】:
这是我的 FCFS CPU 调度算法代码。当我替换 j=1 时,输出会发生变化。
#include<stdio.h>
#include<string.h>
#include<conio.h>
main()
{
char pn[10][10],t[10];
int arr[10],bur[10],star[10],finish[10],tat[10],wt[10],i,j,n,temp;
int totwt=0,tottat=0;
//clrscr();
printf("Enter the number of processes:");
scanf("%d",&n);
for(i=0; i<n; i++)
{
printf("Enter the ProcessName, Arrival Time& Burst Time:");
scanf("%s%d%d",&pn[i],&arr[i],&bur[i]);
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(arr[i]<arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
temp=bur[i];
bur[i]=bur[j];
bur[j]=temp;
strcpy(t,pn[i]);
strcpy(pn[i],pn[j]);
strcpy(pn[j],t);
}
}
}
for(i=0; i<n; i++)
{
if(i==0)
star[i]=arr[i];
else
star[i]=finish[i-1];
wt[i]=star[i]-arr[i];
finish[i]=star[i]+bur[i];
tat[i]=finish[i]-arr[i];
}
printf("\nPName Arrtime Burtime WaitTime Start TAT Finish");
for(i=0; i<n; i++)
{
printf("\n%s\t%3d\t%3d\t%3d\t%3d\t%6d\t%6d",pn[i],arr[i],bur[i],wt[i],star[i],tat[i],finish[i]);
totwt+=wt[i];
tottat+=tat[i];
}
printf("\nAverage Waiting time:%f",(float)totwt/n);
printf("\nAverage Turn Around Time:%f",(float)tottat/n);
getch();
return 0;
}
问题线:
for(j=0; j<n; j++)
据我所知,当我改变 j=1 时输出不应该改变。由于条件arr[i]<arr[j] 无论如何都会为假,因此将跳过该步骤。
您可以自己运行程序并查看更改值和不更改值的输出。
【问题讨论】:
-
可能是因为未定义的行为。
-
并行数组建议使用
struct。 -
您是否尝试过使用调试器深入研究该区域以查看发生了什么?
-
您应该从问题中删除 cpu 标签。
-
为了便于阅读和理解:1) 遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。 2) 单独的代码块 (
forifelsewhiledo...whileswitchcasedefault)通过一个空行。 3) 用 2 或 3 个空行分隔函数(保持一致)
标签: c cpu scheduling