南邮操作系统实验代码
- 格式:doc
- 大小:96.50 KB
- 文档页数:19
南邮操作系统实验三实验报告( 2014/ 2015 学年第一学期)课程名称操作系统教程实验名称页面调度算法的模拟实现实验时间2014 年12 月 3 日指导单位计算机软件学院指导教师徐鹤学生姓名楚灵翔班级学号B12040731 学院(系) 计算机学院专业软件工程实验报告实验名称页面调度算法的模拟实现指导教师徐鹤实验类型上机实验学时 2 实验时间2014.12.3一、实验目的和要求1、模拟实现页面调度算法中的FIFO、LRU和OPT算法2、进程的页面请求序列,即一系列页面号(页面号用整数表示,用空格作为分隔符),用来模拟待换入的页面;3、输出要求:显示缺页的总次数和缺页中断率二、实验环境(实验设备)VMware Workstation,Ubuntu三、实验过程描述#define n 12#define m 3int page[n]; //保存需要访问的页面int i,j,q,mem[m]={0},List[m][n],sum;char flag,f[n];void Init();void FIFO();void LRU();void main(){cout<<"*********************实验***********************"<<endl;< bdsfid="127" p=""></endl;<> cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;< bdsfid="129" p=""></endl;<>cout<<" ┃页面调度算法的模拟实现┃"<<endl;< bdsfid="131" p=""></endl;<>cout<<" ┠───────────────────────┨"<<endl;< bdsfid="133" p=""></endl;<>cout<<" ┃先进先出算法FIFO ┃"<<endl;< bdsfid="135" p=""></endl;<>cout<<" ┃最近追少使用算法LRU ┃"<<endl;< bdsfid="137" p=""></endl;<>cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;< bdsfid="139" p=""></endl;<>cout<<" 请输入页面访问序列:\n"<<" ";for(i=0;i<n;i++)< bdsfid="142" p=""></n;i++)<>cin>>page[i];cout<<endl;< bdsfid="145" p=""></endl;<>FIFO();Init();LRU();}void Init() //初始化函数{sum=0; //初始化计算缺页次数的变量for(int i=0;i<m;i++)< bdsfid="153" p=""></m;i++)<>mem[i]=0;for(i=0;i<m;i++)< bdsfid="156" p=""></m;i++)<>for(j=0;j<n;j++)< bdsfid="158" p=""></n;j++)<>List[i][j]=0;}void FIFO(){for(i=0;i<="">{q=0;while((page[i]!=mem[q])&&(q!=m))q++;if(q==m)flag='*'; //缺页,则置标志flag为'*' elseflag=' ';if(flag=='*'){for(j=m-1;j>0;j--) //淘汰最先调入的页面调入当前访问的mem[j]=mem[j-1];mem[0]=page[i];}for(j=0;j<m;j++)< bdsfid="178" p=""></m;j++)<>List[j][i]=mem[j];f[i]=flag;}cout<<" 0代表为空,*代表有缺页:\n";cout<<endl;< bdsfid="184" p=""></endl;<>cout<<"-----------FIFO算法结果------------"<<endl;< bdsfid="186" p=""></endl;<>for(i=0;i<m;i++)< bdsfid="188" p=""></m;i++)<>{for(j=0;j<n;j++)< bdsfid="191" p=""></n;j++)<>cout<<list[i][j]<<" ";<="" bdsfid="193" p=""></list[i][j]<<"> cout<<endl;}< bdsfid="195" p=""></endl;}<>for(i=0;i<n;i++)< bdsfid="197" p=""></n;i++)<>{if(f[i]=='*')sum++;cout<<f[i]<<" ";<="" bdsfid="202" p=""></f[i]<<">}cout<<"\n-----------------------------------"<<endl;<bdsfid="205" p=""></endl;<>cout<<"缺页次数是:"<<sum<<"缺页率是:"<<<endl;<="" bdsfid="207" p=""></sum<<"缺页率是:"<}void LRU(){for(i=0;i<="">{q=0;while((page[i]!=mem[q])&&(q!=m))q++;if(q==m)flag='*'; //缺页,则置标志flag为'*'elseflag=' ';for(j=q;j>0;j--)mem[j]=mem[j-1];mem[0]=page[i];for(j=0;j<m;j++)< bdsfid="225" p=""></m;j++)<>List[j][i]=mem[j];f[i]=flag;}cout<<endl;< bdsfid="229" p=""></endl;<>cout<<"------------LRU算法结果------------"<<endl;< bdsfid="231" p=""></endl;<>for(i=0;i<m;i++)< bdsfid="233" p=""></m;i++)<>{for(j=0;j<n;j++)< bdsfid="236" p=""></n;j++)<>cout<<list[i][j]<<" ";<="" bdsfid="238" p=""></list[i][j]<<"> cout<<endl;< bdsfid="240" p=""></endl;<>}for(i=0;i<n;i++)< bdsfid="243" p=""></n;i++)<>{if(f[i]=='*')sum++;cout<<f[i]<<" ";}<="" bdsfid="248" p=""></f[i]<<">cout<<endl;< bdsfid="250" p=""></endl;<>cout<<"-----------------------------------"<<endl;<bdsfid="252" p=""></endl;<>cout<<"缺页次数是:"<<sum<<"缺页率是:"<<<=""></sum<<"缺页率是:"<实验结果:四、实验小结(包括问题和解决方法、心得体会、意见与建议等)通过本次实验,我对于页面调度算法有了更加深刻的认识。
南邮Java实验报告1-综合图形界面程序设计英文回答:Firstly, I would like to express my sincere gratitudeto my instructor for providing me with the opportunity to work on this Java programming project, which focuses on the design of a comprehensive graphical user interface (GUI). Throughout this project, I have gained valuable experiencein developing a user-friendly and visually appealing application that meets the specified requirements.To begin with, I started by gathering the necessary requirements and understanding the problem statement. Ithen proceeded to design the GUI layout and create the corresponding Java classes and methods. I utilized various Java Swing components, such as buttons, text fields, labels, and panels, to construct a user-friendly interface. Additionally, I implemented event handling mechanisms to respond to user interactions and perform appropriateactions.During the development process, I encountered several challenges. One of the challenges was ensuring that the GUI was responsive and user-friendly. I addressed this by carefully designing the layout and implementing efficient event handling mechanisms. Another challenge was handling complex user interactions and data validation. I overcame this by using appropriate data structures and algorithms to validate user input and perform the required operations.To further enhance the user experience, I incorporated custom graphics and animations. I created custom icons and images to enhance the visual appeal of the application. I also implemented animations to provide visual feedback to users. By incorporating these elements, I aimed to create an engaging and immersive experience for the users.In addition to the technical aspects of the project, I also focused on adhering to coding conventions and best practices. I used proper naming conventions, indentation, and commenting throughout my code. This ensured the codewas readable, maintainable, and extensible.Overall, working on this Java GUI programming project has been a rewarding experience. I have learned a great deal about GUI design, event handling, and the implementation of custom graphics and animations. I am confident that the knowledge and skills I have acquired through this project will be invaluable in my future endeavors as a software developer.中文回答:首先,我谨向我的导师在这次Java编程项目中提供给我的机会表示由衷的感谢。
2012 /2013 学年第二学期软件设计实验报告模块名称数据库软件设计专业学生班级学生学号学生姓名指导教师报告内容(正文为宋体小四)实验一:内容:了解SQLserver和MySql的安装及使用;学会对企业管理器、查询分析器的使用;建立一个学生表、课程表及学生选课关联表,并用SQL语句进行相关插入、查询、删除等操作;步骤:1、打开企业管理器,建立一个名为10002434的数据库。
2.建立基本表:学生、课程和选课,写出DDL语句。
学生表:INSERT INTO Student V ALUES('10001','李勇','男','20','CS');INSERT INTO Student V ALUES('10002','刘晨','女','19','IS');INSERT INTO Student V ALUES('10003','王敏','女','18','MA');INSERT INTO Student V ALUES('10004','张立','男','18','IS');INSERT INTO Student V ALUES('10005','丁雨','女','19','MA');课程表INSERT INTO Course VALUES('1','数据库','5','4');INSERT INTO Course VALUES('2','数学','NULL','2');INSERT INTO Course VALUES('3','信息系统','1','4');INSERT INTO Course VALUES('4','操作系统','6','3');INSERT INTO Course VALUES('5','数据结构','7','4');INSERT INTO Course VALUES('6','数据处理','NULL','2');INSERT INTO Course VALUES('7','PASCAL语言','6','4');选课:INSERT INTO SC VALUES('10001','1','92'); INSERT INTO SC VALUES('10001','2','85'); INSERT INTO SC VALUES('10002','3','88'); INSERT INTO SC VALUES('10003','2','90');INSERT INTO SC VALUES('10003','5','75');(3)写出向数据库中插入和修改数据的DML语句delete from sc where sno='10001'insert into sc values('10005','4',79)实验二:内容:通过odbc 桥访问数据库。
课内实验报告课程名:操作系统任课教师:沈超专业:信息管理与信息系统学号:姓名:二○一六至二○一七年度第一学期南京邮电大学经济与管理学院Process[numberschedul].order=tempcounter;}程序结果截图:二、银行家算法(网上借鉴)银行家算法,当进程提出资源申请时,系统首先检查该进程对资源的申请量是否超过其最大需求量及系统现有的资源能否满足进程需要。
若超过,则报错,若不能满足,则让该进程等待;否则进一步检查把资源分给该进程后系统能否出于安全状态,若安全,则分配,否则置该进程为等待资源状态。
算法实现过程:设进程i 提出请求REQUEST [j] ,则银行家算法按如下规则进行判断。
(1) 如果REQUEST [i] [j]<= NEED[i][j] ,则转(2) ;否则,出错。
(2) 如果REQUEST [i] [j]<= A V AILABLE[i][j] ,则转(3) ;否则,出错。
(3) 系统试探分配资源,修改相关数据:A V AILABLE[j]-=REQUEST[i][j];ALLOCATION[i][j]+=REQUEST[i][j];NEED[i][j]-=REQUEST[i][j];(4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
Check()关键代码:{int k, f, no=0;int work[M],a[M];char finish[M];anquan=1;for(i=0;i<n; i++) finish[i]='F';for(j=0;j<m; j++) work[j]=available[j]; k=n;do{ for (i=0;i<n; i++){if (finish[i]=='F'){ f=1;for (j=0;j<m; j++)if (need[i][j]>work[j]) printf("处于安全状态.");printf("安全序列号:");for (i=0;i<n;i++) printf ("%d ",a[i]); printf("\n");printf("进程");printf(" ");printf(" Max ");rintf(" ");rintf("allocation");printf(" ");printf("need");printf(" ");f=0;if (f==1)//找到还没完成的且需求数小于可提供进程继续运行的{ finish[i]='T';a[no++]=i;//记录安全序列号for (j=0;j<m; j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源available[j] =work[j];}}}k--; }while(k>0);f=1;for (i=0;i<n; i++)//判断有没有进程没完成{ if (finish[i]=='F'){f=0;break; }} if (f==0) {printf("不安全状态!\n");anquan=0;} else {printf("available");printf("\n");for (i=0;i<n; i++){ printf("%2d",i);printf(" ");for(j=0;j<m; j++)printf("%2d",max[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",allocation[i][j]);printf(" ");for(j=0;j<m; j++)printf("%2d",need[i][j]);printf(" ");for(j=0;j<m; j++){if(i>0)break;printf("%2d",available[j]);}printf("\n");}}}程序结果截图:三、实验总结:这次上机模拟了进程调度过程和解决了死锁问题,让我对短作业优先调度算法和银行家算法有了比在课堂上更深刻的认识。
通信与信息工程学院2015 / 2016学年第二学期实验报告课程名称:操作系统实验名称:1、LINUX及其使用环境2、进程管理3、进程间通信4、文件的操作和使用班级学号专业电子信息工程学生姓名指导教师赵建立实验名称试验一 LINUX及其使用环境实验类型验证实验学时1实验时间2016.6.2一、实验目的和要求1、了解UNIX的命令及使用格式。
2、熟悉UNIX/LINUX的常用基本命令。
3、练习并掌握UNIX提供的vi编辑器来编译C程序。
4、学会利用gcc、gdb编译、调试C程序。
二、实验环境Windows XP + VMWare + RedHat Enterprise Linux(RHEL) 4三、实验原理及内容1、熟悉LINUX的常用基本命令。
如ls、mkdir、grep等,学会使用man、help等其它命令,掌握vi编辑器的使用。
(1)显示目录文件 ls例:ls -al 显示当前目录下的所有文件(2)建新目录 mkdir例:mkdir test 新建一个test目录(3)删除目录rmdir(4)改变工作目录位置 cd例:cd test 更改工作目录至test目录下(5)显示当前所在目录pwd(6)查看目录大小du(7)文件属性的设置 chmod(8)命令在线帮助 man2、设计一个实现文件拷贝功能的shell程序。
(1)在文本编辑器里输入shell程序:#!/bin/shecho “please enter source file:”read soucecho please enter destination file:”read destcp $souc $destls $dest将程序保存在主目录下,命名为shell.(2)打开终端,输入ls -l,显示目录下所有文件的许可权、拥有者、文件大小、修改时间及名称。
输入 ./shell,运行shell程序。
输入源文件hello.c,目标文件B13011206.c。
操作系统课程实验报告实验题目:Linux进程信号通信、进程消息通信专业软件工程学生姓名班级学号教师陈兴国指导单位计算机学院日期 2016-9-30一、实验目的1.了解Linux的信号,熟悉Linux系统中进程之间软中断通信的基本原理2.学习如何利用消息缓冲队列进行进程间的通信,并加深对消息通信机制的理解。
二、实验指导1.kill(),signal(),lockf()系统调用kill()系统调用系统调用格式:int kill(pid,sig)参数定义: int pid,sid;pid是一个或一组进程的标识符,sig是要发送的软中断信号。
pid>0时,核心将信号发送给进程pid;pid=0时,核心将信号发送给与发送进程同组的所有进程;pid<0时,核心将信号发送给搜有用户标识符真正等于发送进程的有效用户标识号的进程。
signal()系统调用预置对信号的处理方式,允许调用进程控制软中断信号。
系统调用格式:signal (sig,function)参数定义:Signal (sig,function)int sig;void (*func)();sig用于指定信号的类型,sig为0则没有收到任何信号。
function:在该进程中的一个函数地址,在核心态返回用户态时,它以软中断信号的序号作为参数调用该函数,对除了信号SIGNAL,SIGTRAP和SIGPWR以外的信号,核心自动地重新设置软中断信号处理程序的值为SIG_DFL,一个进程不能捕获SIGKILL信号。
lockf()系统调用用作锁定文件的某些段或者整个文件。
系统调用格式:lockf(files,function,size)参数定义:int lockf(files,function,size)int files,function;long size;2.消息的创建,发送和接收使用系统调用msgget(),msgsnd,msgrec,及msgctl()函数编写消息的发送和接收程序三、实验过程描述与结果分析1.Linux进程信号通信#include <stdio.h>#include <signal.h>#include<unistd.h>#include <stdlib.h>void waiting(),stop();int wait_mark;/*用来避免锁的竞争,保证p1,p2无法在同一时刻获得文件的锁,即lockf(stdout,1,0)*/main(){int p1,p2,stdout;signal(SIGINT,stop);/*if press the ^c or ^break ,jump to stop function*/ while((p1=fork())==-1) ;/* create child process p1*/if(p1>0){while( ( p2=fork() ) ==-1);/* create child process p2*/if(p2>0){wait_mark=1;sleep(5);/* 接收到^c信号,转stop函数*/waiting();kill(p1,16); /*向子进程p1发送软中断信号16*/kill(p2,17);/*向子进程p2发送软中断信号17*/wait(0);/*wait()系统方法,父进程会一直等待,直到子进程因暂停或者终止发来软中断信号为止*/wait(0);printf("Parent process is killed!\n");exit(0);}else{//p2被杀死的逻辑,响应kill(p1,17);wait_mark=1;signal(17,stop);/*接收到父进程发来的软中断信号,然后执行stop函数*、*/waiting();lockf(stdout,1,0);/*锁定输出,使得下面的语句可以正常输出打印*/printf("Child process 2 is killed by parent!\n");lockf(stdout,0,0);/*解锁输出*/exit(0);/*正常终止子进程p2,使得父进程跳出wait(0),得以继续执行*/ }}else{//p1被杀死的逻辑,响应kill(p2,16);wait_mark=1;signal(16,stop);waiting();lockf(stdout,1,0);printf("Child process 1 is killed by parent!\n");lockf(stdout,0,0);exit(0);}}void waiting(){while(wait_mark!=0);}void stop(){wait_mark=0;}按住Ctrl+c,可见执行结果2.Linux进程消息通信1.server.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#define MSGKEY 75struct msgform{long mtype;char mtext[256];};int main(int argc, char const *argv[]) {struct msgform msg;int msgqid;int j,pid,*pint;msgqid=msgget(MSGKEY,0777|IPC_CREAT);for(;;){msgrcv(msgqid,&msg,256,1,0);pint=(int*)msg.mtext;pid=*pint;printf("server:receive from pid %d\n",pid);msg.mtype=pid;*pint=getpid();msgsnd(msgqid,&msg,sizeof(int),0);}return 0;}2.client.c#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <stdio.h>#define MSGKEY 75struct msgform{long mtype;char mtext[256];};int main(int argc, char const *argv[]){struct msgform msg;int msgqid,pid,*pint;msgqid=msgget(MSGKEY,0777);pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;msgsnd(msgqid,&msg,sizeof(int),0);msgrcv(msgqid,&msg,256,pid,0);printf("client:receive from pid%d\n",*pint);return 0;}运行结果:四、自我评析与总结1.你认为你完成的实验那些地方做得比较好或比较出色做的相对比较快,一些命令比较熟悉一点2.差距与局限,什么地方做得不太好,或什么地方可以做得更好程序的编写,C语言遗忘的很严重,还是得常用3.从本实验得到的收获。
汇编南邮实验报告一、实验目的了解汇编语言的基本概念和基本语法,学会使用汇编指令编写简单的汇编程序。
二、实验内容1. 学习汇编语言的基本概念和基本语法;2. 编写一个简单的汇编程序。
三、实验原理汇编语言是计算机中最底层的一种语言,它直接操作计算机的硬件资源。
汇编语言使用面向机器的指令,利用指令的组合和操作数的变化实现各种功能。
在编写汇编程序时,需要注意寄存器的使用、内存的操作以及指令执行流程的控制。
四、实验步骤1. 学习汇编语言的基本概念和基本语法,了解常用的寄存器、指令和标志位等;2. 编写一个简单的汇编程序,要求实现将一个字节的数据存入内存中,并读取出来进行显示的功能。
五、实验代码assemblySECTION .textGLOBAL _start_start:mov al, 65 ; 将字节数据65存入al寄存器mov byte [data], al ; 将al寄存器中的值存入内存中的data变量mov dl, [data] ; 从内存中读取data变量的值到dl寄存器add dl, 30h ; 将dl寄存器的值加上30h,将结果存回dl寄存器add dl, 0 ; 非必要指令,用于演示指令执行流程的控制add dl, 0 ; 非必要指令,用于演示指令执行流程的控制add dl, 0 ; 非必要指令,用于演示指令执行流程的控制mov ah, 0eh ; 设置显示模式int 10h ; 控制显示mov al, 0 ; 程序退出mov ah, 0x4cint 0x21SECTION .datadata db 0 ; 定义一个字节的变量data六、实验结果运行该汇编程序后,屏幕上显示出字符"A"。
七、实验总结通过此次实验,我了解了汇编语言的基本概念和基本语法,学会了使用汇编指令编写简单的汇编程序。
汇编语言是一种底层的语言,能够直接操作计算机的硬件资源,具有高效性和灵活性。
在编写汇编程序时,需要注意寄存器的使用、内存的操作以及指令执行流程的控制。
《计算机操作系统》实验指导苏州科技学院电子与信息工程系软件教研室二OO二年九月示例代码第一部分LINUX操作系统平台实验一命令解释程序示例程序minishell.c//文件名minishell.cpp//功能小型SHELL命令解释程序//开发环境#define true 1#define flase 0#include <stdio.h>#include <string.h>#include <stdlib.h>void main(){char cmdl[80];char *scwt[]={"exit","dir","time"};static int cmdnum=3; //可用的命令数char cmd[80];int j,n;while(true){printf("Please input command: ");gets(cmdl); //取命令行输入n=strcspn(cmdl," "); //取命令命令部分if (n>0||strlen(cmdl)>0){ strncpy(cmd,cmdl,n);cmd[n]='\0';for(j=0;j<cmdnum;j++)if (strcmp(cmd,scwt[j])==0)break;if (j==0) //是exit命令?exit(0);if (j<cmdnum) //其他合法命令{system(cmdl);continue;}printf("Bad command!\n"); //命令错}}}实验二进程管理fork()调用示例#include <stdio.h>main(){int p1,p2;while ((p1=fork())==-1);if (p1==0) //是子进程?putchar('b');else //父进程{putchar('a');}}实验三进程间通信1)pipe()调用示例#include<stdio.h>main(){int id,fd[2];char buf[50],s[50];pipe(fd);while ((id=fork())==-1);if (id==0){sprintf(buf,"Child is sending message!");write(fd[1],buf,50);exit(0);}else{wait(0);read(fd[0],s,50);printf("%s\n",s);exit(0);}}2)共享存储器示例shm_sample.c#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#define SEGSIZE 100main(int argc, char *argv[]){ key_t key;int shmid, cntr;char *segptr;if(argc == 1)usage(); /* Create unique key via call to ftok() */key = ftok(".", 'S');/* Open the shared memory segment - create if necessary */if((shmid = shmget(key, SEGSIZE, IPC_CREAT|IPC_EXCL|0666)) == -1){printf("Shared memory segment exists - opening as client\n");/* Segment probably already exists - try as a client */if((shmid = shmget(key, SEGSIZE, 0)) == -1){perror("shmget");exit(1);}}else{printf("Creating new shared memory segment\n");}/* Attach (map) the shared memory segment into the current process */if((segptr = shmat(shmid, 0, 0)) == -1){perror("shmat");exit(1);}switch(tolower(argv[1][0])){case 'w': writeshm(shmid, segptr, argv[2]);break;case 'r': readshm(shmid, segptr);break;case 'd': removeshm(shmid);break;case 'm': changemode(shmid, argv[2]);break;default: usage();}}writeshm(int shmid, char *segptr, char *text){strcpy(segptr, text);printf("Done...\n");}readshm(int shmid, char *segptr){printf("segptr: %s\n", segptr);}removeshm(int shmid){shmctl(shmid, IPC_RMID, 0);printf("Shared memory segment marked for deletion\n");}changemode(int shmid, char *mode){struct shmid_ds myshmds;/* Get current values for internal data structure */shmctl(shmid, IPC_STA T, &myshmds); /* Display old permissions */printf("Old permissions were: %o\n", myshmds.shm_perm.mode);/* Convert and load the mode */sscanf(mode, "%o", &myshmds.shm_perm.mode); /* Update the mode */ shmctl(shmid, IPC_SET, &myshmds);printf("New permissions are : %o\n", myshmds.shm_perm.mode);}usage(){fprintf(stderr, "shm_sample - A utility for tinkering with shared memory\n");fprintf(stderr, "\nUSAGE: shmtool (w)rite <text>\n");fprintf(stderr, " (r)ead\n");fprintf(stderr, " (d)elete\n");fprintf(stderr, " (m)ode change <octal mode>\n");exit(1);}3)消息队列使用示例(1) message.h/* message.h*/#ifndef MESSAGE_H#define MESSAGE_Hstruct mymsgbuf{long mtype;char mtext[256];};#endif(2) msg_server.c/*msg_server.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/msg.h>#include <sys/ipc.h>#include "message.h"int msqid=-1;void sig_handle(int signo){/*软中断*/if (msqid!=-1)msgctl(msqid,IPC_RMID,NULL);printf("server quit...\n");exit(0);}int main(){struct mymsgbuf msgbuf;int left,right;char c;int length;if ((msqid=msgget(999,0666))!=-1){msgctl(msqid,IPC_RMID,NULL);}if ((msqid=msgget(999,IPC_CREAT|0666))==-1){printf("error:getmsg\n");exit(1);}signal(SIGINT,sig_handle); /*LINUX置软中断—CTRL-D*/for (;;){if (msgrcv(msqid,&msgbuf,256,1L,0)==-1){printf("error:msgrcv\n");exit(1);}length=strlen(msgbuf.mtext);left=0;right=length-1;while(left<right){c=msgbuf.mtext[left];msgbuf.mtext[left]=msgbuf.mtext[right];msgbuf.mtext[right]=c;left++;right--;}msgbuf.mtext[length]='\0';msgbuf.mtype=2;if (msgsnd(msqid,&msgbuf,256,0)==-1){printf("error:msgsnd");exit(1);}}msgctl(msqid,IPC_RMID,NULL);exit(0);}(3) msg_client.c/*msg_client.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/msg.h>#include <sys/ipc.h>#include "message.h"int main(){struct mymsgbuf msgbuf;int msqid;if ((msqid=msgget(999,0666))==-1){printf("Server is not running\n");exit(1);}printf("Input a line:");scanf("%s",msgbuf.mtext);msgbuf.mtype=1;if (msgsnd(msqid,&msgbuf,256,0)==-1){printf("error:msgsnd\n");exit(1);}if (msgrcv(msqid,&msgbuf,256,2L,0)==-1){printf("error:msgrcv\n");exit(1);}printf("The reversed line is:%s\n",msgbuf.mtext);exit(0);}实验四存储管理示例程序(注意阅读并分析可能存在的问题)#define TRUE 1#define FALSE 0#define INV ALID -1#define null 0#define total_instruction 320 /*指令流长*/#define total_vp 32 /*虚页长*/#define clear_period 50 /*清零周期*/typedef struct{ /*页面结构*/ int pn,pfn,counter,time;}pl_type;pl_type pl[total_vp]; /*页面数组*/struct pfc_struct{ /*页面控制结构*/ int pn,pfn;struct pfc_struct *next;};typedef struct pfc_struct pfc_type;pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;int diseffect,a[total_instruction];int page[total_instruction], offset[total_instruction];void initialize(int total_pf);void FIFO(int total_pf);void LRU(int total_pf);void OPT(int total_pf);void LFU(int total_pf);void NUR(int total_pf);#include <stdlib.h>#include <stdio.h>#include <time.h>main(){int S,i;srand( (unsigned)time( NULL ) );/* srand(getpid()*10);*//*由于每次运行时进程号不同,故可用来作为初始化随机数的"种子"*/S=(float)319*rand()/32767+1;for(i=0;i<total_instruction;i+=4) /*产生指令队列*/{a[i]=S; /*任选一指令访问点*/a[i+1]=a[i]+1; /*顺序执行一条指令*/a[i+2]=(float)a[i]*rand()/32767; /*执行前地址指令m'*/a[i+3]=a[i+2]+1; /*执行后地址指令*/S=(float)rand()*(318-a[i+2])/32767+a[i+2]+2;}for(i=0;i<total_instruction;i++) /*将指令序列变换成页地址流*/{page[i]=a[i]/10;offset[i]=a[i]%10;}for(i=4;i<=32;i++) /*用户内存工作区从4个页面到32个页面*/ {printf("%2d page frames",i);FIFO(i);LRU(i);OPT(i);LFU(i);NUR(i);printf("\n");}return(0);}//void FIFO(total_pf) /*FIFO(First In First Out) ALOGRITHM*/ //int total_pf; /*用户进程的内存页面数*/void FIFO(int total_pf)//int total_pf;{int i;pfc_type *p;initialize(total_pf);busypf_head=busypf_tail=NULL;for (i=0;i<total_instruction;i++){if (pl[page[i]].pfn==INV ALID){diseffect+=1;if (freepf_head==NULL){p=busypf_head->next;pl[busypf_head->pn].pfn=INV ALID;freepf_head=busypf_head;freepf_head->next=NULL;busypf_head=p;}p=freepf_head->next;freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if (busypf_tail==NULL)busypf_head=busypf_tail=freepf_head;else{busypf_tail->next=freepf_head;busypf_tail=freepf_head;}freepf_head=p;}}printf(" FIFO:%6.4f",1-(float)diseffect/320);}void LRU(int total_pf)//int total_pf;{int min,minj,i,j,present_time;initialize(total_pf);present_time=0;for(i=0;i<total_instruction;i++){if (pl[page[i]].pfn=INV ALID){diseffect++;if (freepf_head==NULL){min=32767;for(j=0;j<total_vp;j++)if (min>pl[j].time && pl[j].pfn!=INV ALID){min=pl[j].time;minj=j;}freepf_head=&pfc[pl[minj].pfn];pl[min].pfn=INV ALID;pl[min].time=-1;freepf_head->next=NULL;}pl[page[i]].pfn=freepf_head->pfn;pl[page[i]].time=present_time;freepf_head=freepf_head->next;}elsepl[page[i]].time=present_time;present_time++;}printf(" LRU:%6.4f",1-(float)diseffect/320);}void NUR(int total_pf)//int total_pf;{int i,j,dp,cont_flag,old_dp;// pfc_type *t;initialize(total_pf);dp=0;for(i=0;i<total_instruction;i++){if (pl[page[i]].pfn==INV ALID) /*页面失效*/{diseffect++;if (freepf_head==NULL) /*无空闲页面*/{cont_flag=TRUE;old_dp=dp;while(cont_flag)if (pl[dp].counter==0&&pl[dp].pfn!=INV ALID)cont_flag=FALSE;else{dp++;if (dp==total_vp)dp=0;if (dp==old_dp)for (j=0;j<total_vp;j++)pl[j].counter=0;}freepf_head=&pfc[pl[dp].pfn];pl[dp].pfn=INV ALID;freepf_head->next=NULL;}pl[page[i]].pfn=freepf_head->pfn;freepf_head=freepf_head->next;}elsepl[page[i]].counter=1;if (i%clear_period==0)for(j=0;j<total_vp;j++)pl[j].counter=0;}printf(" NUR:%6.4f",1-(float)diseffect/320);}void OPT(int total_pf) /*OPT(Optional Replacement) ALOGRITHM*/ //int total_pf;{int i,j,max,maxpage,d,dist[total_vp];pfc_type *t;initialize(total_pf);for(i=0;i<total_instruction;i++){if (pl[page[i]].pfn==INV ALID){diseffect++;if (freepf_head==NULL){for(j=0;j<total_vp;j++)if (pl[j].pfn!=INV ALID)dist[j]=32767;elsedist[j]=0;d=1;for(j=i+1;j<total_instruction;j++){if (pl[page[j]].pfn!=INV ALID)dist[page[j]]=d;d++;}max=-1;for(j=0;j<total_vp;j++)if (max<dist[j]){max=dist[j];maxpage=j;}freepf_head=&pfc[pl[maxpage].pfn];freepf_head->next=NULL;pl[maxpage].pfn=INV ALID;}pl[page[i]].pfn=freepf_head->pfn;freepf_head=freepf_head->next;}}printf(" OPT:%6.4f",1-(float)diseffect/320);}void LFU(int total_pf) /*LFU(leat Frequently Used) ALOGRITHM*/ //int total_pf;{int i,j,min,minpage;pfc_type *t;initialize(total_pf);for(i=0;i<total_instruction;i++){if (pl[page[i]].pfn==INV ALID){diseffect++;if (freepf_head==NULL){min=32767;for(j=0;j<total_vp;j++){if (min>pl[j].counter&&pl[j].pfn!=INV ALID){min=pl[j].counter;minpage=j;}pl[j].counter=0;}freepf_head=&pfc[pl[minpage].pfn];pl[minpage].pfn=INV ALID;freepf_head=freepf_head->next;}elsepl[page[i]].counter++;}}printf(" LFU:%6.4f",1-(float)diseffect/320);}void initialize(int total_pf) /*初始化相关数据结构*///int total_pf; /*用户进程的内存页面数*/{int i;diseffect=0;for(i=0;i<total_vp;i++){pl[i].pn=i;pl[i].pfn=INV ALID; /*置页面控制结构中的页号,页面为空*/pl[i].counter=0; /*页面控制结构中的访问次数为0,时间为-1*/pl[i].time=-1;}for(i=1;i<total_pf;i++){pfc[i-1].next=&pfc[i];pfc[i-1].pfn=i-1;} /*建立pfc[i-1] 和pfc[i]之间的链接*/pfc[total_pf-1].next=NULL;pfc[total_pf-1].pfn=total_pf-1;freepf_head=&pfc[0]; /*空页面队列的头指针为pfc[0]*/}实验五设备管理一、实验步骤:LINUX中,模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在),为此需要在gcc命令行里加上-c的参数。
目录实验一WINDOWS进程初识 (2)实验二进程管理 (6)实验三进程同步的经典算法 (10)实验四存储管理 (14)试验五文件系统试验 (18)实验有关(参考)代码实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、程序清单清单1-1 一个简单的Windows控制台应用程序// hello项目# include <iostream>void main(){std::cout << “Hello, Win32 Consol Application” << std :: endl ;}清单1-2 核心态运行和用户态运行时间比计算// proclist项目# include <windows.h># include <tlhelp32.h># include <iostream.h>// 当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法DWORD GetKernelModePercentage(const FILETIME& ftKernel,const FILETIME& ftUser){// 将FILETIME结构转化为64位整数ULONGLONG qwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)<<32)+ftKernel.dwLowDateTime;ULONGLONG qwUser=(((ULONGLONG)ftUser.dwHighDateTime)<<32)+ftUser.dwLowDateTime;// 将消耗时间相加,然后计算消耗在内核模式下的时间百分比ULONGLONG qwTotal=qwKernel+qwUser;DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);return(dwPct);}// 以下是将当前运行过程名和消耗在内核模式下的时间百分数都显示出来的应用程序void main(int argc,char *argv[]){if(argc<2){cout<<"请给出你要查询的程序名"<<endl;exit(0);}// 对当前系统中运行的过程拍取“快照”HANDLE hSnapshot=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,// 提取当前过程0);// 如果是当前过程,就将其忽略// 初始化过程入口PROCESSENTRY32 pe;::ZeroMemory(&pe,sizeof(pe));pe.dwSize=sizeof(pe);BOOL bMore=::Process32First(hSnapshot,&pe);BOOL found = FALSE;while(bMore){// 打开用于读取的过程if(!strcmp(pe.szExeFile,argv[1])){found = TRUE;HANDLE hProcess=::OpenProcess(PROCESS_QUERY_INFORMA TION,// 指明要得到信息FALSE,// 不必继承这一句柄pe.th32ProcessID);// 要打开的进程if (hProcess!=NULL){// 找出进程的时间FILETIME ftCreation,ftKernelMode,ftUserMode,ftExit;::GetProcessTimes(hProcess,// 所感兴趣的进程&ftCreation,// 进程的启动时间&ftExit,// 结束时间(如果有的话)&ftKernelMode,// 在内核模式下消耗的时间&ftUserMode);// 在用户模式下消耗的时间// 计算内核模式消耗的时间百分比DWORD dwPctKernel=::GetKernelModePercentage(ftKernelMode,// 在内核模式上消耗的时间ftUserMode);// 在用户模式下消耗的时间// 向用户显示进程的某些信息cout<< "process ID: " << pe.th32ProcessID<< ",EXE file:" << pe.szExeFile<< ",%d in Kernel mode: " << dwPctKernel << endl;// 消除句柄::CloseHandle(hProcess);}}// 转向下一个进程bMore=::Process32Next(hSnapshot,&pe);}if(found==FALSE){cout<<"当前系统没有这个可执行程序正在运行"<<endl;exit(0);}}清单1-3 核心态运行和用户态运行时间测试程序#include <stdio.h>main(){int i,j;while(1){for(i=0;i<1000;i++);for(j=1;j<1000;j++) printf(“enter kernel mode running.”);}}实验二进程管理1、实验目的1) 通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。
操作系统上机实验代码修改后的md命令程序:int MdComd(int k) //md命令处理函数{// 命令形式:md <目录名>// 功能:在指定路径下创建指定目录,若没有指定路径,则在当前目录下创建指定目录。
// 对于重名目录给出错误信息。
目录与文件也不能重名。
// 学生可以考虑命令中加“属性”参数,用于创建指定属性的子目录。
命令形式如下:// md <目录名>[ <属性>]// 属性包括R、H、S以及它们的组合(不区分大小写,顺序也不限)。
例如:// md user rh// 其功能是在当前目录中创建具有“只读”和“隐藏”属性的子目录user。
short i,s,s0,kk;char attrib=(char)16,*DirName;FCB *p;char str[20]="|";kk=SIZE/sizeof(FCB);if (k<1){cout<<"\错误:命令中没有目录名。
\";return -1;}if (k>2){cout<<"\错误:命令参数太多。
\";return -1;}s=ProcessPath(comd[1],DirName,k,0,attrib);if (s<0)return s; //失败,返回if (!IsName(DirName)) //若名字不符合规则{cout<<"\命令中的新目录名错误。
\";return -1;}i=FindFCB(DirName,s,attrib,p);if (i>0){cout<<"\错误:目录重名!\";return -1;}if (k==2) //命令形式:md <目录名> <属性符>{i=GetAttrib(strcat(str,comd[2]),attrib);//由i=GetAttrib(comd[2],attrib);if (i<0)return i;}s0=FindBlankFCB(s,p);//找空白目录项if (s0<0) //磁盘满return s0;s0=M_NewDir(DirName,p,s,attrib); //在p所指位置创建一新子目录项if (s0<0) //创建失败{cout<<"\磁盘空间已满,创建目录失败。
实验一C51集成开发环境的练习一、实验内容在Keil C51开发环境下新建一个工程并创建一个文件,在文件中输入汇编程序,并进行编译生成HEX文件。
二、实验要求熟悉Keil C51集成开发环境的使用方法;掌握汇编语言的基本调试方法。
三、实验设备和仪器硬件:微机软件:Keil C51集成开发软件四.实验程序清单ORG 8000HLJMP MainORG 80F0HMain:MOV R7, #0Loop:MOV R6, #0DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R6, $DJNZ R7, LoopCPL P1.0 ; P 1 .0 取反CPL P1.1 ; P 1 .1 取反CPL P1.2 ; P 1 .2 取反CPL P1.3 ; P 1 .3 取反CPL P1.4 ; P 1 .4 取反CPL P1.5 ; P 1 .5 取反CPL P1.6 ; P 1 .6 取反CPL P1.7 ; P 1 .7 取反SJMP MainEND五.实验结果在本试验中,我学会了在Keil C51在开发环境下新建工程并创建文件,调试直到出现0 error和0 warning就运行成功了。
另外需要更改该软件中output的设置,使得运行成功之后能够生成HEX文件(存放在文件夹“实验程序及运行结果”里面了)。
六.问题讨论与实验心得在新建工程并创建文件之后,程序开始调试会出现warning 提示code space memory overlap的问题,后来发现是地址重叠导致了警告的产生,将source group组下面的starup.A51删去就执行就没有问题了。
通过本实验,我初步学习了Keil C51的入门使用,在调试程序出现问题时积极思考,查阅资料,从而解决了问题,避免了以后再犯类似的错误。
这次实验不仅让我掌握了Keil C51使用的知识,也锻炼了我自主学习的能力。
;从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII码在42H~45H之间的字符个;数,并将统计结果以二进制形式显示在屏幕。
;DATA SEGMENTBUF DB 255DB ?DB 255 DUP(?)crlf db 0dh,0ah,24h ;回车换行n db 0 ;统计的字符数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATABEG:MOV AX,DATAMOV DS,AXMOV AH,0AHMOV DX,OFFSET BUFINT 21Hmov ah,9mov dx,offset crlfint 21hMOV SI,OFFSET BUF INC SIMOV CL,[SI]MOV Ch,0inc siLAST1:mov al,[si]cmp al,42hjb no_1cmp al,45hja no_1inc nno_1:inc siloop LAST1mov al,nMOV CX,8d_next:roL aL,1push axmov ah,2jc disp_1mov dl,'0'jmp dispdisp_1:mov dl,'1'disp:int 21hpop axloop d_nextMOV AH,4CHINT 21HCODE ENDSEND BEG追问(⊙o⊙)…我的程序没救了?我想知道我的程序哪边有问题回答你的程序问题不少。
不好意思,暂无时间详细叙述!追问好吧、、、谢谢你了还有昨天你的程序我没运行出来。
回答我是用MASM5.0 编译的。
没问题。
通达学院课内实验报告课程名:系统分析与设计任课教师:刘影专业:信息管理与信息系统学号:____________姓名:______________二O—四至二O—五年度第二学期南京邮电大学管理学院《系统分析与设计》课程实验第二次实验报告“Use Case Diagram ”命令,创建新的用例图后,在浏览器的" Use Case View ”树形结构下多了一个名为“ NewDiagram”的图标,重命名为“借阅者用例图”。
双击“借阅者用例图” 图标,会出现用例图编辑工具和编辑区。
①绘制参与者:单击工具栏的参与者图标到右边的编辑区,修改名称为“借阅者”。
②绘制用例:单击工具栏中用例图标,在编辑区内要绘制的地方单击左键,会出现带有默认名的“ NewUseCase的新用例,双击该用例,弹出“Use Case Specification for NewUseCase对话框,用于属性的设置。
③绘制用例与参与者的关系:单击相应的图标,鼠标移动到“借阅者”上,这时按下鼠标左键不放,移动鼠标至用例上松开鼠标,注意线段箭头的方向为松开鼠标的方向,关联关系的箭头应有参与者指向用例,不可画反。
④绘制用例间的关系:单击相应图标,注意线段箭头的方向是松开鼠标左键时的方向,双击虚线段,在弹出的“ Depe ndency Specificatio n for Un title ”对话框,设置相应属性,“Stereotype ”下拉列表列出了用例间所有可用的关系,选择相应关系。
根据以上步骤,创建出的借阅者用例图如下:*圳!1百2.按照以上步骤,图书管理员用例图和系统管理员用例图如下:駅烯悴士-L^in^4Kbt>>険査用戶自畫性"沁血冲点11书曰I •片料口图书管理员用例图系统管理员用例图类图建模一一图书管理系统类图—.确定系统中的类对于“图书管理系统”来说,根据功能可以基本抽象出图书管理系统中的多个类:“ Borrower ”借阅者类,“ Librarian ”图书管理员类,“ Administrator ”系统管理员类, “Book”图书类,“Resever”预定类,“Loan”借阅类,“Title ”书目类。
《操作系统原理》实验指导书羊四清编写适用专业:计算机科学与技术网络工程湖南人文科技学院计算机科学技术系2008年8 月页脚内容1前言操作系统是计算机的核心和灵魂。
操作系统软件的设计对整个计算机的功能和性能起着至关重要的作用,所以此门课也是必不可少的,是面向计算机科学与技术、网络工程、软件工程等大多数计算机专业本科生开设的一门计算机专业课程。
操作系统是计算机系统的核心,《操作系统》课程是计算机科学与技术专业的重要必修课。
本课程的目的是使学生掌握现代计算机操作系统的基本原理、基本设计方法及实现技术,具有分析现行操作系统和设计、开发实际操作系统的基本能力。
操作系统实验是操作系统课程的重要组成部分,属于学科基础实验范畴。
作为与相关教学内容配合的实践性教学环节,应在操作系统理论课教学过程中开设。
操作系统是计算机科学与技术专业必修的专业基础课程,操作系统实验的作用是:理解操作系统的设计和实现思路,掌握典型算法。
基本要求是:理解进程的概念,理解死锁,掌握银行家算法;掌握请求页式存储管理的实现原理及页面置换算法。
学生应具有高级语言编程能力、具有数据结构等基础知识。
说明:本实验指导书所提供的源程序均已在VC6.0下调试运行过.页脚内容2目录实验一进程创建模拟 (1)实验二进程撤销模拟 (19)实验三P、V 原语的模拟实现 (21)实验四带优先级的时间片轮换的进程调度算法的实现 (35)实验五银行家算法模拟 (57)实验六连续动态内存管理模拟实现 (62)实验七请求页式存储管理中常用页面置换算法模拟 (66)实验八SCAN 磁盘调度模拟实现 (77)实验九UNIX基本操作 (79)页脚内容3实验一进程创建模拟实验学时:2实验类型:验证实验要求:必修一、实验目的1)理解进程创建相关理论;2)掌握进程创建方法;3)掌握进程相关数据结构。
二、实验内容本实验针对操作系统中进程创建相关理论进行实验。
要求实验者输入实验指导书提供的代码并进行测试。
实验报告(2015 / 2016学年第二学期)课程名称数据结构A实验名称二叉树的基本操作及哈夫曼编码译码系统的实现实验时间2016 年 4 月14 日指导单位计算机科学与技术系指导教师骆健学生姓名班级学号学院(系) 管理学院专业信息管理与信息系统实习题名:二叉树的基本操作班级姓名学号日期2016.04.14一、问题描述设计递归算法,实现下列二叉树运算:删除一棵二叉树、求一棵二叉树的高度、求一棵二叉树中叶子结点数、复制一棵二叉树、交换一棵二叉树的左右子树。
设计算法,按自上到下,从左到右的顺序,按层次遍历一棵二叉树。
设计main函数,测试上述每个运算。
二、概要设计文件tree.cpp中在该文件中定义二叉树的链式存储结构,用队列实现二叉树的层次遍历,并且编写实现二叉树的各种基本操作函数。
其中包括结点类BTNode,循环队列类SeqQueue,二叉树类BinaryTree。
主函数main的代码如图所示。
三、详细设计1.类和类的层次设计程序定义了循环队列SeqQueue类和二叉树BinaryTree类。
SeqQueue类主要是用队列实现,层次遍历。
运用后序遍历思想,把树分解为左右子树和跟结点再进行左右交换并计算树的高度,最后删除二叉树。
(b)二叉树类2.核心算法程序利用循环队列SeqQueue类通过不断出队并输出节点的值,将左右孩子入队直到队列为空实现二叉树的层次遍历。
并运用后序遍历思想,将二叉树树分解为左右子树和根结点,利用(p -> lChild)和(p -> rChild)计算结点数目,并通过交换结点的左右子树实现左右交换,计算树的高度,最后删除二叉树。
核心算法主要是二叉树BinaryTree类中的High,Node_num,Exchange,Level_traversal四个函数,其设计流程图如下:High()Node_num()Exchange()Level_traversal()四、程序代码template<class T>int BinaryTree<T>::Node_num(BTNode<T>*p) //叶子结点{if(p){if(p -> lChild == NULL && p -> rChild == NULL)return 1;elsereturn Node_num(p -> lChild) + Node_num(p -> rChild);}elsereturn 0;}template<class T>void BinaryTree<T>::Exchange(BTNode<T>*&t) //左右子树交换{if(t){BTNode<T>*q = t -> lChild;t -> lChild = t->rChild;t -> rChild = q;Exchange(t -> lChild);Exchange(t -> rChild);}}template<class T>void BinaryTree<T>::Level_traversal(void(*Visit)(T&x)) //层次遍历{Level_traversal(Visit, root);cout << endl;}template<class T>void BinaryTree<T>::Level_traversal(void(*Visit)(T&x),BTNode<T>*t) //层次遍历{BTNode<T> *a;Visit(t -> element);if(t -> lChild)s.EnQueue(t -> lChild);if(t -> rChild)s.EnQueue(t -> rChild);while(s.Front(a) == true){if(a -> lChild)s.EnQueue(a -> lChild);if(a -> rChild)s.EnQueue(a -> rChild);Visit(a -> element);s.DeQueue();}}五、测试和调试1.测试用例和结果测试结果如下图2.结果分析1)程序能够正确的实现二叉树的基本的建立、删除、复制、遍历以及结点计算等基本操作。
实验报告
班级:姓名:学号:
课程名称Java程序设计实验项目环境变量配置
实验项目类型验
证
演
示
综
合
设
计
指导教师吴伟敏成绩√
一、实验目的
1.掌握JDK的安装和环境变量配置;
2.掌握Java程序开发的基本步骤;
3.了解Java应用程序的基本语法。
二、实验步骤
(1)jdk解压缩,进行安装。
(2)右键点击“我的电脑”图标,选择“属性”;
(3)打开“系统属性”选择“高级”选项卡,单击“环境变量”按钮,打开“环境变化”对话框;
(4)在“用户变量”中,新建path变量,将变量值设置为“C:\jdk1.4\bin,再新建classpath 变量,将变量值设置为“C:\jdk1.4\lib”;
(5)点击“开始”、“运行”,输入cmd,在打开的命令行窗口中输入javac命令
(6)在打开的命令行窗口中输入set命令,验证刚才的设置是否成功。
三、实验过程原始记录(数据、图表、计算等)
四、实验结果及分析
配置环境变量主要是为了让程序知道到哪去找到它所需要的文件,设置的内容是一些路径。
签名
备注:
1、此表表头必须按此格式制作。
2、表头以下的栏目和内容,各系部可根据实验课程的具体需要和要求确定,表中所列内容仅供参考。
该栏可以根据需要加页。
3、一门课程有多个实验项目的,应每一个实验项目一份。