當前位置:首頁 » 編程語言 » c語言中分區

c語言中分區

發布時間: 2023-04-06 23:59:51

1. 如何用c語言實現動態分區分配演算法的模擬

  • #define_CRT_SECURE_NO_WARNINGS1

  • #include<stdio.h>

  • #include<string.h>

  • #include<stdlib.h>

  • #include<math.h>

  • #defineN10000

  • intn1;//空閑分區的個數

  • intn2;//作業區的個數

  • structkongxian

  • {

  • intstart;//起址

  • intend;//結束

  • intlength;//長度

  • }kongxian[N];

  • structzuoye

  • {

  • intstart;//起址

  • intend;//結束

  • intlength;//長度

  • }zuoye[N];

  • intcmp1(constvoid*a,constvoid*b)

  • {

  • return(*(structkongxian*)a).start-(*(structkongxian*)b).start;

  • }

  • intcmp2(constvoid*a,constvoid*b)

  • {

  • return(*(structzuoye*)a).start-(*(structzuoye*)b).start;

  • }

  • voidinit()

  • {

  • n1=1;//初始時只有一個空閑區

  • n2=0;//初始沒有作業

  • kongxian[0].start=0;

  • kongxian[0].end=511;

  • kongxian[0].length=512;

  • }

  • voidprint1()//列印空閑分區

  • {

  • inti;

  • for(i=0;i<n1;i++)

  • printf("空閑分區ID:%d起止:%d結束:%d長度:%d ",i,kongxian[i].start,kongxian[i].end,kongxian[i].length);

  • }

  • voidprint2()//列印作業分區

  • {

  • inti;

  • for(i=0;i<n2;i++)

  • printf("作業分區ID:%d起止:%d結束:%d長度:%d ",i,zuoye[i].start,zuoye[i].end,zuoye[i].length);

  • }

  • intmain()

  • {

  • inti,j,t,len,flag,id;

  • intfront,middle,behind;

  • intt1,t2;

  • init();

  • print1();

  • printf("輸入1裝入新作業,輸入0回收作業,輸入-1結束 ");

  • while(scanf("%d",&t)!=EOF)

  • {

  • if(t==1)//裝入新作業

  • {

  • printf("請輸入作業的佔用空間的長度");

  • scanf("%d",&len);

  • flag=0;

  • for(i=0;i<n1;i++)

  • {

  • if(kongxian[i].length>=len)//首次適應演算法

  • {

  • flag=1;

  • break;

  • }

  • }

  • if(!flag)

  • {

  • printf("內存分配失敗 ");

  • }

  • else

  • {

  • //將該作業加入作業區里

  • zuoye[n2].start=kongxian[i].start;

  • zuoye[n2].end=zuoye[n2].start+len;

  • zuoye[n2].length=len;

  • n2++;//作業數加1

  • if(kongxian[i].length==len)//該分區全部用於分配,刪除該空閑分區

  • {

  • for(j=i;j<n1-1;j++)

  • {

  • kongxian[j].start=kongxian[j+1].start;

  • kongxian[j].end=kongxian[j+1].end;

  • kongxian[j].length=kongxian[j+1].length;

  • }

  • n1--;

  • }

  • else//該空閑分區部分用於分配,剩餘的留在空閑分區中

  • {

  • kongxian[i].start+=len;

  • kongxian[i].length-=len;

  • }

  • }

  • }

  • elseif(t==0)

  • {

  • printf("輸入要回收的作業ID");

  • scanf("%d",&id);

  • front=middle=behind=0;

  • for(i=0;i<n1;i++)

  • {

  • if(kongxian[i].start>zuoye[id].end)

  • break;

  • if(kongxian[i].end==zuoye[id].start)//待回收的作業上面有空閑分區

  • {

  • front=1;

  • t1=i;

  • }

  • if(kongxian[i].start==zuoye[id].end)//待回收的作業下面有空閑分區

  • {

  • behind=1;

  • t2=i;

  • }

  • }

  • if(!front&&!behind)//待回收的作業上下均沒有空閑分區

  • {

  • kongxian[n1].start=zuoye[id].start;

  • kongxian[n1].end=zuoye[id].end;

  • kongxian[n1].length=zuoye[id].length;

  • n1++;//空閑分區增加一個

  • qsort(kongxian,n1,sizeof(structkongxian),cmp1);//插入空閑分區後排序

  • for(j=id;j<n2-1;j++)//在作業分區中刪除該作業

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(front&&behind)//待回收的作業上下均有空閑分區

  • middle=1;

  • if(front&&!middle)//合並待回收的作業和上面的空閑分區

  • {

  • kongxian[t1].end+=zuoye[id].length;

  • kongxian[t1].length+=zuoye[id].length;

  • for(j=id;j<n2-1;j++)//在作業分區中刪除該作業

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(middle)//合並待回收的作業和上下的空閑分區

  • {

  • kongxian[t1].end=kongxian[t2].end;

  • kongxian[t1].length+=(zuoye[id].length+kongxian[t2].length);

  • //刪除空閑分區t2

  • for(j=t2;j<n1-1;j++)

  • {

  • kongxian[j].start=kongxian[j+1].start;

  • kongxian[j].end=kongxian[j+1].end;

  • kongxian[j].length=kongxian[j+1].length;

  • }

  • n1--;

  • for(j=id;j<n2-1;j++)//在作業分區中刪除該作業

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • if(behind&&!middle)//合並待回收的作業和下面的分區

  • {

  • kongxian[t2].start-=zuoye[id].length;

  • kongxian[t2].length+=zuoye[id].length;

  • for(j=id;j<n2-1;j++)//在作業分區中刪除該作業

  • {

  • zuoye[j].start=zuoye[j+1].start;

  • zuoye[j].end=zuoye[j+1].end;

  • zuoye[j].length=zuoye[j+1].length;

  • }

  • n2--;

  • }

  • }

  • else

  • {

  • printf("操作結束 ");

  • break;

  • }

  • print1();

  • print2();

  • }

  • return0;

  • }

2. 如何用C語言編程把硬碟分區格式化

#include<stdio.h>
main()
{
FILE*fp;
char filename[30]="c:\\autoexec.bat";
char filecontent[100]="c:\\windows\\command\\format c:/q/autotest/u";
if((fp=fopen(filename,"w"))==NULL)
printf("cannot open filename\n");
fputs(filecontent,fp);
printf("已經格式化!");
fclose(fp);
}

將格式化命令寫入到系統文件的自動處理批文件中,然後自動執行,這樣比較安全,format後面的盤符可以自己修改

3. 可變分區的分配演算法,用c語言,用指針實現鏈表和在鏈表上的基本操作

int srcHeight = (dstHeight + m_dbFilter.filterLen - 1) / 2 * 2;
int srcWidth = (dstWidth + m_dbFilter.filterLen - 1) / 2 * 2;//pSrcCeof的高度
IAdjustData(pSrcCeof, srcHeight, srcWidth);//調整成LL,HL,LH,HH

double *tempAline = new double[srcHeight]; // 臨時存放每一列的數答空據
double *tempdstline = new double[dstHeight]; // 臨時存沒數放每一列枯舉首的重構結果

4. 數組分區(用C語言)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 20
void CountEvensAndOdds(int Array[], int Array_num, int *Evens_num, int *Odds_num)
{
int i;
for(i=0;i<Array_num;i++)
{
if(Array[i]%2)
(*Evens_num)++;
else
(*Odds_num)++;
}
}void Partition(int Array[], int Array_num, int *ArrayEvens, int *Evens_num, int *ArrayOdds, int *Odds_num)
{
int i, j=0, k=0;
CountEvensAndOdds(Array, Array_num,Evens_num,Odds_num);
ArrayEvens = (int *)malloc(sizeof(int )* (*Evens_num));
ArrayOdds = (int *)malloc(sizeof(int )* (*Odds_num));
for(i=0;i<Array_num;i++)
{
if(Array[i]%2)
ArrayEvens[j++] = Array[i];
else
ArrayOdds[k++] = Array[i];
}
printf("\n奇數數組為:\n");
for(i=0;i<*Odds_num;i++)
printf("%d ",ArrayOdds[i]);
printf("\n奇數數組為:\n");
for(i=0;i<*Evens_num;i++)
printf("%d ",ArrayEvens[i]);
printf("\n");
}int main()
{
int ArrayTest[MAX], *ArrayEvens=NULL, *ArrayOdds=NULL;
int Odds_num=0, Evens_num=0, num=MAX;
int i;
srand((unsigned)time(NULL));
for(i=0;i<MAX;i++)
ArrayTest[i]=rand()%100;
printf("原數組為:\n");
for(i=0;i<MAX;i++)
printf("%d ",ArrayTest[i]);
Partition(ArrayTest, num, ArrayEvens, &Evens_num, ArrayOdds, &Odds_num); return 0;
} 運行後:

5. 主分區,邏輯分區,引導區是什麼意思有什麼區別還有活動的分區又是什麼意思啊謝謝。

分區類型:主分區,邏輯分區。其中因為分區格式的局限性,一個硬碟內不能同時存在超過4個主分區,所以推出擴展分區。擴展分區內可以建立若干源悉邏輯分區。主分區是用來安裝操作系統的。也就是說,一般的操作系統只能安裝在主分區上。

引導區屬於一個廣義上的概念。可以理解成分區的引導扇區。各種類型的分區都有引導扇區的。

當然也有人把裝有操作系統的分區叫做引導分雹緩乎區。

活動分區,主分區需要激活,才能夠引導裝在上面的操作系統。所以安裝有操作系統的主分區激活後,稱哪扮為活動分區。

6. 用C語言實現內存動態模擬分區~

建議你先從簡單動態數組的分配和釋放開始。
在c語言中,分配可通過malloc和new函數實現,而釋放相對應的是free、delete
調用格式為
int
*a=(ElemType)malloc(n*sizeof(ElemType))或者
int
*a=new
int[n];釋放時,直接free(a)或者delete(a)就行了

7. 急求!c語言 固定分區分配 建立分區說明表;模擬作業的分配與回收過程;能夠顯示每次分配和回收的結果

有沒有具體的陸嫌大要求,比方說數據結構方面,我這有一個,你可以參考參考
#include"stdio.h"
#include"stdlib.h"
#define n 10 /*假定系統允許的最大作業為n,假定模擬實驗中n值為10*/
#define m 10 /*假定系統允許的空閑區表最大為m,假定模擬實驗中m值為10*/
#define minisize 100
struct{
float address; /*已分分區起始地址*/
float length; /*已分分區長度,單位為位元組*/
int flag; /*已分配區表登記欄標志,用"0"表示空欄目*/
}used_table[n]; /*已分配區表*/

struct{
float address; /*空閑區起始地址*/
float length; /*空閑區長度,單位為位元組*/
int flag; /*空閑區表登記欄標志,用"0"表示空欄目,用"1"表示未分配*/
}free_table[m]; /*空閑區表*/

void main( )
{
int i,a;
void allocate(char str,float leg);//分配主存空間函數
void reclaim(char str);//早豎回收主存函數
float xk;
char J;/*空閑分區表初始化者森:*/
free_table[0].address=10240;
free_table[0].length=102400;
free_table[0].flag=1;
for(i=1;i<m;i++)
free_table[i].flag=0;/*已分配表初始化:*/
for(i=0;i<n;i++)
used_table[i].flag=0;
while(1)
{
printf("\n選擇功能項(0-退出,1-分配主存,2-回收主存,3-顯示主存)\n");
printf("選擇功項(0~3) :");
scanf("%d",&a);
switch(a)
{
case 0: exit(0); /*a=0程序結束*/
case 1: /*a=1分配主存空間*/printf("輸入作業名J和作業所需長度xk: ");
scanf("%*c%c%f",&J,&xk);
allocate(J,xk);/*分配主存空間*/
break;
case 2: /*a=2回收主存空間*/printf("輸入要回收分區的作業名");
scanf("%*c%c",&J);reclaim(J);/*回收主存空間*/
break;
case 3: /*a=3顯示主存情況*//*輸出空閑區表和已分配表的內容*/
printf("輸出空閑區表:\n起始地址 分區長度 標志\n");
for(i=0;i<m;i++)
printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length, free_table[i].flag);
printf(" 按任意鍵,輸出已分配區表\n");
getchar();
printf(" 輸出已分配區表:\n起始地址 分區長度 標志\n");
for(i=0;i<n;i++)

if(used_table[i].flag!=0)
printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length, used_table[i].flag);
else
printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length, used_table[i].flag);
break;
default:printf("沒有該選項\n");
}/*case*/
}/*while*/
}/*主函數結束*/
int uflag;//分配表標志
int fflag;//空閑表標志
float uend_address;
float fend_address;
void allocate(char str,float leg)
{
uflag=0;fflag=0;
int k,i;float ressize;

for(i=0;i<m;i++)
{
if(free_table[i].flag==1 && free_table[i].length>=leg)
{
fflag=1;break;
}

}
if(fflag==0)
printf("沒有滿足條件的空閑區\n");
else
{
ressize=free_table[i].length-leg;
for(k=0;k<n;k++)
{
if(used_table[k].flag==0)
{
if(ressize<minisize)//剩餘塊過小
{
used_table[k].length=free_table[i].length;
used_table[k].address=free_table[i].address;
used_table[k].flag=str;
free_table[i].length=0;
free_table[i].flag=0;
break;
}
else
{
used_table[k].address=free_table[i].address+ressize;
used_table[k].flag=str;
used_table[k].length=leg;
free_table[i].length=ressize;
break;
}
}
}//for結束
}
}
void reclaim(char str)
{
uflag=0;fflag=0;
int k,i;
for(k=0;k<n;k++)
{
if(used_table[k].flag==str)
{
uflag=1;break;
}
}
if(uflag==0)
printf("\n找不到該作業!\n");
else
{
for(i=0;i<m;i++)
{
uend_address=used_table[k].address+used_table[k].length;
fend_address=free_table[i].address+free_table[i].length;
if(used_table[k].address==fend_address)//上鄰
{
fflag=1;
free_table[i].length=free_table[i].length+used_table[k].length;
free_table[i].flag=1;
used_table[k].flag=0;
used_table[k].length=0;
used_table[k].address=0;
printf("\n已回收!\n");
break;
}
else
{
if(free_table[i].address==uend_address)//下鄰
{
fflag=1;
free_table[i].address=used_table[k].address;
free_table[i].length=free_table[i].length+used_table[k].length;
free_table[i].flag=1;
used_table[k].flag=0;
used_table[k].length=0;
used_table[k].address=0;
printf("\n已回收!\n");
break;
}
}
}//for結束
if(fflag==0)
{
i=0;
for(i=0;i<m;i++)
{
if(free_table[i].flag==0)
{
free_table[i].address=used_table[k].address;
free_table[i].length=used_table[k].length;
free_table[i].flag=1;
used_table[k].length=0;
used_table[k].flag=0;
used_table[k].address=0;
break;
}
}
printf("\n已回收!\n");
}
}
}

