北京理工大学珠海学院实验报告
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级:13级计算机3班 学号:130201031037 姓名:郑永雄 指导教师:谭忠兵
实验题目:类和对象 实验时间:20##-04-09 成绩:
一、实验内容
程序1.声明一个日期类,日期的属性有年、月和日。方法有构造函数、析构函数、日期的显示。要求使用构造函数的重载,分别定义无参构造函数(使年月日的值分别为20##、1、1)和有参构造函数,并编写程序测试日期类。
程序2.创建一个Employee类,该类中有字符数组,表示姓名、街道地址、邮政编码。其功能有修改姓名、显示输出数据。要求函数放在类定义中,构造函数初始化每个成员,显示信息函数要求把对象中的完整信息打印出来。
程序3.建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。
程序4.定义一个复数类,要求定义构造函数和析构函数,并能够为用户提供复数的加法和减法运算。编写程序测试复数类。
程序5.定义一个矩形类。矩形的属性是左上角的顶点、长和宽,方法有构造函数、析构函数、显示、移动等。编写程序测试矩形类。
二、问题分析(类的数据成员、成员函数等的确定,对象的创建等)
程序1:首先声明一个日期类date,日期的属性(数据成员)有年year、月month和日day。成员函数是构造函数date、析构函数、日期的显示show()。在主函数中使用构造函数的重载,分别定义无参构造函数(使年月日的值分别为20##、1、1)和有参构造函数,并调用输出成员函数显示结果。
程序:2:首先创建一个Employee类,该类中有数据成员字符数组,表示姓名name、街道地址stree、邮政编码num。成员函数有修改姓名setname、显示输出数据show。在主函数中用构造函数初始化每个成员,调用显示信息函数把对象中的完整信息打印出来。
程序3:首先定义类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径r和高度h。用类cylinder计算圆柱的体积,并存储在一个double变量v中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。
程序:4:首先定义一个复数类complex,并定义构造函数和析构函数,设置成员函数set()为用户提供复数的加法和减法运算。并用输出函数print输出结果。
程序:5:定义一个矩形类。矩形的数据成员是左上角的顶点(x,y)、长long和宽wide,并定义构造函数、析构函数、还有成员函数print显示、move移动等。
三、程序实现(完整程序)
第一题:
#include<iostream>
using namespace std;
class Date
{
private:
int year,month,day;
public:
Date()
{
year=2013;
month=1;
day=1;
}
Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
~Date()
{
cout<<"析构函数"<<endl;
}
void show()
{
cout<<"显示日期"<<year<<"."<<month<<"."<<day<<endl;
}
};
int main()
{
Date a;
a.show();
Date b(2014,4,10);
b.show();
getchar();
getchar();
return 0;
}
第二题
#include<iostream>
#include<cmath>
using namespace std;
class Employee{
private:
char *name,*stree;
int post;
public:
Employee(char *x,char *y,int z)
{
strcpy(name,x);
strcpy(stree,y);
post=z;
}
void setname(char *a)
{
strcpy(name,a);
}
void Print_employee()
{
cout<<name[10]<<" "<<stree[50]<<" "<<post<<endl;
}
};
int main()
{
Employee m("ben","zhbit",519000);
char *b;
cin>>b;
m.setname(b);
m.Print_employee();
return 0;
}
第三题:
#include<iostream>
#include<cmath>
using namespace std;
class cylinder
{
private:
double radius,high;
public:
cylinder(double h,double r)
{
radius=r;
high=h;
}
double jisuan()
{
double v,pi=3.14159262;
v=pi*radius*radius*high;
return v;
}
void vol(double m)
{
cout<<"体积="<<m<<endl;
}
};
int main()
{
cylinder m(2,2);
double n;
n=m.jisuan();
m.vol(n);
getchar();
getchar();
return 0;
}
第四题:
#include<iostream>
#include<cmath>
using namespace std;
class Complex
{
private:
double real,imag;
public:
Complex(double r,double i)
{
real=r;
imag=i;
}
~Complex()
{
cout<<"析构函数"<<endl;
}
void jisuan(double x,double y)
{
real=real+x;
imag=imag+y;
}
void show()
{
cout<<"复数:"<<real<<"+"<<imag<<"i"<<endl;
}
};
int main()
{
Complex m(5,7);
m.jisuan(2,2);
m.show();
getchar();
getchar();
return 0;
}
第五题:
#include<iostream>
#include<cmath>
using namespace std;
class Rectangle
{
private:
double x,y,lond,wide;
public:
Rectangle(double a,double b,double c,double d)
{
x=a;
y=b;
lond=c;
wide=d;
}
~Rectangle()
{
cout<<"析构函数"<<endl;
}
void jisuan(double a,double b)
{
x=a+x;
y=b+y;
}
void show()
{
cout<<"左上角坐标"<<"("<<x<<","<<y<<")"<<endl;
cout<<"右上角坐标"<<"("<<x+lond<<","<<y<<")"<<endl;
cout<<"左下角坐标"<<"("<<x<<","<<y+wide<<")"<<endl;
cout<<"右下角坐标"<<"("<<x+lond<<","<<y+wide<<")"<<endl;
}
};
int main()
{
Rectangle n(0,4,5,3);
cout<<"显示矩形:"<<endl;
n.show();
cout<<"移动矩形"<<endl;
n.jisuan(2,2);
n.show();
getchar();
getchar();
return 0;
}
四、调试与运行
程序1:
程序2:
程序3:
程序4:
程序5:
五、实验总结:
1、学到了构造函数的构建,还有析构函数,成员函数等。通过对象调用成员函数实现某些功能。还有学会了运用string函数,简化了程序。
2、遇到了什么问题,如何解决的。
在运用new分配空间时,发现自己对字符串的知识忘记了很多。后来发现后面学习的string类很好用,可以简化程序。总的来说第一次试验都比较简单,做的比较顺利。
3、实验中需要特别注意什么,有哪些细节和技巧。
做实验前要熟悉试验运用的知识,写程序前最好先构思好再写。构造函数要注意没有返回类型的,可以有形参,而析构函数是没有参数的。
第二篇:面向对象程序设计实验报告
面向对象的程序设计实验
实验一 C#概述
一、实验目的
1. 熟悉Visual C#.NET集成开发环境。
2. 掌握控制台应用程序的开发方法。
3. 掌握Windows应用程序的开发方法。
二、实验要求
1. 整理上机步骤,总结经验和体会。
2. 完成实验日志和上交程序。
三、实验内容
题目一:最简单C#程序的开发
(1) 观察对话框的内容。在“项目类型”列表框中选中Visual C#选项;在“模板”列表框中选中“控制台应用程序”选项;在“名称”文本框中输入项目名称;在“位置”文本框中输入或选择项目的保存位置。单击“确定”按钮,将显示控制台应用程序代码编辑窗口,在该窗口内显示系统自动生成的相应代码。仔细观察并分析这些代码。
(2) 在代码编辑窗口内的Main()方法中添加如下代码:
using System;
namespace hello
{
class HelloWorld
{
public static void Main()
{
Console.WriteLine("Hello world!");
}
}
}
(1) F5】键,或单击工具栏上的
按钮,运行程序,查看运行结果。
(2) 在项目的保存位置处查看项目中过的所有文件。
题目二:创建控制台应用程序
(1) 选择Microsoft Visual Studio 2005 “Microsoft
Visual Studio 2005”命令,启动Visual Studio 2005,并仔细观察起始页的内容。
(2) “项目”命令,弹出“新建项目”对话框。仔
细观察对话框的内容。在“项目类型”列表框中选中Visual C#选项;在“模板”列表框中选中“控制台应用程序”选项;在“名称”文本框中输入项目名称;在“位置”文本框中输入或选择项目的保存位置。单击“确定”按钮,将显示控制台应用程序代码编辑窗口,在该窗口内显示系统自动生成的相应代码。仔细观察并分析这些代码。
(3) 在代码编辑窗口内的Main()方法中添加如下代码:
Console.Write("当前系统的日期为:");
//将系统的日期转换为长日期字符串表示形式进行输出
Console.WriteLine(DateTime.Now.ToLongDateString());
Console.Read();
(4) “全部保存”命令,保存项目。
(5) 选择“调试”“开始执行(不调试)”命令或按【Ctrl+F5】组合键运行程
序,并观察运行情况。
(6) 在项目的保存位置处查看项目中过的所有文件。
实验二 C#数据类型
一、实验目的
1. 了解C#中的各种数据类型及其相互转换方法。
2. 了解C#中的常量和变量。
3. 掌握C#中的常用的操作符与表达式。
4. 进一步熟悉C#程序的开发过程。
5. 掌握C#中选择结构语句的使用。
6. 掌握C#中循环结构语句的使用。
7. 掌握C#中的跳转结构语句。
二、实验要求
1. 分析程序,上机验证结果。
2. 写出程序,并调试程序,要给出测试数据和实验结果。
3. 整理上机步骤,总结经验和体会。
4. 完成实验日志和上交程序。
三、实验内容
题目一:程序分析
(1) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
public class BoolTest
{
public static void Main()
{
Console.Write("请输入一个字符: ");
char c = (char) Console.Read();
if (Char.IsLetter(c))
if (Char.IsLower(c))
Console.WriteLine("字符是小写的。"); else
Console.WriteLine("字符是大写的。"); else
Console.WriteLine("字符不是字母。");
}
}
(2) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
class test
{
public static void Main()
{
string a = "\u0068ello ";
string b = "world";
Console.WriteLine( a + b );
Console.WriteLine( a + b == "hello world" );
}
}
(3) 分析程序,写出程序的运行结果,并上机进行验证。
using System;
namespace _1
{
class Program
{
static void Main()
{
int a = 10;
Console.WriteLine("a={0}", a);
int b = new int();
Console.WriteLine("1:b={0}", b);
b = 10;
Console.WriteLine("2:b={0}", b);
Int32 c = 10;
Console.WriteLine("c={0}", c);
Int32 d = new Int32();
Console.WriteLine("1:d={0}", d);
d = 10;
Console.WriteLine("2:d={0}", d);
Console.WriteLine("int:{0}~~{1}", int.MinValue,int.MaxValue); Console.Read();
}
}
}
(4) 分析程序,写出程序的运行结果,并上机进行验证。
using System;
namespace _1
{
class Program
{
static void Main()
{
char c1 = 'a';
char c2 = '\x0062';
char c3 = '\u0063';
Console.WriteLine("c1:{0}\nc2:{1}\nc3:{2}\n",c1,c2,c3); Console.Read();
}
}
}
(5) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
namespace _1
{
class Program
{
enum WeekDay { sun,mon,tue,wed,thu,fri,sat}
static void Main()
{
WeekDay a = WeekDay.sun;
Console.WriteLine(a);
WeekDay b = (WeekDay)4;
Console.WriteLine(b);
Console.Read();
}
}
}
(6) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
int[][] jagArray=new int[2][]{new int[5],new int[3]}; for (int i = 0; i < jagArray.GetLength(0); i++) {
for (int j = 0; j < jagArray[i].Length; j++) jagArray[i][j] = i + j;
}
for (int k = 0; k < 2;k++)
{
Console.WriteLine("jagArray[{0}]:",k);
for(int m=0;m<jagArray[k].Length;m++)
Console.Write("{0,-3}",jagArray[k][m]); Console.WriteLine();
}
Console.Read();
}
}
}
(7) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
object x;
x = 1;
Console.WriteLine("1:x={0},type is {1};",x,x.GetType()); x = 10.01;
Console.WriteLine("2:x={0},type is {1};", x, x.GetType()); x = '\u0061';
Console.WriteLine("3:x={0},type is {1};", x, x.GetType()); x = "Hello!";
Console.WriteLine("4:x={0},type is {1};", x, x.GetType()); Console.Read();
}
}
}
(8) 分析程序,写出程序的运行结果,并上机进行验证。 using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
Console.Write("请输入1-12之间的任意一个整数:"); string s=Console.ReadLine();
int month =int .Parse(s);
switch(month)
{
case 1:Console.WriteLine("January");break;
case 2:Console.WriteLine("February");break; case 3:Console.WriteLine("March");break;
case 4:Console.WriteLine("April");break;
case 5:Console.WriteLine("May");break;
case 6:Console.WriteLine("June");break;
case 7:Console.WriteLine("July");break;
case 8:Console.WriteLine("August");break;
case 9:Console.WriteLine("September");break; case 10:Console.WriteLine("October");break;
case 11:Console.WriteLine("Noveber");break;
case 12:Console.WriteLine("December");break;
default:Console.WriteLine("输入错误,转换失败。");break; }
Console.Read();
}
}
}
(9)分析程序,写出程序的运行结果,并上机进行验证。
using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
int[,] a = new int[5, 5];
a[0, 0] = 1;
for (int i = 1; i < 5; i++)
{
a[i, 0] = 1;
a[i, i] = 1;
for (int j = 1; j < i; j++)
a[i, j] = a[i - 1, j - 1] + a[i - 1, j];
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j <= i;j++ )
Console.WriteLine("{0}\t", a[i, j]);
Console.WriteLine();
}
Console.Read();
}
}
}
(10)分析程序,写出程序的运行结果,并上机进行验证。
using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
int odd = 0, even = 0;
int[] array = new int[] { 0, 4, 7, 8, 9, 10, 14, 17, 19, 24, 56 }; foreach (int i in array)
{
if (i % 2 == 0)
even++;
else
odd++;
}
Console.WriteLine("{0}个奇数,{1}个偶数", odd, even);
}
}
}
(11)分析程序,写出程序的运行结果,并上机进行验证。
using System;
public class TestDoWhile
{
public static void Main ()
{
int x;
int y = 0;
do
{
x = y++;
Console.WriteLine(x);
}
while(y < 5);
}
}
(12)分析程序,写出程序的运行结果,并上机进行验证。
using System;
namespace _1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("---break---");
for (int i = 0; i < 10; i++)
{
if (i == 5) break;
Console.WriteLine("i is " + i);
}
Console.WriteLine("---continue---");
for (int i = 0; i < 10; i++)
{
if (i == 5) continue;
Console.WriteLine("i is " + i);
}
Console.Read();
}
}
}
题目二:程序编写
(1) 编写程序,定义一个包括学生基本资料的结构类型数据(要求包括学号、姓名、
性别、年龄、家庭住址等),并对其进行测试。
(2) 编写程序,将一年中的12个月建立一个枚举类型,并对其进行测试。
(3) 编写程序,使用int类型数据进行装箱与拆箱转换。
(4) 编写程序,分别用for、while、do…while语句实现求前n个自然数之和。
(5) 编写程序,输出九九乘法表。
实验三 C#面向对象程序设计
一、实验目的
1.理解C#语言是如何体现面向对象编程基本思想。
2.掌握类对象的定义。
3.了解类的封装方法,以及如何创建类和对象。
4.了解成员变量和成员方法的特性。
5.掌握静态成员的用法。
二、实验要求
1. 分析程序,上机验证结果。
2. 写出程序,并调试程序,要给出测试数据和实验结果。
3. 整理上机步骤,总结经验和体会。
4. 完成实验日志和上交程序。
三、实验内容
题目一:程序分析
(1)分析下面两个程序,确定那个程序好,说明理由。 程序要求:定义一个圆类,计算圆的面积和周长。 程序1:
public class circle
{
public static void Main()
{
double radium, delimeter, square;
const double pai = 3.1415926;
radium = Convert.ToInt32(Console.ReadLine());
delimeter = 2 * pai * radium;
square = pai * pai * radium;
Console.WriteLine("delimeter={0},square={1}", delimeter, square); Console.ReadLine();
}
}
程序2:
public class circle
{
double delimeter, square;
const double pai = 3.1415926;
public void calculate(double rad)
{
delimeter = 2 * pai * rad;
square = pai * pai * rad;
Console.WriteLine("delimeter={0},square={1}",delimeter,square);
}
public static void Main()
{
double radium;
circle cir = new circle();
radium = Convert.ToInt32(Console.ReadLine());
cir.calculate(radium);
Console.ReadLine();
}
}
(2)分析程序,写出程序的运行结果,并上机进行验证。 Using System;
public class students
{
string id,name;
int age;
public students(string id,string name,int age )
{
this.id = id;
this.name = name;
this.age = age;
}
public void Display()
{
Console.WriteLine("id={0},name={1},age={2}",id,name,age); }
public static void Main()
{
//string id, name;
//int age;
students stu = new students("0001","zhangsan",16); stu.Display();
Console.ReadLine();
}
}
(3)分析程序,写出程序的运行结果,并上机进行验证。 public class Date
{
private int Year, Month, Day;
public Date(int Year, int Month,int Day)
{
this.Year=Year;
this.Month=Month;
this.Day=Day;
}
public Date(System.DateTime dt)
{
Year = dt.Year;
Month = dt.Month;
Day = dt.Day;
}
public void DisplayDate()
{
Console.WriteLine("{0}年{1}月{2}日",Year,Month,Day);
}
}
public class Tester
{
public static void Main()
{
System.DateTime currentTime=System.DateTime.Now;
Date dt=new Date(2008,7,18);
dt.DisplayDate();
Date dt2 = new Date(currentTime);
dt2.DisplayDate();
Console.ReadLine();
}
}
题目二:程序编写
(1) 实现一个包含类属性方法的简单加法程序,并能显示结果。
(2) 实现一个Person类,要求:属性包含姓名、年龄、身份证号、工作、工资等,并
显示各属性的值。
实验四 C#面向对象程序设计(二)
一、实验目的
1. 掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数。
2. 理解类的成员的访问控制的含义,公有、私有和保护成员的区别。
3. 掌握参数传递的用法。
4. 掌握属性的作用和使用。
二、实验要求
1. 分析程序,上机验证结果。
2. 写出程序,并调试程序,要给出测试数据和实验结果。
3. 整理上机步骤,总结经验和体会。
4. 完成实验日志和上交程序。
三、实验内容
题目一:程序分析
(1) 分析程序,写出程序的运行结果,并上机进行验证,然后回答后面问题。 public class BankAccount
{
static int totalAccountNumber=0;
string BankAccountId;
double initialDepositAmount = 0.00;
public BankAccount(string myId)
{
this.BankAccountId = myId;
this.initialDepositAmount = 0.00;
totalAccountNumber++;
}
public void displayid()
{
Console.WriteLine("mbaid={0},initialDepositAmount={1}",this.BankAccountId,this.initialDepositAmount);
}
public static void display()
{
Console.WriteLine("totalAccountNumber={0}", totalAccountNumber);
}
}
public class Tester
{
public static void Main()
{
BankAccount mba = new BankAccount("37000001");
BankAccount mba2 = new BankAccount("3700002");
BankAccount mba3 = new BankAccount("");
BankAccount mba4 = new BankAccount("3700004");
// Console.WriteLine("mba2ID={0}", mba2.BankAccountId);
mba2.displayid();
BankAccount.display();
Console.ReadLine();
}
}
请回答问题:
(1)按你自己的算法修改以上程序,比如可只输出生成的账户数。
(2)把注释去掉后会怎样,为什么?
(3)为什么display 用类名直接引用,可以用对象来引用么?尝试输出结果。
(4)类的静态变量和非静态变量的引用区别。判断一下语句的正确性:
静态方法只能使用静态变量,不能使用实例变量。因为对象实例化之前,实例变量不可用。这个观点真确么?()
类的静态变量只有一个版本,所有实例对象引用的都是同一个版本。()
对象实例化后,每个实例变量都被制作了一个副本,它们之间互不影响。()
题目二:程序编写
1. 编写一个传值调用的程序。
程序功能要求:程序首先给整型变量x 和y 赋初值3,5,然后使用传值调用方式调用方法对x 和y 做乘方并及输出x 和y 的乘方值,最后输出x和y得值。再将此方法给为对象调用加ref修饰查看输出结果差异。
【思考题】
1. 方法的参数传递有哪些方式?区别时什么?
2. 什么是构造方法。
实验五:创建Windows应用程序
一、实验目的
1.了解C#中的各种控件的属性赋值方法。
2.了解C#中控件的事件中输出的方法。
3.进一步熟悉C#程序的开发过程。
二、实验要求
1. 分析程序,上机验证结果。
2. 写出程序,并调试程序,要给出测试数据和实验结果。
3. 整理上机步骤,总结经验和体会。
4. 完成实验日志和上交程序。
三、实验内容
(3) 从开始菜单启动Visual Studio 2005。
(4)
“项目”命令,弹出“新建项目”对话框。在
“项目类型”列表框中选中Visual C#选项;在“模板”列表框中选中“Windows应用程序”选项;在“名称”文本框中输入项目名称;在“位置”文本框中输入或选择项目的保存位置。单击“确定”按钮,将显示窗口设计器窗口。
(5) 切换到“属性”窗口、“解决方案资源管理器”窗口和“类视图”窗口,查看
窗体的属性、项目的组成结构以及项目所设计的所有类。
(6) 双击打开“解决方案资源管理器”窗口中的各个文件,在代码编辑器窗口内查
看系统自动生成的与该项目有关的代码。
(7) 体。
(8) 在窗体上添加一个PictureBox控件和两个Button控件。设置窗体和各控件的
属性,如表1-1所示。
(9) 调整窗体大小以及各个控件的位置,如图1-1所示。
图1-1 调整控件位置后的界面
(10) 双击Button1按钮,在其Click事件内添加代码:
Graphics g = this.pictureBox1.CreateGraphics();
Pen p1 = new Pen(Color.Red, 5);
g.DrawRectangle(p1, 80, 50, 100, 50);
(11) 双击Button1按钮,在其Click事件内添加代码:
if (MessageBox.Show("你确定要退出吗?", "请确认...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
Application.Exit(); //退出应用程序
(12) F5】键,或单击工具栏上的
按钮,运行程序,查看运行结果。
(13) 在项目的保存位置处查看项目中过的所有文件。