C++程序设计上机实验讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结合上机的体会,回答下列问题.
(1)C++引入了I/O流运算符,与C语言相比,它们好处是什么?
(2)引用是C++的很重要的功能,在函数定义中,如何使用引用?
(3)函数重载设计不当会产生二义性问题,二义性主要体现在参数隐式类型转换和默认参数两个方面,举例说明两个问题,你认为该如何解决。
(4)C++中define与const定义常量有什么区别?
2)在1)的基础上编写应用程序,创建3个对象,然后显示他们的数据成员和静态成员,再析构每个对象,并显示他们对静态数据成员的影响。
3)修改2),让静态成员函数访问静态数据成员,并让静态数据成员是私有的。
(6)两个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。
如:
class Intset
1、实验目的和要求:
掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行时间,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。
2、实验内容:
(1)定义一个时间类Time,它能提供由时、分、秒组成的时间。要求能够修改时间和打印出时间。
(本题目主要练习静态数据成员的使用,定义私有变量存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对象完成初始化的功能和删除对象时,从总重量和总价钱中减去对象的重量和价格)
(5)静态成员练习
1)编写一个类Node,声明一个数据成员member和已经静态成员count,另构造函数初始化数据成员,并把静态数据成员加1,另析构函数把静态数据成员减1。
用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。
求和工作不要在链表类中完成,以使该链表类具有通用性。
(9)设计合适的类结构,完成多项式加、减、乘运算。
3、思考题:
结合编程实践回答下列的问题。
C++程序设计实验讲义
软件学院
实验
1.实验目的和要求
目的:快速掌握C++语言编程的方法,了解C++的增强功能,主要内容有:(1)输入流、输出流的使用;(2)重载、默认参数;(3)引用;(4)new和delete运算符分配内存。
2.实验内容:
(1)编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如:23+123=146。
请分别完成两个程序。
(7)分析以下程序的功能,把程序用三种方法(公有数据成员、友元、用成员函数访问私有数据成员)补充完整,实现对对象Animal的成员
#include <iostream.h>
class Animal;
void SetValue(Animal&, int);
void SetValue(Animal&, int, int);
{
x=p->x ;
y=p->y ;
cout<< "Fun (Point *p) "<<endl ;
}
Void main()
{
Point p(1,2),q(3,4) ;
p.fun(q) ;
q.fun(&q) ;
}
改正程序中小的错误,给出程序运行的结果,并对程序进行分析。
3、思考题:
结合编程实践回答下列的问题。
static int m_counter;
public:
A();
~A();
static void display();
}
——————————//将m_counter初始化为0;
A::A()
{
m_counter++;
}
A::~A()
{
m_counter--;
}
void A::display()
{
cout<<”There are:”<<A::m_counter<<”objects of class A.\n”;
{ private:
int num[3];
public:
Intset ( int x,int y, int z)
{//添加初始化内容}
void print( )
{ //打印数据}
};
class floatset
{ private:
float num[3];
public:
floatset ( float x,float y, float z)
[学生的生日可以用随机数产生,rand()产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(long int *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子,以上函数需要包含头文件stdlib.h]
3.思考题:
(4)掌握友元函数和友元类的使用方法
2、实验内容:
(1)有如下类的定义。类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。(有两种方法即不用this指针和用this指针)
#include <iostream.h>
class Myclass
{public:
Myclass (int a,int b) { x=a;y=b;}
int m; //分母
int n; //分子
};
(5)定义一个类包含一个整型数的指针变量,在构造函数中用new分配10个整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出的成员函数。
(6)完成String类
class String
{
public:
String(const char *str = NULL);//普通构造函数
{
//添加初始化内容
}
void print( )
{ //打印数据
}
};
(1)在Intset中再增加一个成员函数,将对象的整型数据拷贝的到floatset的对象中此成员函数的原型为:
void settofloat(floatset &set);//形参为拷贝的目标对象
(2)定义一个友元函数来实现上述的功能。
(5)假设我们班有50名同学,每个同学都报出自己的生日,每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.072510-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法,利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
{
x=a;y=b;
}
void fun (Point &p);
void fun (Point * p);
private:
int x,y;
};
void fun (Point &p)
{
x=p.x ;
y=p.y ;
cout<< "The fun(Point &p) "<<endl ;
}
void Point:: fun (Point *p)
(2)编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员的值。
(3)设计一个时间类,要求包含以下功能:
数据成员:时、分、秒
成员函数:
各种重载构造函数
析构函数
可以通过函数分别设置时间的各个组成部分
也可以整体设置时间
void copy(Myclass & my);
void print( )
{ cout<<“x=”<<x<<endl;
cout<<”y=”<<y<<endl;
}
private:
int x,y;
};
void main()
{ Myclass my(10,20),t(30,40);
my.print( );
(2)用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。
(3)编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?
(4)在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数void swap(int & x, int & y)中实现将数据交换存放,并在主函数中打印出来。
}
int main()
{wenku.baidu.com
A a1;
A a2;
A a3;
A::display();
a1.display();
}
(4)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。
{
//设置itsWeight值
}
void SetValue(Animal& ta, int tw, int tn)
{
//设置itsWeight和itsAge值
}
int main()
{
Animal peppy;
SetValue(peppy, 5);
peppy.show();
SetValue(peppy, 7, 9);
peppy.show();
return 0;
}
(8)设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点操作,则类必须给出错误信息。
编写应用程序,取100次随机数(范围10-200),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。
{
public:
Array(); //所有数组元素初始化为0
int& getData(int i);//返回下标为i的数组元素的引用
void print(); //打印出所有数组元素的值
void input(); //对所有数组元素进行输入
private:
int m_data[10];
};
完成Array的成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。
(1)结合第一个例子,说明什么是类?什么是对象?你是如何理解类和对象的?
(2)面向对象的程序设计与结构化程序设计有何不同?
(3)拷贝构造函数那些情况下会被调用,分别给出例子?
1、实验目的和要求:
(1)掌握显式使用this指针的方法
(2)掌握静态数据成员的意义及使用方法
(3)掌握常量数据成员和常量成员函数的意义和使用方法
(8)定义圆类(由圆心坐标点类和半径组成),利用友元函数判断两个圆的位置关系(圆间关系包括相交、相切、相离)。
(9)定义类Point.要求定义类对象时,可以有这样的定义语句:
Point p1(1,2),p2(p1);
#include <iostream.h>
class Point
{
public:
Point (int a, int b)
有一个tick函数,负责给当前时间加1秒钟,然后输出新的时间
(4)定义一个分数类如下,要求实现各个成员函数,并在主函数中测试两个分数的加减乘除等运算。
class Rational
{
public:
Rational(int nn=1,int mm=1);//构造函数
Rational R_add(Rational & A);//加
my.copy(t);
my.print( );
}
(2)设计一个类,实现两个复数的四则运算。实现加减乘除功能的函数用友元函数实现。
(3)分析下面程序,给出横线部分的语句,写出程序的输出结果并分析m_count的功能。
#include <iostream>
usingnamespace std;
classA {
Rational R_sub(Rational & A);//减
Rational R_mul(Rational & A);//乘
Rational R_div(Rational & A);//除
void print();//以简分数形式显示,注意约分
private:
void simple( );//约分
String(const String &other);//拷贝构造函数
~ String();//析构函数
private:
char *m_data; //用于保存字符串
};
完成String的3个成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。
(7)完成Array类
class Array
class Animal
{
public:
Animal():itsWeight(0),itsAge(0){}
void show(){cout<<itsWeight<<endl<<itsAge<<endl;}
protected:
int itsWeight;
int itsAge;
};
void SetValue(Animal& ta, int tw)
(1)C++引入了I/O流运算符,与C语言相比,它们好处是什么?
(2)引用是C++的很重要的功能,在函数定义中,如何使用引用?
(3)函数重载设计不当会产生二义性问题,二义性主要体现在参数隐式类型转换和默认参数两个方面,举例说明两个问题,你认为该如何解决。
(4)C++中define与const定义常量有什么区别?
2)在1)的基础上编写应用程序,创建3个对象,然后显示他们的数据成员和静态成员,再析构每个对象,并显示他们对静态数据成员的影响。
3)修改2),让静态成员函数访问静态数据成员,并让静态数据成员是私有的。
(6)两个类分别为整型数集合类和实型数集合数类。将缺少的内容补齐。并完成要求的其它内容。
如:
class Intset
1、实验目的和要求:
掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行时间,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。
2、实验内容:
(1)定义一个时间类Time,它能提供由时、分、秒组成的时间。要求能够修改时间和打印出时间。
(本题目主要练习静态数据成员的使用,定义私有变量存每件货物的价格和重量,用静态数据成员存货物的总重量和总价钱,定义构造函数和析构函数,当定义新的对象完成初始化的功能和删除对象时,从总重量和总价钱中减去对象的重量和价格)
(5)静态成员练习
1)编写一个类Node,声明一个数据成员member和已经静态成员count,另构造函数初始化数据成员,并把静态数据成员加1,另析构函数把静态数据成员减1。
用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。
求和工作不要在链表类中完成,以使该链表类具有通用性。
(9)设计合适的类结构,完成多项式加、减、乘运算。
3、思考题:
结合编程实践回答下列的问题。
C++程序设计实验讲义
软件学院
实验
1.实验目的和要求
目的:快速掌握C++语言编程的方法,了解C++的增强功能,主要内容有:(1)输入流、输出流的使用;(2)重载、默认参数;(3)引用;(4)new和delete运算符分配内存。
2.实验内容:
(1)编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如:23+123=146。
请分别完成两个程序。
(7)分析以下程序的功能,把程序用三种方法(公有数据成员、友元、用成员函数访问私有数据成员)补充完整,实现对对象Animal的成员
#include <iostream.h>
class Animal;
void SetValue(Animal&, int);
void SetValue(Animal&, int, int);
{
x=p->x ;
y=p->y ;
cout<< "Fun (Point *p) "<<endl ;
}
Void main()
{
Point p(1,2),q(3,4) ;
p.fun(q) ;
q.fun(&q) ;
}
改正程序中小的错误,给出程序运行的结果,并对程序进行分析。
3、思考题:
结合编程实践回答下列的问题。
static int m_counter;
public:
A();
~A();
static void display();
}
——————————//将m_counter初始化为0;
A::A()
{
m_counter++;
}
A::~A()
{
m_counter--;
}
void A::display()
{
cout<<”There are:”<<A::m_counter<<”objects of class A.\n”;
{ private:
int num[3];
public:
Intset ( int x,int y, int z)
{//添加初始化内容}
void print( )
{ //打印数据}
};
class floatset
{ private:
float num[3];
public:
floatset ( float x,float y, float z)
[学生的生日可以用随机数产生,rand()产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(long int *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子,以上函数需要包含头文件stdlib.h]
3.思考题:
(4)掌握友元函数和友元类的使用方法
2、实验内容:
(1)有如下类的定义。类成员函数copy用于实现两个对象的相互拷贝,请完成该函数的实现。(有两种方法即不用this指针和用this指针)
#include <iostream.h>
class Myclass
{public:
Myclass (int a,int b) { x=a;y=b;}
int m; //分母
int n; //分子
};
(5)定义一个类包含一个整型数的指针变量,在构造函数中用new分配10个整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出的成员函数。
(6)完成String类
class String
{
public:
String(const char *str = NULL);//普通构造函数
{
//添加初始化内容
}
void print( )
{ //打印数据
}
};
(1)在Intset中再增加一个成员函数,将对象的整型数据拷贝的到floatset的对象中此成员函数的原型为:
void settofloat(floatset &set);//形参为拷贝的目标对象
(2)定义一个友元函数来实现上述的功能。
(5)假设我们班有50名同学,每个同学都报出自己的生日,每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.072510-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法,利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
{
x=a;y=b;
}
void fun (Point &p);
void fun (Point * p);
private:
int x,y;
};
void fun (Point &p)
{
x=p.x ;
y=p.y ;
cout<< "The fun(Point &p) "<<endl ;
}
void Point:: fun (Point *p)
(2)编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员的值。
(3)设计一个时间类,要求包含以下功能:
数据成员:时、分、秒
成员函数:
各种重载构造函数
析构函数
可以通过函数分别设置时间的各个组成部分
也可以整体设置时间
void copy(Myclass & my);
void print( )
{ cout<<“x=”<<x<<endl;
cout<<”y=”<<y<<endl;
}
private:
int x,y;
};
void main()
{ Myclass my(10,20),t(30,40);
my.print( );
(2)用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入33整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。
(3)编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?
(4)在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数void swap(int & x, int & y)中实现将数据交换存放,并在主函数中打印出来。
}
int main()
{wenku.baidu.com
A a1;
A a2;
A a3;
A::display();
a1.display();
}
(4)商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,单价不一样,因此商店需要记录下目前库存的货物的总重量和总价值。编写一个程序,通过定义类Carlo来模拟商店货物购进和卖出的情况。
{
//设置itsWeight值
}
void SetValue(Animal& ta, int tw, int tn)
{
//设置itsWeight和itsAge值
}
int main()
{
Animal peppy;
SetValue(peppy, 5);
peppy.show();
SetValue(peppy, 7, 9);
peppy.show();
return 0;
}
(8)设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点操作,则类必须给出错误信息。
编写应用程序,取100次随机数(范围10-200),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。
{
public:
Array(); //所有数组元素初始化为0
int& getData(int i);//返回下标为i的数组元素的引用
void print(); //打印出所有数组元素的值
void input(); //对所有数组元素进行输入
private:
int m_data[10];
};
完成Array的成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。
(1)结合第一个例子,说明什么是类?什么是对象?你是如何理解类和对象的?
(2)面向对象的程序设计与结构化程序设计有何不同?
(3)拷贝构造函数那些情况下会被调用,分别给出例子?
1、实验目的和要求:
(1)掌握显式使用this指针的方法
(2)掌握静态数据成员的意义及使用方法
(3)掌握常量数据成员和常量成员函数的意义和使用方法
(8)定义圆类(由圆心坐标点类和半径组成),利用友元函数判断两个圆的位置关系(圆间关系包括相交、相切、相离)。
(9)定义类Point.要求定义类对象时,可以有这样的定义语句:
Point p1(1,2),p2(p1);
#include <iostream.h>
class Point
{
public:
Point (int a, int b)
有一个tick函数,负责给当前时间加1秒钟,然后输出新的时间
(4)定义一个分数类如下,要求实现各个成员函数,并在主函数中测试两个分数的加减乘除等运算。
class Rational
{
public:
Rational(int nn=1,int mm=1);//构造函数
Rational R_add(Rational & A);//加
my.copy(t);
my.print( );
}
(2)设计一个类,实现两个复数的四则运算。实现加减乘除功能的函数用友元函数实现。
(3)分析下面程序,给出横线部分的语句,写出程序的输出结果并分析m_count的功能。
#include <iostream>
usingnamespace std;
classA {
Rational R_sub(Rational & A);//减
Rational R_mul(Rational & A);//乘
Rational R_div(Rational & A);//除
void print();//以简分数形式显示,注意约分
private:
void simple( );//约分
String(const String &other);//拷贝构造函数
~ String();//析构函数
private:
char *m_data; //用于保存字符串
};
完成String的3个成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。
(7)完成Array类
class Array
class Animal
{
public:
Animal():itsWeight(0),itsAge(0){}
void show(){cout<<itsWeight<<endl<<itsAge<<endl;}
protected:
int itsWeight;
int itsAge;
};
void SetValue(Animal& ta, int tw)