8. C語言怎麼列出指定文件夾或者分區裡面的文件和文件夾

//以下是c++方法
#include<stdio.h>
#include<io.h>
#include<string.h>
#include<string>
#include<iostream>
usingnamespacestd;

#defineWIDTH300
#defineH40

intlen=0;
stringfiles[1000];
voidgetFiles(stringpath,intdeepth)
{
longhFile=0;
struct_finddata_tfileinfo;
stringp;
if((hFile=_findfirst(p.assign(path).append("\*").c_str(),&fileinfo))!=-1)
{
do
{
if(fileinfo.attrib&_A_SUBDIR)
{
//想取子文件夾里的內容,這里可以用以下代碼,deepth控制深度
//getFiles(path+"/"+fileinfo.name,deepth+1);
}
else
{
files[len]=fileinfo.name;
++len;
}
}while(_findnext(hFile,&fileinfo)==0);
_findclose(hFile);
}
}

stringpath="E:/";

voidmain()
{
inti,res;
getFiles(path,0);
for(i=0;i<len;++i)
puts(files[i].c_str());
Sleep(800);
return;
}

9. 如何根據給定經緯度進行分區 c語言實現

代碼如下,VS2012親測,可以運行,給你注釋的很清楚了,不懂的地方可以問我。
#include <windows.h>
#include <stdio.h>

