帮我补充代码://函数名:print 参数:无 void print() { //函数功能:输出辅存位示图 } //函数名:allocate 参数:无 void allocate() { //函数功能:为作业申请空间, 分别有、序号、块、字、位、柱面号、磁 头号、扇区号,并输出 } //函数名:recycle参数:无 void recycle() { //函数功能:回收作业的存储空间,并输出位示图 } //函数名:init 参数:无 void init() { //函数功能:随机初始位示图,并输出位示图 } //函数名:menu 参数:无 int menu() { //函数功能:输出位示图 } int main() { printf("请输入辅存空间的大小(单位:K)和字长(32 or 64)和块长(单位:K):"); scanf("%d %d %d",&disksize,&word,&blocksize); printf("请输入该辅存硬盘的磁道数(磁头数)和每个磁道的扇区数:"); scanf("%d %d",&head,§or); sum=available=disksize/blocksize; line=sum/word+(sum%word?1:0); cylinder=head*sector; init(); while(1) { int c; c=menu();; if(c==1) { break; } } return 0; }
时间: 2024-01-19 13:02:47 浏览: 113
C++ STL 内 std::{bind/tuple/function} 简单实现
下面是对函数的补充:
```c++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 全局变量定义
int disksize; // 辅存空间大小
int word; // 字长
int blocksize; // 块长
int head; // 磁头数
int sector; // 每个磁道扇区数
int sum; // 总块数
int line; // 每行块数
int cylinder; // 柱面数
int *bitmap; // 辅存位示图
// 函数声明
void print();
void allocate();
void recycle();
void init();
int menu();
// 函数定义
void print() {
printf("辅存位示图:\n");
for(int i = 0; i < sum; i++) {
printf("%d", bitmap[i]);
if (i % line == line - 1) printf("\n");
}
}
void allocate() {
printf("请输入作业的序号、块数、字数、位数、柱面号、磁头号、扇区号:");
int job_id, blocks, words, bits, cylinder_num, head_num, sector_num;
scanf("%d %d %d %d %d %d %d", &job_id, &blocks, &words, &bits, &cylinder_num, &head_num, §or_num);
int start = -1;
for(int i = 0; i < sum; i++) {
int flag = 1;
for(int j = 0; j < blocks; j++) {
if (i + j >= sum || bitmap[i+j] == 1) {
flag = 0;
break;
}
}
if (flag == 1) {
start = i;
break;
}
}
if (start == -1) {
printf("没有足够的空间!\n");
return;
}
for(int i = start; i < start + blocks; i++) {
bitmap[i] = 1;
}
printf("作业序号:%d,起始块:%d,块数:%d,字数:%d,位数:%d,柱面号:%d,磁头号:%d,扇区号:%d\n",
job_id, start, blocks, words, bits, cylinder_num, head_num, sector_num);
}
void recycle() {
printf("请输入要回收的作业的序号:");
int job_id;
scanf("%d", &job_id);
for(int i = 0; i < sum; i++) {
if (bitmap[i] == job_id) {
bitmap[i] = 0;
}
}
printf("回收成功!\n");
}
void init() {
bitmap = (int*)malloc(sizeof(int) * sum);
srand((unsigned)time(NULL));
for(int i = 0; i < sum; i++) {
if (rand() % 2 == 0) {
bitmap[i] = 0;
} else {
bitmap[i] = 1;
}
}
print();
}
int menu() {
printf("\n");
printf("1. 退出\n");
printf("2. 申请空间\n");
printf("3. 回收空间\n");
printf("4. 输出位示图\n");
printf("请选择:");
int c;
scanf("%d", &c);
switch(c) {
case 1: return 1; break;
case 2: allocate(); break;
case 3: recycle(); break;
case 4: print(); break;
default: printf("无效选项!\n"); break;
}
return 0;
}
int main() {
printf("请输入辅存空间的大小(单位:K)和字长(32 or 64)和块长(单位:K):");
scanf("%d %d %d",&disksize,&word,&blocksize);
printf("请输入该辅存硬盘的磁道数(磁头数)和每个磁道的扇区数:");
scanf("%d %d",&head,§or);
sum=available=disksize/blocksize;
line=sum/word+(sum%word?1:0);
cylinder=head*sector;
init();
while(1) {
int c;
c=menu();
if(c==1) {
break;
}
}
return 0;
}
```
阅读全文