| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:关于操作系统动态分区最坏算法的程序输出有问题,求大神指教
取消只看楼主 加入收藏
fan20121221
Rank: 1
等 级:新手上路
帖 子:17
专家分:8
注 册:2012-12-10
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:1 
关于操作系统动态分区最坏算法的程序输出有问题,求大神指教
#include"stdio.h"
#define n 5
int turn(int k,int a[n][3])//用冒泡排序法对空闲块大小从大到小排序
{
    int l,i,j,tem;
    for(l=0;l<k;l++)
     for(i=0;i<k-l;i++)
     {   
        if(a[i][1]<a[i+1][1])
        {
           for(j=0;j<3;j++)
           {
              tem=a[i][j];
              a[i][j]=a[i+1][j];
              a[i+1][j]=tem;
           }
        }
     }
}
main()
{
    int i,j,k,l,m,tem,a[n][3],b[n];//a[][]数组是空闲块,b[]数组是作业数组
    printf("请输入空闲块的个数:");
    scanf("%d",&k);
    printf("\n");
    printf("请输入空闲块的分区号、大小、起址:\n");
    printf("分区号\t大小\t起址\n");
    for(i=0;i<k;i++)
    {    for(j=0;j<3;j++)
            scanf("%d",&a[i][j]);
        printf("\n");
    }
    printf("空闲区从大到小顺序为\n");
    printf("分区号\t大小\t起址\n");
    turn(k,a);                    //调用函数,使空闲块按空区从大到小输出
    for(i=0;i<k;i++)
    {   
        for(j=0;j<3;j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    printf("请输入作业的数量:\n");
    scanf("%d",&m);
    printf("请输入作业的大小:\n");
   
    for(l=0;l<m;l++)
    {
        scanf("%d",&b[l]);
        printf("作业%d的大小为%d\n",l,b[l]);
    }
       for(l=0;l<m;l++)                   //对作业进行分配
        {   
            if(b[l]>a[1][1])
            printf("作业%d无法分配!\n",l);
            else
            {
                for(i=0;i<k;i++)
                   if(b[l]<a[i][1])
                   {   a[i][1]-=b[l];
                      printf("作业%d分配在%d区!\n",l,a[i][0]);
                      break;
                   }        
            turn(k,a);//每分配一个作业后,空闲块会改变,所以要从新排序
            }
        }
   
     printf("输出分配后的空闲块\n");
     printf("分区号\t大小\t起址\n");
     for(l=0;l<k;l++)             //按分区号从小到大排序输出
     for(i=0;i<k-l;i++)
     {   
        if(a[i][0]>a[i+1][0])
        {
           for(j=0;j<3;j++)
           {
              tem=a[i][j];
              a[i][j]=a[i+1][j];
              a[i+1][j]=tem;
           }
        }
     }
    for(i=0;i<k;i++)
    {   
        for(j=0;j<3;j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
}

   
图片附件: 游客没有浏览图片的权限,请 登录注册

按正确的分配后的输出应该是:
1     3     5
2     32    10
3     14    90
可是为什么我的会这样子?求指点!!

搜索更多相关主题的帖子: include 动态 
2012-12-23 22:36
fan20121221
Rank: 1
等 级:新手上路
帖 子:17
专家分:8
注 册:2012-12-10
收藏
得分:0 
二楼,排序没错吧?两个冒泡排序呀?第一个是按大小排的,第二个是分区号排的。要不你把正确程序写一下。
四楼说没赋值,我就更不懂了。可我明明就赋值了呀?
不过还是感谢各位。我也觉得我的程序很别扭,模块化结构化都不好。实在是少实践呀!以后一定虚心学习,还望各位不吝赐教!!谢谢
2012-12-24 13:47
快速回复:关于操作系统动态分区最坏算法的程序输出有问题,求大神指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017935 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved