《面向对象程序设计》实验指导书 (1-6个实验,含参考代码).

《面向对象程序设计》实验指导书 (1-6个实验,含参考代码).
《面向对象程序设计》实验指导书 (1-6个实验,含参考代码).

面向对象程序设计

实验指导书

(适用:电子信息11级)

彭召意陶立新编写

计算机与通信学院

2014.9

目录

实验一 C++基础的应用 (1)

实验二类和对象的应用 (3)

实验三类的构造函数、析构函数的应用 (4)

实验四友员和运算符重载 (5)

实验五类的继承与派生 (6)

实验六类的多态性与虚函数 (7)

附录:各实验的程序代码 (8)

实验一 C++基础的应用

(实验课时:2 实验性质:设计)

实验名称: C++基础的应用

实验目的: (1)进一步学习VC++6.0开发环境及程序调试方法。

(2)练习C++函数的定义及使用;

(3)练习C++数组的定义及使用;

(4)练习C++指针的定义及使用;

(5)练习C++结构体的定义及使用;

(6)练习多文件的程序的编译和运行方法;

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: (1)熟悉Visual C++6.0编译系统的常用功能,特别是debug调试功能;

(2)编程1:编写一个程序c1.cpp,用来求2个或3个整数的最大数。要求:用重载函数的方法来求最大数;函数原型:int max( int a, int b) 和int max( int a, int b,int c)。

(3)编程2:编写一个程序c2.cpp,求:a!+ b! + c!的值。要求:使用递归函数。主程序和函数分开到两个源程序文件中,分别进行编译后,再运行;

(4)编程3:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号;

(5)编程4:建立一个动态链表并进行输出和删除管理。链表的每个节点为学生信息,包括:学号,姓名,性别,下一学生信息的指针。程序的工作:(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。

(6)使用debug调试功能:追踪第2个程序中函数的运行。

(7)思考:

在第2个程序中,如果a,b,c的值较大,则显示的结果会怎样?这时如何解决此问题?

(提示:显示的结果会不对,可能还会是负数,定义一个数组来存放最后结果。)

实验要求: (1)掌握Visual C++6.0开发环境的常用功能及使用,能进一步使用Visual C++6.0的debug调试功能:单步调试、设置断点等;

(2)掌握C++函数的定义及使用,掌握函数的嵌套调用和递归调用的方法;

(3)掌握C++数组、指针、结构体的定义及使用;

(4)掌握多文件的程序的编译和运行方法;

(5)程序格式规范,程序运行正确;

(6)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)熟悉Visual C++6.0编译系统的常用功能;

(3)在file菜单中,新建C++源程序c1.cpp;

(4)编辑C++源程序文件c1.cpp的内容。

(5)编译c1.cpp,系统会提示是否创建工程(由于前面没有创建工程),选择“是”。则创建一个工程;

(6)程序编译正确时,则可建立可执行程序;

(注意观察每步的结果)

(7)运行可执行文件;

(8)关闭工作空间。

(9)对编程2,在file菜单中,新建C++源程序cpp2_1;

(10)编辑C++源程序文件cpp2_1的内容;

(11)编译cpp2_1,系统会提示是否创建工程(由于前面没有创建工程),选择“是”,则创建工程;

(12)在file菜单中,新建C++源程序cpp2_2;

(13)编辑C++源程序文件cpp2_2的内容;

(14)编译文件cpp2_2时,系统提示是否加入到此工程,选择“是”,则把文件cpp2_2加入到该工程中。

(15)编译和运行此程序,并注意观察每步的结果。

(16)使用调试功能:运行到光标处、单步跟踪、查看变量值。

(17)使用关闭工作空间。

(18)参照上述方法,完成编程3和编程4。

注意:若编译时出错:“fatal error c1010:unexpexted end of file while looking for precompiled header directive.”;

该文件需要包含头文件:stdafx.h,即在开头有语句:#include “stdafx.h”

思考题:假如已建立了两个C++源程序c1.cpp和c2.cpp。先用open打开c1.cpp,并完成了编译、连接和运行,再打开c2.cpp,对它进行编译和连接。此时会出现什么问题?原因何在?怎样解决?

实验二类和对象的应用

(实验课时:2 实验性质:设计)

实验名称: 类和对象的应用

实验目的: (1)熟悉C++面向对象的程序设计的基本概念;

(2)练习类的定义和对象的创建;

(3)练习对象的成员函数的调用方法以及对象的初始化;

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: 事先编好程序,上机调试和运行程序,分析结果。

(1)编程1:定义并实现一个简单的学生类:公有属性为:学号、姓名、班级,成员函数为输入和显示一个学生的上述信息;

(2)将程序(1)中的数据成员改为私有的,考虑对程序有何影响;

(3)编程2:设计一个长方形类 Rectangle。成员变量包括:长度和宽度,成员函数有:Area计算面积,Set设置长方形的长和宽,Get获取长方形的长和宽。最后,编写一个主程序来测试该类及成员函数。

(4)编程3:设计一个汽车类Car。成员变量有:品牌,颜色,车门,车灯,行驶速度。成员函数有:打开车门、打开车灯、加速、减速等。最后,编写一个主程序来测试该类及功能。(提示:在成员函数中用输出成员函数名来表示该成员函数被调用)

