编写一个C程序,在该程序中,提示客户端输入enter code here
2个数组:第一个将指定多个固定大小的内存分区的大小,第二个将指定一系列的内存请求,就像来自几个用户。您的程序将使用BEST FIT按顺序将内存请求分配给分区,以尽可能满足更多请求。分区已满时,您需要将其标记为忙。报告每个分区的第一个分配的地址,最后一个分配的地址和内部碎片。报告未分配的分区以及每个分区的起始地址
打印以下错误消息:输入值为零和负,大于最大分区的请求以及没有可用分区的合法请求 到目前为止,这就是我所拥有的:
#include<stdio.h>
void main()
{
int fragment[20],b[20],p[20],i,j,nb,np,temp,lowest=9999;
int lastad[10], firstad[10];
static int block_arr[20],pro_arr[20];
printf("\n\t\t\tMemory Management Scheme - Best Fit");
printf("\nEnter the number of blocks:");
scanf("%d",&nb);
printf("\nEnter the size of the blocks:-\n");
for(i=1;i<=nb;i++)
{
printf("Block no.[%d]:",i);
scanf("%d",&b[i]);
}
printf("\nEnter the number of processes:");
scanf("%d",&np);
printf("\nEnter the size of the processes :-\n");
for(i=1;i<=np;i++)
{
printf("Process no.[%d]:",i);
scanf("%d",&p[i]);
}
for(i=1;i<=np;i++)
{
for(j=1;j<=nb;j++)
{
if(block_arr[j]!=1)
{
temp=b[j]-p[i];
if(b[j]>=p[i]){
firstad[i] = b[i];
lastad[i] = p[i]+b[i]-1;
}
if(temp>=0)
if(lowest>temp)
{
pro_arr[i]=j;
lowest=temp;
}
}
}
fragment[i]=lowest;
block_arr[pro_arr[i]]=1;
lowest=10000;
}
printf("\nBlock_no\tBlock_size\tProcess_no\tProcess_size\tFragment"
"\tFirst_Ad \tLast_Ad");
for(i=1;i<=np && pro_arr[i]!=0;i++)
printf("\n%d\t\t%d\t\t%d\t\t%d\t\t%d \t\t%d\t\t%d",pro_arr[i],b[pro_arr[i]],i,p[i],fragment[i],firstad[i],lastad[i]);
}
预期输出: 我的输出错误: 我该如何纠正块1中的第一个和最后一个地址?我的第一个应为0,最后一个应为7