主存储器空间的分配和回收

合集下载

实验报告二主存空间的分配和回收

实验报告二主存空间的分配和回收
temp=freeTab; /*寻找空闲表中对应登记项*/
if(strcmp(PName,"OS")==0)
{ printf("ERROR!");
return;
}
while((strcmp(temp->proID,PName)!=0||temp->flag==1)&&temp)
temp=temp->next;
四、程序中使用的数据结构及符号说明
结构1:
typedef struct freeTable
{
char proID[6];
int startAddr; /*空闲区起始地址*/
int length; /*空闲区长度,单位为字节*/
int flag; /*空闲区表登记栏标志,用"0"表示空表项,用"1"表示未分配*/
freeNode=freeNode->next;
}
getchar();
break;
default:printf("没有该选项\n");
}/*case*/
}/*while*/
}/*main()*/
六、运行调试结果
初始界面:
分配主存,五个作业名:P1、P2、P3、P4、P5
显示主存使用情况:
回收主存P2:
if(front->flag==1&&rear->flag==1)
/* 上邻空闲区,下邻空闲区,三项合并*/
{
front->length=front->length+rear->length+temp->length;

动态分区存储管理方式的主存分配回收总结

动态分区存储管理方式的主存分配回收总结

动态分区存储管理方式的主存分配回收总结动态分区存储管理是一种常见的主存分配回收技术,它通过动态创建并分配大小不等的存储块来管理主存空间,以满足不同进程的需求。

这种管理方式在操作系统中起着至关重要的作用,因此本文将对动态分区存储管理的主存分配回收进行总结,从原理、特点、优缺点及其在实际应用中的情况进行阐述。

一、原理动态分区存储管理是基于分区的主存管理机制,它将主存空间划分为多个不等大小的分区,每个分区可以被分配给一个进程使用。

当系统收到一个新进程的请求时,它会根据需要的主存大小为进程分配一个合适大小的分区。

当进程执行完毕,系统会回收该进程所占用的分区,使得该空间可以再次被分配给其他进程使用。

在动态分区存储管理中,主要有两种分配方式:首次适应算法和最佳适应算法。

首次适应算法是从第一个满足大小要求的分区开始进行分配;而最佳适应算法是从所有满足大小要求的分区中选择最小的分区进行分配。

这两种分配方式都有自己的优点和局限性,但它们都是基于动态分区存储管理的基本原理。

二、特点1.灵活性动态分区存储管理可以根据进程的需求动态地分配和回收主存空间,提高了主存的利用率和效率。

进程可以根据需要申请和释放主存空间,而无需预先分配固定大小的空间。

2.节省空间动态分区存储管理可以尽可能地利用主存中的碎片空间,减少了外部碎片的浪费。

这种管理方式能够充分利用主存空间,提高了主存的利用率。

3.多样性动态分区存储管理可以适应不同大小的进程需求,能够根据进程的大小灵活地进行分区分配,满足了不同进程的需求。

三、优缺点1.优点(1)提高了主存的利用率和效率。

(2)灵活地分配和回收主存空间,满足不同进程的需求。

(3)节省了主存空间,减少了碎片的浪费。

2.缺点(1)会产生外部碎片,影响了分区空间的利用率。

(2)分配和回收过程中可能产生较大的开销,影响了系统的性能。

四、在实际应用中的情况动态分区存储管理在操作系统中得到了广泛的应用,特别是在多道程序设计和实时系统中。

实验四 主存储器空间的分配和回收

实验四  主存储器空间的分配和回收

漳州师范学院实验报告班级 11网络2班学号姓名座号 15 同组人实验日期成绩课程名称:操作系统实验题目:主存储器空间的分配和回收实验目的与要求PC 兼容机。

Window xp 以上操作系统实验环境的配置第 1 页实验内容与具体步骤实验内容与具体步骤源代码如下:#include <stdio.h>#include <stdlib.h>#include <iostream.h>#define n 10 //模拟实验中,允许的最大作业数目#define 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 allocate(char job,float xk){ //该内存分配算法,采用是最优适应算法,int i,k; float ad; k=-1;for(i=0;i<=m;i++)if(free_table[i].length>=xk&&free_table[i].flag==1)//通过该循环,先找到最小分区if(k==-1||free_table[i].length<free_table[k].length)k=i;//用变量k来存放最小的分区的下标if(k==-1){ printf("Allocation failure!\n");return;}if(free_table[k].length-xk<=minisize){//不需分割的情况,用变量ad和xk存放将分配出去空闲区的地址和长度free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{//若寻找到的最小适合空间相对作业请求的空间来说仍过大,则进行分割分区。

主存空间的分配与回收实验报告

主存空间的分配与回收实验报告
1、实验目的:
熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空 间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区 存储管理方式及其实现过程。
2、实验要求
实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空 闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、循 环首次适应算法、最佳适应算法三种算法来实现主存的分配与回收。同时,要 求设计一个实用友好的用户界面,并显示分配与回收的过程。
主存空间的分配与回 收实验报告
用心整理的精品 word 文档,下载即可编辑!!
实验报告
课程名称: 操作系统
实验名称: 主存空间的分配与回收

号: 110310014
学生姓名: 于钊

级: 信管 1101 班
指导教师: 吴联世
实验日期: 2013 年 12 月 5 日
2 精心整理,用心做精品
用心整理的精品 word 文档,下载即可编辑!!
1. 设计记录主存使用情况的数据表格 由 于动态分区的大小是由作业需求量决定的,故分区的长度是预先不固定的, 且分区的个数也随主存分配和回收变动。总之,所有分区情况随时可能发生变 化,数据表 格的设计必须和这个特点相适应。由于分区长度不同,因此设计的 表格应该包括分区在主存中的起始地址和长度。由于分配时,空闲区有时会变 成两个分区:空闲区 和已分分区,回收主存分区时,可能会合并空闲区,这样 如果整个主存采用一张表格记录已分分区和空闲区,就会使表格操作繁琐。主 存分配时查找空闲区进行分 配,然后填写已分配区表,主要操作在空闲区;某 个作业执行完后,将该分区贬词空闲区,并将其与相邻的空闲区合并,主要操 作也在空闲区。由此可见,主存的分 配与回收主要时对空闲区的操作。这样为 了便于对主存空间的分配与回收,就建立两张分区表记录主存的使用情况:“已 分配区表”记录作业占用分区,“空闲区 表”记录空闲区。

动态分区-主存储器空间的分配和回收

动态分区-主存储器空间的分配和回收

实验五Linux设备管理一. 实验目的1.掌握加载移动硬盘,U盘和光盘镜像文件。

2.掌握分区的格式化,加载等基本操作二. 实验步骤1. 分区操作(1) 在虚拟机中添加一块虚拟硬盘VM->Settings,选择Hardware选项卡,单击Add…,选择添加Hard Disk,选择Createa new virtual disk,选择SCSI,指定虚拟硬盘大小(如果超过2G,则将Split disk into2 GB files选中),指定虚拟硬盘文件位置和名字。

(2) 启动虚拟机中的Linux。

(3) 按下列步骤进行分区操作:•对系统中刚创建的硬盘进行分区:fdisk /dev/sdb••创建新的分区:输入n•创建主分区:输入p•输入分区编号:输入1•直接回车,从硬盘起始柱面创建分区•直接回车,分区大小截至到最后一个柱面(cylinder)•显示当前分区表:输入p•••删除已经存在的分区:d(注意:由于前面只分了一个分区,故没有被删除分区的编号提示选择,直接删除分区。

若有多个分区,则会出现分区的编号提示选择)。

•显示当前分区表:输入p••创建大小为500MB的1号主分区:输入n,再输入p,分区号输入1,起始柱面默认,最后柱面输入+500M。

•将磁盘剩余空间创建为编号为2的扩展分区:输入n,再输入e。

分区号输入2,起始柱面和最后柱面都默认。

••创建大小为400MB的逻辑分区:输入n,再输入l,指定分区大小为400MB •再创建大小为256MB的逻辑分区:输入n,再输入l,指定分区大小为256MB••显示当前分区表:输入p••将5号分区更改为fat32类型:输入t,再输入5,再输入C••将6号分区更改为swap类型:输入t,再输入6,再输入82••显示当前分区表:输入p••将当前的分区设置保存,并退出fdisk:输入w••在非交互状态下显示当前分区有信息:fdisk –l /dev/sdb••将/dev/sdb1格式化成ext2格式:mkfs –t ext2 /dev/sdb1••将/dev/sdb5格式化成FAT32格式:mkfs –t vfat /dev/sdb5••将/dev/sdb1加载到/mnt:mount –t ext2 /dev/sdb1 /mnt••查看/mnt中的内容:ls /mnt••卸载/dev/sdb1:umount /mnt或umount /dev/sdb1••将/dev/sdb5加载到/mnt/win:mount –t vfat /dev/sdb5 /mnt/win (若目录win不存在,则先创建)••2. 加载和卸载U盘(1) 自备一U盘,在LINUX中加载它,并列出U盘中的文件和目录。

操作系统实验--主存空间的分配和回收

操作系统实验--主存空间的分配和回收

主存空间的分配与回收#include"stdio.h"#include"stdlib.h"#define n 10 /*假定系统允许的最大作业为n,假定模拟实验中n 值为10*/#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/#define minisize 100struct{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].lengt h, used_table[i].flag);elseprintf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].lengt h, 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");}}}11。

操作系统实验四报告-主存空间分配和回收(含源码)

操作系统实验四报告-主存空间分配和回收(含源码)

操作系统实验四报告-主存空间分配和回收(含源码)计算机学院计算机科学与技术专业班学号姓名教师评定_________________实验题目主存空间的分配和回收一、实验目的熟悉主存的分配与回收。

理解在不同的存储管理方式下,如何实现主存空间的分配与回收。

掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。

二、实验内容和要求主存的分配和回收的实现是与主存储器的管理方式有关的。

所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。

所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。

可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并且分区个数是可以调整的。

当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。

随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。

实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、最差适应算法三种算法来实现主存的分配与回收。

同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。

同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。

三、实验主要仪器设备和材料实验环境硬件环境:IBM-PC或兼容机软件环境:VC++ 6.0四、实验原理及设计分析某系统采用可变分区存储管理,在系统运行当然开始,假设初始状态下,可用的内存空间为640KB,存储器区被分为操作系统分区(40KB)和可给用户的空间区(600KB)。

(作业1 申请130KB、作业2 申请60KB、作业3 申请100KB 、作业2 释放 60KB 、作业4 申请 200KB、作业3释放100KB、作业1 释放130KB 、作业5申请140KB 、作业6申请60KB 、作业7申请50KB)当作业1进入内存后,分给作业1(130KB),随着作业1、2、3的进入,分别分配60KB、100KB,经过一段时间的运行后,作业2运行完毕,释放所占内存。

linux主存空间分配与回收

linux主存空间分配与回收

在Linux操作系统中,主存空间(内存)的分配和回收是由内核管理的。

当应用程序或系统需要更多的内存时,它们会向内核请求,内核会根据可用内存的情况来分配内存。

同样,当应用程序或系统不再需要某块内存时,它们会将其释放给内核,内核会将其回收以供将来使用。

1. 内存分配:
在Linux中,当一个进程需要更多的内存时,它会调用`malloc()`或`alloc()`等函数。

这些函数会向内核发送请求,要求分配一块指定的内存大小。

内核会查看当前可用内存的情况,并根据需要分配一块内存。

内核分配内存的过程包括以下几个步骤:
* 找到可用的物理内存页框。

* 将页框标记为已分配状态。

* 更新内存管理数据结构。

* 将页框地址返回给进程。

2. 内存回收:
当一个进程不再需要某块内存时,它会调用`free()`或`release()`等函数来释放该内存。

这些函数会将该内存标记为未分配状态,并通知内核回收该内存。

内核回收内存的过程包括以下几个步骤:
* 标记该页框为未分配状态。

* 更新内存管理数据结构。

* 如果该页框中有数据,则将其写回到磁盘或其他存储设备中。

* 将该页框标记为可用状态,以供将来使用。

需要注意的是,Linux采用了先进的内存管理技术,如分页和段页式管理,以及虚拟内存技术等,使得内存的分配和回收更加高效和灵活。

同时,Linux还具有强大的内存监控和管理工具,如`top`、`htop`、`free`等,可以帮助管理员监控和管理系统的内存使用情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二主存储器空间的分配和回收一、实验题目模拟在分页式管理方式下采用位示图来表示主存分配情况,实现主存空间的分配和回收。

[提示]:(1)、分页式存储器把主存分成大小相等的若干块,作业的信息也按块的大小分页,作业装入主存时可把作业的信息按页分散存放在主存的空闲块中,为了说明主存中哪些块已经被占用,哪些块是尚未分配的空闲块,可用一张位示图来指出。

位示图可由若干存储单元来构成,其中每一位与一个物理块对应,用0/1表示对应块为空闲/已占用。

(2)、假设某系统的主存被分成大小相等的64块,则位示图可用8个字节来构成,另用一单元记录当前空闲块数。

如果已有第0,1,4,5,6,9,11,13,24,31,共10(3)、当要装入一个作业时,根据作业对主存的需要量,先查当前空闲块数是否能满足作业要求,若不能满足则输出分配不成功。

若能满足,则查位示图,找出为“0”的一些位,置上占用标志“1”,从“当前空闲块数”中减去本次占用块数。

按找到的计算出对应的块号,其计算公式为:块号= j 8+i其中,j表示找到的是第n个字节,I表示对应的是第n位。

根据分配给作业的块号,为作业建立一张页表,页表格式:(4) 、当一个作业执行结束,归还主存时,根据该作业的页表可以知道应归还的块号,由块号可计算出在位示图中的对应位置,把对应位的占用标志清成“0”,表示对应的块已成为空闲块。

归还的块数加入到当前空闲块数中。

由块号计算在位示图中的位置的公式如下:字节号j=[块号/8] ([ ]表示取整)位数i={块号/8} ({ }表示取余)(5) 设计实现主存分配和回收的程序。

假定位示图的初始状态如(2)所述,现有一信息量为5页的作业要装入,运行你所设计的分配程序,为作业分配主存且建立页表(格式如(3)所述)。

然后假定有另一作业执行结束,它占用的块号为第4,5,6和31块,运行你所设计的回收程序,收回作业归还的主存块。

要求能显示和打印分配或回收前后的位示图和当前空闲块数,对完成一次分配后还要显示或打印为作业建立的页表。

二、程序中使用的数据结构及符号说明1、数据结构:本程序中使用的是:一维数组和二维数组2、函数说明:void menu():显示菜单选项huawei():调用menu()函数显示菜单,并且根据允许输入调用相应函数,执行操作。

void Initvalue():根据输入开辟相应的块号空间,并且按照题目要求初始化已占用块号void kongxiankuai():将空闲块号保存在kuai[]数组中,并记录数组中元素个数void printkongxiankuaishu():打印空闲块号void caozuo():根据作业所需块数修改位示图void yebiao():打印页表void weishitu():打印位示图void guihuan():按照需要释放内存三、流程图四、打印一份源程序并附上注释Cpp文件:#include<stdio.h>#include<string.h>#include<malloc.h>#include"stdlib.h"#include"lin1402.h"int main(){huawei();return 0;}头文件:int **table;int m,n;int b=0;int *kuai;int changdu[10];int k;int v=0;int kuaihao[10][64];/*根据输入开辟相应的块号空间,并且按照题目要求初始化已占用块号*/ void Initvalue(){int i,j;printf("请输入被分成主存块的总字节数和位数:");scanf("%d",&n);scanf("%d",&m);table=(int **)malloc(sizeof(int)*n);//使用指针动态建立一个位视图的数组for(i=0;i<n;i++){table[i]=(int *)malloc(sizeof(int)*m);}kuai=(int *)malloc(sizeof(int)*(m*n));for(i=0;i<n;i++){for(j=0;j<m;j++){table[i][j]=0;}}table[0][0]=1,table[0][1]=1,table[0][4]=1,table[0][5]=1,table[0][6]=1;table[1][1]=1,table[1][3]=1,table[1][5]=1,table[3][0]=1,table[3][7]=1;//按照题目要求把第0 1 4 5 6 9 11 13 24 31块置为占用}/*将空闲块号保存在kuai[]数组中,并记录数组中元素个数*/void kongxiankuai(){int i,j,sum=0;k=0;for(i=0;i<n;i++){for(j=0;j<m;j++){if(table[i][j]==0){kuai[k]=i*8+j;k++; //记录空闲块数}}}}/* 打印空闲块号*/void printkongxiankuaishu(){int i;printf("当前空闲的块数:\n");for(i=0;i<k;i++){printf("%d ",kuai[i]);}printf("\n");}void caozuo()//作业所需的块数{int need;int i,j,g=0;printf("请输入进程的所需块数");scanf("%d",&need);if(need>(64-k)){printf("内存不足。

\n");goto begin1;}while(need!=0){for(i=0;i<n;i++){for(j=0;j<m;j++){if(table[i][j]==0&&need!=0)//作业分配存储{table[i][j]=1;kuaihao[v][g]=i*8+j; //保存作业块号g++;need=need-1;}}}}changdu[v]=g;v++;begin1: kongxiankuai();}void yebiao()//打印页表{int i,j;printf("打印页表\n");for(j=0;j<v;j++){printf("页号块号\n");for(i=0;i<changdu[j];i++){printf("%d %d\n",i,kuaihao[j][i]);}}}void weishitu()//打印位示图{int i,j;printf("打印位示图\n");printf(" ");for(i=0;i<n;i++){printf("%3d",i);}printf("\n");for(i=0;i<n;i++){printf("%3d",i);for(j=0;j<m;j++){printf("%3d",table[i][j]);}printf("\n");}}void guihuan() //按照需要释放内存{int i,q,p,j; //p表示数组长度printf("请输入归还的进程号:");scanf("%d",&p);for(q=0;q<changdu[p-1];q++){i=kuaihao[p][q]/8;j=kuaihao[p][q]%8;table[i][j]=0;//找到对应得位置,然后置为0;}kongxiankuai();}void menu()//显示操作列表{printf("存储器管理:\n");printf("1.初始化\n");printf("2.打印位视图\n");printf("3.打印页表\n");printf("4.进程操作\n");printf("5.归还\n");printf("6.打印空闲块号\n");printf("7.退出\n");}void huawei()//根据输入执行相应操作{begin:menu();//输出菜单列表int q;scanf("%d",&q);switch(q){case 1:Initvalue();goto begin;break;case 2:weishitu();goto begin;break;case 3:yebiao();goto begin;break;case 4:caozuo();goto begin;break;case 5:guihuan();goto begin;break;case 6:printkongxiankuaishu();goto begin;break;case 7:exit(0);}}五、运行结果。

相关文档
最新文档