实验要求: (1)掌握C++类和对象的基本概念;

(2)掌握C++类和对象的定义及使用;

(3)掌握对象的成员函数的调用方法;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验三类的构造函数、析构函数的应用

(实验课时:2 实验性质:设计)

实验名称: 类的构造函数、析构函数的应用

实验目的: (1)练习类的构造函数、析构函数的定义和使用方法;

(2)练习对象数组、对象指针的使用;

(3)练习类的静态成员的使用。

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: (1)编程:设计一个学生类。要求:

学生的属性有:学号,姓名,性别;

学生的行为有:输入学生的上述属性和输出学生的上述属性。

编写构造函数对学生的所有属性初始化,无参数的构造函数设置学号为1001,姓名为“张三”,性别为‘M’(‘M’代表男,‘F’代表女)。

(2)修改上述程序:修改定义析构函数,在析构函数中输出学号。再运行程序,观察运行结果。

(3)修改上述main程序:使用对象指针,用new生成一个学生对象,然后,用delete清除该对象,使用单步运行观察运行结果。

(4)修改上述程序:增加一个私有数据成员成绩score;增加一个成员函数readdata:输入一学生的学号和成绩;增加一个成员函数getscore:取得学生的成绩。再修改main函数;定义一个班的同学(假如一个班有10位同学,采用对象数组),输出该班的平均成绩。

(5)不用对象数组,而使用静态的数据成员来实现(4)中求一个班的学生的平均成绩,学生的成绩在构造函数中输入。

(提示:定义2个静态数据成员,1个是存储总成绩,1个是存储学生人数)。

(6)分别运行上述程序,并分析结果。

注意:在增加一个新的功能时,可以把暂时不需要的功能代码给注释掉。

实验要求: (1)掌握C++类的构造函数、析构函数的定义和使用方法;

(2)掌握C++对象数组、对象指针的使用;

(3)掌握类的静态数据成员的定义和使用;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验四友员和运算符重载

(实验课时:2 实验性质:设计)

实验名称: 友元和运算符重载

实验目的: (1)进一步了解运算符重载的概念和使用方法;

(2)掌握几种常用的运算符重载的方法;

(3)练习友员函数的定义和使用;

(4)了解转换构造函数的使用方法。

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: 事先编好程序,上机调试和运行程序,分析结果。

(1)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如:c=a+b。

(2)编写一个友元函数来读取矩阵指定所在行列的值。

(3)定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。

实验要求: (1)掌握C++运算符重载的概念和使用方法;

(2)熟悉转换构造函数的使用方法;

(3)程序格式规范,程序运行正确;

(4)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序,并分析结果;

(6)关闭工作空间。

实验五类的继承与派生

(实验课时:2 实验性质:设计)

实验名称:类的继承与派生

实验目的: (1)进一步理解继承与派生的概念;

(2)掌握通过继承派生出一个新的类的方法;

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: 事先编好程序,上机调试和运行程序,分析结果。

(1)编程:编写一个学生类Student。要求:

①学生的保护属性有:学号(Num),姓名(Name),性别(Sex);

学生的公用成员函数有:ReadData( )用于输入Num、Name、Sex。OutputData( )用于输出Num、Name、Sex。

②然后,在学生类的基础上派生出研究生类Graduate,该类新增私有属性研究方向(ResearchD),新增公用成员函数ResearchWork( ),该函数功能为输出学号和研究方向。

③编写main函数测试基类和派生类的各属性很函数的访问。修改派生类的派生方式以及基类成员的访问方式,再测试看看基类和派生类的属性访问方式有何不同。

(2)编程:在上述工程中增加一个Teacher(教师)类,采用多重继承方式由Student和Teacher类公有派生出新类Student_Teacher。要求:

①Teacher类的保护成员有:Name、Sex、Title(职称)、Wages(工资)。两个基类中的Name、Sex同名,在引用这些数据成员时,指定作用域。

②在派生类Student_Teacher中,增加两个成员函数:ReadF1()用于读入:Num、Name、Sex、Title、Wages。Show()用于输出数据,在Show()中,首先调用Student 类的display()函数用于输出Num、Name、Sex,然后再用cout语句输出Title、Wages。

③在类体中声明成员函数,在类外定义成员函数。

思考题:类的三种继承方式的主要区别是什么?

实验要求: (1)掌握继承与派生的概念;

(2)掌握通过继承派生出一个新的类的方法;

(3)程序格式规范,程序运行正确;

(4)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序;

(6)关闭工作空间。

实验六类的多态性与虚函数

(实验课时:2 实验性质:设计)

实验名称: 类的多态性与虚函数

实验目的: (1)了解多态性的概念;

(2)了解虚函数的作用和使用方法;

(3)了解纯虚函数和抽象类的概念和用法。

实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB);