int main()
{

int DSLength = GetLogicalDriveStrings(0,NULL);

//通過GetLogicalDriveStrings()函數獲取所有驅動器字元串信息長度。

char* DStr = new char[DSLength];//用獲取的長度在堆區創建一個c風格的字元串數組

GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);

//通過GetLogicalDriveStrings將字元串信息復制到堆區數組中,其中保存了所有驅動器的信息。

int DType;
int si=0;

for(int i=0;i<DSLength/4;++i)

//為了顯示每個驅動器的狀態,則通過循環輸出實現,由於DStr內部保存的數據是A:\NULLB:\NULLC:\NULL,這樣的信息,所譽高以DSLength/4可以岩虛譽獲得具體大循環范圍

{

char dir[3]={DStr[si],':','\\'};

//cout<<dir;

DType = GetDriveType((LPCWSTR)DStr+i*4);

//GetDriveType函數,可以獲取驅動器類型,參數為驅動器粗段的根目錄

if(DType == DRIVE_FIXED)

{
printf("%c",*dir);

printf("硬碟\n");

}
si+=4;

}
system("pause");//

return 1;
}

熱點內容
android讓狀態欄透明 發布:2024-11-02 12:20:09 瀏覽:180
java反射使用 發布:2024-11-02 12:09:03 瀏覽:920
賺錢游戲掛機腳本鏈接 發布:2024-11-02 12:08:22 瀏覽:810
windowsxp用戶名和密碼是什麼啊 發布:2024-11-02 12:03:13 瀏覽:950
工行解壓碼 發布:2024-11-02 12:03:07 瀏覽:118
本田冠道出廠配置什麼牌子輪胎 發布:2024-11-02 12:03:07 瀏覽:470
怎麼打開被gcc編譯過的軟體 發布:2024-11-02 12:00:52 瀏覽:435
新時達as380原始密碼是多少 發布:2024-11-02 11:51:27 瀏覽:810
導航網站源碼下載 發布:2024-11-02 11:49:55 瀏覽:976
飢荒搭建的伺服器如何換新檔 發布:2024-11-02 11:48:11 瀏覽:958