需要最适合C的帮助

时间:2018-09-21 01:50:54

标签: c best-fit

编写一个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]);
}

预期输出: enter image description here 我的输出错误: enter image description here 我该如何纠正块1中的第一个和最后一个地址?我的第一个应为0,最后一个应为7

0 个答案:

没有答案