(2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。

实验内容: 事先编好程序,上机调试和运行程序,分析结果。

(1)编程:定义抽象基类Shape(图形)。

Shape类有一个公共的纯虚函数Area,用于派生类求图形的面积。

(2)由Shape派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数PrintArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

在主程序中测试这些类的PrintArea函数。

(3)在类Circle基础上再派生一个圆柱体Cylinder,重载Area函数求圆柱体的体积。然后,编写主程序采用静态多态性和动态多态性分别测试Area函数。

(4)在类Circle中定义一个析构函数,让它输出一行信息“This is Cicle Destruction。”,在类Cylinder中定义一个析构函数,让它输出一行信息“This is Cylinder Destruction。”。

在主程序中用指向基类Circle类的指针动态生成Cylinder类对象,然后用delete 语句释放该对象,测试看看运行结果如何。再修改Circle的析构函数为虚函数,测试看看运行结果如何。

(5)运行上述程序,并分析结果。

实验要求: (1)掌握多态性的概念;

(2)掌握虚函数的作用和使用方法;

(3)掌握纯虚函数和抽象类的概念和用法;

(4)程序格式规范,程序运行正确;

(5)认真书写实验报告,如实填写各项实验内容。

实验步骤: (1)启动Visual C++6.0开发环境;

(2)创建一个项目;

(3)建立C++源程序文件;

(4)编辑C++源程序文件内容;

(5)建立并运行可执行程序,并分析结果;

(6)关闭工作空间。

思考题:虚函数的作用是什么?

附录:各实验的程序代码实验1:程序代码

程序1:

#include

using namespace std;

int main()

{int max(int a,int b,int c);

int max(int a,int b);

int a=8,b=-12,c=7;

cout<<"max(a,b,c)="<

cout<<"max(a,b)="<

return 0;

}

int max(int a,int b,int c)

{if(b>a) a=b;

if(c>a) a=c;

return a;

}

int max(int a,int b)

{if(a>b) return a;

else return b;

}

程序2:

//cpp2_1.cpp

#include

using namespace std;

int main()

{int fac(int);

int a,b,c,sum=0;

cout<<"enter a,b,c:";

cin>>a>>b>>c;

sum=sum+fac(a)+fac(b)+fac(c);

cout<

return 0;

}

//cpp2_2.cpp,递归方式

int fac(int n)

if ( n<=1) return 1;

else

return ( n*fac(n-1));

}

//cpp2_2.cpp,非递归方式

int fac(int n)

{int f=1;

for (int i=1;i<=n;i++)

f=f*i;

return f;

}

程序3:

#include

using namespace std;

int main()

{ int i,j,row=0,colum=0,max;

int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};

max=a[0][0];

for (i=0;i<=2;i++)

for (j=0;j<=3;j++)

if (a[i][j]>max)

{max=a[i][j];

row=i;

colum=j;

}

cout<<"max="<

}

程序4:

#include

//#include

using namespace std;

const int n=10;

struct student

{ char num[6];

char name[8];

char sex;

student *next;

int main()

{ int i;

student *head,*p1,*p2;

head=p1=NULL;

for (i=0;i<3;i++)

{

p2 = new student;

if (p2==NULL)

break;

cout<<"input student information: "<

cout<<"Num:";

cin>>p2->num;

cout<<"name:";

cin>>p2->name;

cout<<"sex:";

cin>>p2->sex;

if (i==0)

{

head=p1=p2;

}

else

{

p1->next = p2;

p1 = p2;

}

}

if (p1!=NULL) p1->next = NULL;

cout<<"Output information:\n";

p1=head;

i=0;

while (p1!=NULL)

{

i++;

cout<<"Number " <

cout << "num:"<num<<" name:"<name <<" sex:"<sex<

p1 = p1->next;

}

p1= head->next;

head->next = p1->next;

delete p1;

cout<<"After delete,Output information:\n";

p1=head;

i=0;

while (p1!=NULL)

{

i++;

cout<<"Number " <

cout << "num:"<num<<" name:"<name <<" sex:"<sex<

p1 = p1->next;

}

while (head!=NULL)

{

p1 = head->next;

delete head;

head = p1;

}

return 0;

}

思考题:

打开c2.cpp,对它进行编译时,出现提示:

选择“否”,出现提示:

选择“是”,则编译完成。连接时,出现错误提示:

--------------------Configuration: Cpp1 - Win32 Debug-------------------- Linking...

Cpp2.obj : error LNK2005: _main already defined in Cpp1.obj

Debug/Cpp1.exe : fatal error LNK1169: one or more multiply defined symbols found Error executing link.exe.

Cpp1.exe - 2 error(s), 0 warning(s)

出错原因:c1工程中有两个main()函数。

解决方法:关闭c1的工作空间后,再打开c2.cpp。

实验2:程序代码

(1)定义并实现类student

#include

class student //定义类

{ public: //类的公有成员

int Num;

char Name[10];

char Sclass[20];

void inputs( )

{ c in>>Num>>Name>>Sclass;}

void display( )

{ cout << "\n 学号: "<< Num<<”姓名:”<

void main( ) //主函数

{ student ss; //声明对象

ss.input s(); //调用成员函数

ss.display( );

}

(2)程序2

include

using namespace std;

class Time

{public:

void set_time(void)

{cin>>hour;

cin>>minute;

cin>>sec;

}

void show_time(void)

{cout<

private: int hour;

int minute;

int sec;

};

Time t;

int main()

{

t.set_time();

t.show_time();

return 0;

}

程序3

#include

using namespace std;

class Time

{public:

void set_time(void);

void show_time(void);

private:

int hour;

int minute;

int sec;

};

void Time::set_time(void)

{cin>>hour;

cin>>minute;

cin>>sec;

}

void Time::show_time(void)

{cout<

Time t;

int main()

{ t.set_time();

t.show_time();

return 0;

}

实验3:程序代码

(1)3.5

#include

#include

using namespace std;

class Student

{public:

Student(int n,string nam,char s)

{num=n;

name=nam;

sex=s;

cout<<"Constructor called."<

}

~Student()

{cout<<"Destructor called."<

void display()

{cout<<"num:"<

cout<<"name:"<

cout<<"sex:"<

}

private:

int num;

string name;

char sex;

};

int main()

{Student stud1(10010,"Wang_li",'f');

stud1.display();

Student stud2(10011,"Zhang_fun",'m');

stud2.display();

return 0;

}

(2)修改析构函数:

~Student()

{cout<<"Num="<

(3)增加部分:

Student *p=new Student(10012,"Li_si",'m'); delete p;

(4)增加部分:

数据成员:

float score;

成员函数:

public:

Student() {};

void read data() { cin>>num>>score;}

float getscore() {return score;}

修改main:

增加:Student s[10];

int i;

float total=0;

增加:

for (i=0;i<10;i++)

{

s[i].readdata();

total+=s[i].getscore();

}

cout<

(5)增加:

在类Student中:friend void fdisplay(Student *s);

在类外:

void fdisplay(Student *s)

{cout<<" Num="<num<<" Name="<name<<" score="<score<

};

在main函数中:

Student s1;

s1.readdata();

fdisplay(&s1);

程序1:

#include

using namespace std;

class Matrix //定义Matrix类{public:

Matrix(); //默认构造函数

friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”

void input(); //输入数据函数

void display(); //输出数据函数

private:

int mat[2][3];

};

Matrix::Matrix() //定义构造函数

{for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

mat[i][j]=0;

}

Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符“+”函数{Matrix c;

for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];}

return c;

}

void Matrix::input() //定义输入数据函数{cout<<"input value of matrix:"<

for(int i=0;i<2;i++)

for(int j=0;j<3;j++)

cin>>mat[i][j];

}

void Matrix::display() //定义输出数据函数

{for (int i=0;i<2;i++)

{for(int j=0;j<3;j++)

{cout<

cout<

}

int main()

{Matrix a,b,c;

a.input();

cout<

a.display();

cout<

b.display();

c=a+b; //用重载运算符“+”实现两个矩阵相加cout<

c.display();

return 0;

}

另外的参考矩阵类:

定义一个矩阵类Matrix

//首先定义了矩阵类的最大行数和列数

#include

using namespace std;

#define MaxRow 100

#define MaxColumn 100

class Matrix //定义Matrix类

{public:

Matrix() { Row = 2;Column = 2;}; //默认构造函数

Matrix(int r,int c) //带参数的构造函数

{ int i,j;

if (r>MaxRow)

Row = MaxRow;

else

Row = r;

if (c>MaxColumn)

Column = MaxColumn;

else

Column = c;

for(i=0;i

for (j=0;j

MatVal[i][j] = 0;

};

private:

int MatVal[MaxRow][MaxColumn]; //矩阵值

int Row;//行数

int Column; //列数

};

面向对象程序设计考前复习题及答案

简答题 1、传统的结构化程序设计的优点和缺点是什么? 优点: (1)这种程序设计方法力求算法描述准确。 (2)对每一子过程模块容易进行程序正确性证明。 缺点: (1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。 (2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。 (3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。 2、什么是对象? 每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。 3、什么是消息? 在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。4、什么是多态性? 所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。 5、什么是面向对象的程序设计方法? 这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。 在OOP中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。 6、面向对象方法的特点是什么? (1)OOP以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。 (2)引入了“类”(class)的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。 (3)OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。 7、面向对象的程序设计方法与结构化程序设计方法的比较 (1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。

实验项目二(附答案)

《税法》实验项目二 班级: 姓名: 学号:

一、单项选择题 1.纳税人委托加工应税消费品,其纳税义务发生时间为()。 A.委托行为发生的当天 B.向加工企业支付加工费的当天 C.纳税人提货的当天 D.向加工企业发出主要原料的当天 2.甲外贸进出口公司本月进口200辆小轿车,每辆车关税完税价格为人民币42.9 万元,缴纳关税12万元。已知小轿车适用的消费税税率为8%。该批进口小轿车应缴纳的消费税为()万元。 A.746.09 B.878.40 C.954.78 D.686.40 3.甲公司为增值税一般纳税人,本年7月从国外进口一批高档化妆品,海关核定的关税完税价格为60万元。已知进口关税税率为26%,消费税税率为15%,增值税税率为13%。该公司进口环节应纳增值税为()万元。 A.7.8 B.9.83 C.11.56 D.8.97 4.甲公司为增值税一般纳税人,外购高档护肤类化妆品生产高档修饰类化妆品,本年7月份生产销售高档修饰类化妆品取得不含税销售收入200万元。该公司7月初无高档护肤类化妆品库存,7月购进高档护肤类化妆品200万元,7月底库存高档护肤类化妆品20万元。已知高档化妆品适用的消费税税率为15%。该公司本年7月应纳消费税为()。 A.200×15%-(200-20)×15%=3(万元) B.200×15%-20×15%=27(万元) C.200×15%=30(万元) D.200×15%-200×15%=0 5.我国消费税对不同应税消费品采用了不同的税率形式。下列应税消费品中,适用复合计税方法计征消费税的是()。 A.啤酒 B.白酒 C.烟丝 D.摩托车 6.下列各项中,应征收消费税的是()。 A.农用拖拉机 B.电动汽车 C.游艇 D.调味料酒 7.甲公司为增值税一般纳税人,外购香水精生产香水,本年7月生产销售香水取得不含税销售收入80万元。该公司7月初库存香水精7万元,7月购进香水精60万元,7月底库存香水精20万元。已知外购的香水精和自产的香水均为高档化妆

《操作系统原理》信管专业实验指导书资料

《操作系统原理》实验指导书 班级:_______________ 学号:_______________ 姓名:_______________ 山东建筑大学管理工程学院 信息管理与信息系统教研室

目录 引言 (1) 实验题目一 (2) 实验题目二 (4) 实验题目三 (6) 实验题目四 (8) 实验题目五 (10) 实验题目六 (12)

引言 操作系统是信息管理与信息系统专业一门重要的专业理论课程,了解和掌握操作系统的基本概念、功能和实现原理,对认识整个计算机系统的工作原理十分重要。 操作系统实验是操作系统课程的一个重要组成部分,通过试验环节的锻炼使同学们不仅能够对以前的所学过的基础知识加以巩固,同时能够通过上机实验,对操作系统的抽象理论知识加以理解,最终达到融会贯通的目的,因此,实验环节是同学们理解、掌握操作系统基本理论的一个重要环节。 本实验指导书,根据教材中的重点内容设定了相应的实验题目,由于实验课程的学时有限,我们规定了必做题目和选做题目,其中必做题目必须在规定的上机学时中完成,必须有相应的预习报告和实验报告。选做题目是针对有能力或感兴趣的同学利用课余时间或上机学时的剩余时间完成。

实验题目一:模拟进程创建、终止、阻塞、唤醒原语 一、题目类型:必做题目。 二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进 程控制功能的理解,掌握操作系统模块的设计方法和工作原理。 三、实验环境: 1、硬件:PC 机及其兼容机。 2、软件:Windows OS ,Turbo C 或C++、VC++、https://www.360docs.net/doc/1d4954827.html, 、Java 等。 四、实验内容: 1、设计创建、终止、阻塞、唤醒原语功能函数。 2、设计主函数,采用菜单结构(参见后面给出的流程图)。 3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供 随时查看各队列中进程的变化情况。 五、实验要求: 1、进程PCB 中应包含以下内容: 2、系统总体结构: 其中: 进程名用P1,P2标识。 优先级及运行时间:为实验题目二做准备。 状态为:就绪、运行、阻塞,三种基本状态。 指针:指向下一个PCB 。

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

(完整版)《面向对象程序设计》答案

实验一熟悉VC++IDE开发环境 一、实验目的 1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。 2、掌握如何编辑、编译、连接和运行一个C++程序。 3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。 二、实验要求 1、分析下列程序运行的结果。 程序一: #include int add(int x,int y=8); void main() { int x=4; cout< void main() { int *p,i; i=5; p=&i; i=*p+10; cout<<"i="< void main(void) { int i=10; int &r=i; r++; cout<<"i="< void func(); int n=1; void main() { static int a; int b= -9; cout <<"a:"<

面向对象程序设计第12章在线测试

《面向对象程序设计》第12章在线测试剩余时间:59:56 答题须知:1、本卷满分20分。 2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。 3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。 第一题、单项选择题(每题1分,5道题共5分) 1、面向对象的程序设计语言必须具备的关键要素是( ) A、抽象和封装 B、抽象和多态性 C、抽象、封装、继承和多态性 D、抽象、封装和继承性 2、封装性应具有的条件是() A、有一个清晰的边界 B、有确定的接口 C、受保护的内部实现 D、以上所有 3、OOD的作用是() A、提取需求 B、逻辑建模 C、求解域建模 D、分析用例 4、按钮与电梯按钮的关系是() A、部分与整体 B、一般与特殊 C、实例连接 D、消息连接 5、面向对象模型不包括() A、静态模型 B、对象模型 C、功能模型 D、动态模型 第二题、多项选择题(每题2分,5道题共10分) 1、部分与整体的关系有()方式 A、组合 B、联合 C、聚合 D、整合

2、对象之间存在的关系包括() A、部分与整体 B、一般与特殊 C、实例连接 D、消息连接 3、关于多态的说法正确的是() A、不同类型的对象接收相同的消息产生不同的行为 B、多态的成员函数需要定义为虚函数 C、在C++中通过基类指针调用虚函数实现多态 D、多态是指对象的多种表现形式 4、关于软件生命周期的说法正确的是() A、开发程序就是直接编码 B、在程序设计之前需要先进行软件设计 C、软件投入使用后软件生命周期结束 D、软件维护也是软件生命周期的一个阶段 5、下面关于面向对象的特征说法正确的是() A、每一个对象都具有唯一的标识 B、任何类的划分都是客观的,程序员必须遵守其规定 C、继承性是子类自动共享父类数据结构和方法的机制 D、多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的 结果 第三题、判断题(每题1分,5道题共5分) 1、面向对象开发技术分三个阶段:面向对象分析,面向对象设计和面向对象实现。 正确错误 2、面向对象的要素包括抽象、封装。

实验二答案

实验二数据描述(基本数据类型及运算符)答案 编程及调试实例2-1改正错误后的程序 #include void main( ) { int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf("fahr = %d, celsius = %d\n", fahr, celsius); } 编程及调试练习2-1:源程序 (1) #include void main( ) { int celsius, fahr; fahr = 150; /*只改变fahr的值*/ celsius = 5 * (fahr - 32) / 9; /*celsius = 5 * (fahr - 32) / 9与上面的实例完全一样*/ printf("fahr =%d, celsius = %d\n", fahr, celsius); } 运行程序后,输出: fahr = 150, celsius = 65 (2) #include void main( ) { int celsius, fahr; fahr = 150; /*fahr的值仍为150*/ celsius = 5*fahr / 9 - 5*32 / 9; /* celsius的值的计算方法从数学上看与(1)的完全一样*/ printf("fahr =%d, celsius = %d\n", fahr, celsius); } 运行程序后,输出: fahr = 150, celsius = 66 (3) #include void main( ) { int celsius, fahr; fahr = 150; /* fahr的值仍为150*/

操作系统原理实验指导

操作系统实验指导 操作系统是计算机的最重要的系统软件,它在计算机中具有核心地位,其作用是对计算机系统资源进行统一的调度和管理,提供各种强有力的系统服务,为用户创造灵活而又方便的使用环境。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分地发挥系统中各种资源的使用效率,提高系统工作的可靠性。 操作系统原理是计算机科学与技术专业的一门主要专业课程,它涉及计算机系统中各种软、硬资源管理的实现原理与方法,内容非常丰富,综合性非常强,并且还具有很强的实践性。只有把理论与实践紧密地结合起来,才能取得较好地学习效果。 培养计算机专业学生的系统程序设计能力,也是本课程的重要环节。系统程序要求结构清晰、合理、可读性好,有准确而简明的注释。通过实验可以培养学生正规系统程序设计能力。 本实验包括下列六个方面: 实验一几种操作系统的界面 实验二进程调度 实验三存储器管理 实验四存储器管理 实验五磁盘驱动调度 实验六文件管理系统 上述每个实验约需要10个学时。可根据实际情况选用。最好学生自己独立完成,如有困难,可参考一些示例,弄清每个实验的思想和实现方法,上机调试通过,不能完全照搬示例。 实验一几种操作系统的界面 1、目的与要求 目的:通过本实验,学生应熟悉1~2种操作系统的界面。在熟练使用的基础上,能了解各种命令和调用在系统中的大致工作过程,也就是通过操作系统的外部特性,逐步深入到操作系统的内在实质内容中去。 要求:能熟练地在1~2种操作系统环境下工作。学会使用各种命令,熟悉系统提供的各种功能。主动而有效地使用计算机。 熟悉系统实用程序的调用方法和各种系统调用模块的功能和用法。 2、示例 用1~2种操作系统提供的各种手段,建立、修改、编辑、编译和运行程序,最后撤消一个简单程序。要尽可能多地使用系统提供的各种命令和功能。 操作系统可为如下两种序列: (1)Windows 98或Windows 2000或Windows XP。 (2)Linux或Unix。 下面简要介绍一下Unix操作系统。 Unix是一个分时操作系统,面向用户的界面shell是一种命令程序设计语言,这种语言向用户提供了从低到高,从简单到复杂的三个层次的使用方式。它们是简单命令、组合命令和shell过程。 简单命令:Unix命令一律使用小写字母。 例如:ls -l 显示文件目录(长格式) rm 删除一个文件 cat 合并和传送文件、 cp 复制文件 mv 文件改名 cc 编译C语言源程序 组合命令:shell简单命令可以用管道算符|组合构成功能更强的命令。

操作系统实验指导_源码参考资料

华东交通大学 软件学院 操作系统实验报告 专业: 计算机科学与技术 姓名: 林庆达 学号: 3103005138 2005-6

试验一进程调度 一、实验目的: 编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容:以两种典型算法为例说明实现的算法 (一)、最高优先数优先的调度算法 1、实验原理 进程调度算法:采用最高优先数优先 的调度算法(即把处理机分配给优先数最 高的进程)和先来先服务算法。 每个进程有一个进程控制块(PCB) 表示。进程控制块可以包含如下信息:进 程名、优先数、到达时间、需要运行时间、 已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以 事先人为地指定(也可以由随机数产生)。 进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进 行计算。 每个进程的状态可以是就绪W (Wait)、运行R(Run)、或完成F(Finish) 三种状态之一。 就绪进程获得CPU后都只能运行一 个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占 用CPU时间已达到所需要的运行时间, 则撤消该进程,如果运行一个时间片后进 程的已占用CPU时间还未达所需要的运 行时间,也就是进程还需要继续运行,此 时应将进程的优先数减1(即降低一级), 然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运 行进程、就绪队列、以及各个进程的PCB, 以便进行检查。 重复以上过程,直到所有进程都完成为止。 2、源代码: #include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

什么是面向对象程序设计

1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。

实验指导(2015完全版)

操作系统上机实验指导书 (第一版) 闫大顺李晟编著 吴家培主审 计算机科学与工程学院 2014.8

操作系统实验指导 本课程是为《计算机操作系统》课所开的实验。计算机操作系统课程是一门实践性很强的技术课程,本课程实验的目的在于培养学生的实践能力,促进理论与实践的结合。要求学生通过上机编程,熟悉对操作系统原理,并熟练使用程序接口,并了解如何模拟操作系统原理的实现,从而加深对操作系统原理的领会,加深对操作系统实现方法的理解,与此同时使学生在程序设计方面也能够得到很大程度的提高。 实验的目的是使学生理论联系实际,提高学生系统理解与开发能力。这里所列的实验分为必做和选做。具体实验题的选择,不仅要考虑课程内容,而且要考虑学生目前的编程能力,要由浅入深。教师可通过运行示例或动画,帮助学生理解实验要求。学生应选择自己熟悉的语言与开发环境去完成实验。根据以往的教学经验,Delphi、C++ Builder,JBuilder由于提供了许多可重用的构件,易于学习、使用,VC++学习、使用困难较多。实验要求尽量在windows操作系统下,也可以在Linux下完成,由于多数没有专门学习Linux,在其平台下做试验比较困难。实验的硬件要求是能够支持VC++、Delphi、C++ Builder,JBuilder的微机即可。每个学生都独立在一台计算机上完成自己的实验内容,杜绝学生的抄袭。 实验报告的要求 1. 每位同学准备实验报告本,上机前作好充分的准备工作,预习本次实验的内容,事先熟悉与实验有关的软硬件环境。 2. 实验时遵守实验室的规章制度,爱护实验设备,对于实验设备出现的问题,要及时向指导老师汇报。 3. 提交实验文件格式:[班级][学号]_[实验题号].[扩展名] 例:计051班学号为03的学生第四个实验的文件名为:j05103_4.c 4. 最终的实验报告按照实验名称、实验目的、实验内容,实验过程(程序设计、实现与调试)、实验总结五部分书写,按时上交。实验总结是对于实验过程中出现的问题或疑惑的分析与思考。认真按照要求填写到实验报告纸上。

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

面向对象程序设计复习题及参考答案

网络教育课程考试复习题及参考答案 面向对象程序设计 一、填空题: 1.创建类的对象时,使用运算符___________给对象分配内存空间。 2.Java通过来区分重载函数。 3.在子类中使用保留字_ _可调用被子类覆盖的父类中的方法。 4.使用保留字可以从一个构造方法中调用同一个类的另一个构造方法。 5.抽象类用修饰符定义。 6.类的数据成员的访问权限修饰符一般为 7.访问权限修饰符按照访问权限的大小从大到小分别为、、 、。 8.定义类的构造方法不能有,其名称与名相同。 9.抽象方法是的特征是。 10.Java中的所有异常都是从继承来的。 11.对象引用中存储的内容是。 12.下列程序段执行后, String str1 = new String("Java"); String str2 = new String("Java"); if (str1.equals(str2)) { System.out.println("They are equal"); } else { System.out.println("They are not equal"); } 输出结果为:。 13.下面循环执行后的sun值为 int count =0, sum = 0; while ( count <10 ) { sum += count; count ++; } 14.Java语言中关键字_ _表示双精度类型。 15.保留字_ _用于导入包中的类到程序中,供程序中使用。 16.Java语言中继承是用保留字表示。 17.面向对象程序设计中,类是指。 18.对象包含和。 19.若有类定义: class B extends A{ … } 则类B是类A的_ 。 20.Java语言中, 通常把可能发生异常的方法调用语句放到try块中,并用紧跟其后的_ 块来捕 获和处理异常。 21.多态是指。 22.声明常量时使用修饰符。 23.Java中异常抛出使用保留字。 24.一个类成员或者方法前面加上了修饰符,那说明该数据成员和方法可以直接通过类名 来访问和调用。

实验07-2参考答案

实验七-2 字符串和数组程序设计 班级:学号:姓名:评分: 一.【实验目的】 1、熟练掌握字符串的存取和操作方法方法。 2、进一步掌握C程序的调试方法和技巧。 二.【实验内容和步骤】 1、程序调试题 A.目标:进一步学习掌握程序调试的方法和技巧。 B.内容:从键盘输入一个以回车键结束的字符串(少于80个字符),将它的内容逆向输出。例如:输入“ABCD”,输出“DCBA”。改正程序中的错误,使其实现程序的功能。(注:程序文件保存在“调试示例”文件夹中,文件名为error08_1.cpp) ①调试正确的源程序清单 #include int main( ) { int i, k, temp; char str[80]; printf("input a string: "); i = 0; while((str[i] = getchar( )) != '\n') i++; str[i] = '\0'; k = i - 1; for(i = 0; i < k; i++){ /* 调试时设置断点 */ temp = str[i]; str[i] = str[k]; str[k] = temp; k--; } /* 调试时设置断点 */ for(i = 0; str[i] != '\0'; i++) putchar(str[i]); putchar('\n'); return 0; } ②运行结果:(提示:通过屏幕截图,贴粘程序运行界面)。 2、完善程序,并调试运行程序 题目(1)求字符串长度。程序功能:连续输入一批以#结束的字符串(字符串的长度不超过80),遇## 则全部输入结束。统计并输出每个字符串的有效长度。例如:输入:hello 12#abc+0##,表示连续输入2个字符串"hello 12"和"abc+0"。输出:8 5。(注:程序文件保存在“第1题”文件夹中)打开proj1.cpp文件,在两条星线

操作系统实验报告

操作系统实验报告 学生学院计算机学院 专业班级计算机科学与技术3班学号3213005910 学生姓名林虹 指导教师丁国芳 2015 年12月15 日

目录 1 实验一进程调度 (1) 2 实验二银行家算法 (16) 3 实验三动态分区分配方式的模拟 (20) 4 实验四仿真各种磁盘调度算法 (26)

实验一进程调度 1. 实验目的 编写并调试一个模拟的进程调度程序,分别采用“短进程优先”、“时间片轮转”、“高响应比优先”调度算法对随机产生的五个进程进行调度,并比较算法的平均周转时间。以加深对进程的概念及进程调度算法的理解。 2. 实验要求 1.每个进程由一个进程控制块(PCB)表示,进程控制块可以包含如下信息:进程 名、优先数(响应比)、到达时间、需要运行时间(进程的长度)、已运行时间、进 程状态等等(可以根据需要自己设定)。 2.由程序自动生成进程(包括需要的数据,要注意数据的合理范围),第一个进程到 达时间从0开始,其余进程到达时间随机产生。 3.采用时间片轮转调度算法时,进程的运行时间以时间片为单位进行计算。 4.每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种 状态之一。 5.每进行一次调度,程序都要输出一次运行结果:正在运行的进程、就绪队列中的进 程、完成的进程以及各个进程的PCB,以便进行检查。 6.最后计算各调度算法的平均周转时间,并进行比较、分析。 3. 实验内容 a.算法原理 (1)短进程优先调度算法 “短进程优先”调度算法的基本思想是把CPU分配给就绪队列中需要时间最短的进程。 (2)时间片轮转算法 将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU 分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU。 (3)高响应比优先算法 HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。

面向对象程序设计课后答案完整版

第二章2-4 #include using namespace std; Add(int a,int b); int main() { int x,y,sum; cout<<"please input x and y:"; cin>>x>>y; sum = add(x,y); cout < using namespace std; int main() {

int *p,*init; int countp=0; int countn=0; p = new int[20]; init = p; for(int i=0;i<20;i++) { cin>>*p; p++; } p = p-20; for( i=0;i<20;i++) { if(*p>0) countp++; if(*p<0) countn++; cout<<*p<<" "; p++; } cout<<"正数有:"< //#include using namespace std; void checkagescore(string name,int age) { if (name == "exit") throw name; if(age<0||age>50) throw age;

实验2 交互式SQL_参考答案

实验2 交互式SQL (参考答案,仅供参考,答案不唯一) 1.使用SQL语言创建下面的三个表 create table Student( Sno varchar(7) primary key, Sname varchar(10) not null, Ssex varchar(2), Sage int, Sdept varchar(20) ) create table Course( Cno varchar(10) primary key, Cname varchar(20) not null, Ccredit int, Semster int, Period int ) create table SC( Sno varchar(7), Cno varchar(10), Grade int , XKLB varchar(4), primary key(Sno,Cno), foreign key(Sno) references Student(Sno), foreign key(Cno) references Course(Cno) ) 2.在以上的三个表中,使用SQL语句插入下面的数据 insert into Student values('9512101','李勇','男','19','计算机系'); insert into Student values('9512102','刘晨','男','20','计算机系'); insert into Student values('9512103','王敏','女','20','计算机系'); insert into Student values('9521101','张立','男','22','信息系'); insert into Student values('9521102','吴宾','女','21','信息系'); insert into Student values('9521103','张海','男','20','信息系'); insert into Student values('9531101','钱小平','女','18','数学系'); insert into Student values('9531102','王大力','男','19','数学系'); insert into Course values('C01','计算机文化基础',3,1,null);

操作系统原理实验报告(终版)

操作系统原理实验报告(终版)

————————————————————————————————作者:————————————————————————————————日期:

[键入文字] XX学校 实验报告 课程名称: 学院: 专业班: 姓名: 学号: 指导教师: 2011 年3 月

目录 实验1 进程管理 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验要求 (3) 四、程序说明和程序流程图 (4) 五、程序代码 (5) 六、程序运行结果及分析 (7) 七.指导教师评议 (8) 实验2 进程通信 (9) 一、实验目的 (9) 二、实验内容 (9) 三、实验要求 (9) 四、程序说明和程序流程图 (9) 五、程序代码 (11) 七.指导教师评议 (14) 实验3 存储管理 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验要求 (15) 四、程序说明和程序流程图 (16) 六、程序运行结果及分析 (23)

七.指导教师评议 (23) 实验4 文件系统 (24) 一、实验目的 (24) 二、实验内容 (24) 三、实验要求 (24) 四、程序说明和程序流程图 (24) 五、程序代码 (26) 六、程序运行结果及分析 (26) 七.指导教师评议 (27)

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

相关文档
最新文档