C++语言程序设计.doc_第1页
C++语言程序设计.doc_第2页
C++语言程序设计.doc_第3页
C++语言程序设计.doc_第4页
C++语言程序设计.doc_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+语言程序设计计算机与通信学院计算中心 C+程序设计实验指导书实验1 简单的C+程序1实验目的 学习完整的C+程序开发过程,包括程序的编辑、编译、连接、调试、运行 掌握C+程序的顺序结构 学习C+的数据类型,正确选择程序中变量或常量的数据类型 学习标准库函数的调用2实验内容写一个程序。输入一个圆筒的内径、外径和高。计算并输出其重量。已知圆筒的比重为5.0。3实验分析分析问题中的各个数据,哪些是常量,哪些是变量,输入什么,输出什么。怎样用C+写出求值表达式,不要一次写下整个表达式,要分步求解,选择适当的中间变量,写出可读性好、运行正确的程序。本程序的一次执行结果如下:input out r:25Input inside r:15Input height:20Weight is 1256644相关知识1、 根据需求选择各常量、变量的数据类型2、 各种类型的数据之间的相互转换3、 鍵盘输入使用标准输入流对象cin和提取运算符4、 屏幕显示使用标准输出流对象cout和插入运算符5、 Visual C+6.0编译系统界面5相近编程示例计算卫星高度。周期为T秒的人造地球卫星离地面的平均高度H的计算公式为: H=(6.6710-11MT 2 /(42 )1/3R其中:M=61024kg是地球质量, R=6.371106m是地球半径。试编制一个求H的程序。本题基本要求:准确使用C+库函数。因为要求X的Y次方,可能要用到的函数原型为: double pow(double X, double Y );这里参数Y表示次方。该函数在头文件math.h中声明。本题程序如下:#include #include using namespace std; int main() double t,M=6e+24,G=6.67e-11,R=6.371e+6,P=3.1415926;coutplz input Zhou Qi:t;P*=2;P=t/P;t=pow(P,2);t*=M;t*=G;t=pow(t,1.0/3);t-=R;coutGao du shi:tn;return 0;本程序的一次执行结果如下:(加下划线者为用户输入)T = ? 28800H = 1.39635e+007T = ? 86400H = 3.59265e+007实验2 选择结构1实验目的 理解程序的分支结构 学会正确使用关系表达式和逻辑表达式 掌握switch语句、三种形式的if语句的语法和使用方法 编制可读性好的程序2实验内容编写一个程序完成多个数连续相加减或连续相乘除的运算。3实验分析 处理过程使用switch语句。 输出中间结果。4相关知识1、 if语句的三种形式2、 if语句的嵌套3、 switch多分支语句4、 NS结构化流程图5相近编程示例编写程序求 S = z + x + y ex+y x 0, y 0z = e2x-y 0 x 1 , y 0 ln x x 1本题基本要求:处理过程使用if语句防止不在条件内的数据输入打开main.h头文件(它们在TC或BC目录下的INCLUDE子目录中),寻找要求的函数原型本题程序如下:#include #includeusing namespace std;void main()float x,y;cinxy; float S,z,a,b;a=x+y;if(x0&y0)z=exp(a);S=x+y+z;cout=0&x=0)b=2*x-y;z=exp(b);S=x+y+z;coutS;else z=log(x);S=x+y+z;coutS;本程序的一次执行结果如下:(加下划线者为用户输入)x= ? -1 y= ? -6 S=-6.999088x= ? -3.1 y= ? -2.5 S=-5.596032x= ? 0.6 y= ? -4.4 error!x= ? 0.7 y= ? 8 S=8.701361x= ? 3 y= ? -2 S=2.098612实验3 循环结构1实验目的 熟练地掌握while、do-while及for语句实现循环的方法 了解三种循环语句的区别和转换,各自的适应性,循环嵌套的使用 如何在循环语句中使用break和continue语句,改变程序流程 掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等) 掌握C+标准库函数的调用2实验内容编写一个程序打印如图3_01所示图形。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 图3_01 要求程序打印图形3实验分析该图形用一个for(i=0;i0;i-)语句完成从第6行到第9行的输出。这两个for循环中再嵌套for循环以实现各行的输出。4相关知识1、 while、do-while及for语句2、 break、continue语句3、 多重for循环4、 穷举法5、 源程序调试中的单步和断点运行5相近编程示例编写一个程序输出如下格式的乘法表:1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=9 9*1=9 9*2=18 9*3=27 9*4=36 9*9=81本题基本要求:输出的乘法表算式排列整齐。每算式(包括在其后面补上的空格)在输出表中占8个字符的宽度。 本题程序如下:#include#include using namespace std;int main()int i,k,d;for(i = 1;i = 9;+i)for(k = 1;k = i;+k)d = i * k;cout i * k =;cout left setw(5) d ;cout n;return 0;实验4 函数和程序结构1实验目的 掌握C+语言函数的定义方法、函数的声明及函数的调用方法 了解主调函数和被调函数之间的参数传递方式 掌握函数递归、嵌套调用 掌握全局变量、局部变量、静态局部变量的概念和使用方法 掌握内联函数、重载函数及函数参数默认的使用方法 学会选择适当的方法解决具体问题,即给出算法2实验内容两个整型数的最大公约数(greatest common divisor,GCD)定义为最大的整除这两个整数的数。编写函数gcd,返回两个整型数的最大公约数。3实验分析a 程序需要输入两个整数。需要编写一个循环语句,在程序执行中允许用户输入多对整数。这种结构的程序可以使用户方便快捷地测试程序。b 程序要包含一个名为gcd的函数,该函数完成最大公约数的求解算法。应用模数运算符来计算余数。如果两个数被除后的余数均为0,那么除数就是公约数。然后可以从函数中返回最大公约数。4相关知识1、 变量的作用域2、 变量的存储类型3、 字符串处理函数4、 C+语言的系统函数5、 多模块的程序设计与调试5相近编程示例编程输出几个int型数中最大的一个。本题基本要求:使用函数重载的方法定义三个重名函数,分别求出两个、三个和四个int型数中最大的一个。 举一例说明重载函数中设置默认参数,可能存在的二义性问题。 本题程序如下:#includeusing namespace std;void f(int a,int b);void f(int a,int b,int c);void f(int a,int b,int c,int d);int main()int i,j,a4;cout1andi;if(i=5)cout您的输入不正确!;return 1;cout请输入要比较的整数:;for(j=0;jaj;switch(i)case 2:f(a0,a1);break;case 3:f(a0,a1,a2);break;case 4:f(a0,a1,a2,a3);break;default:;return 0;void f(int a,int b)cout=b?couta:coutb;coutn;void f(int a,int b,int c)cout=b&a=c)cout=b&ac)coutc;else if(a=c)cout=c)coutb;else coutc;coutn;void f(int a,int b,int c,int d)cout=b?i=a:i=b;c=d?j=c:j=d;i=j?couti:coutj;coutn;实验5 数组、指针和引用1实验目的- 掌握数组定义、初始化、赋值、使用的方法。- 掌握指针的操作符和指针的运算。- 了解指针与数组、指针与字符串的关系。- 学习利用指针和引用给函数传递参数。- 学习调试方法。2实验内容航空售票系统。为一个容量为10个座位飞机的航班之每次飞行分配座位。程序应该显示下面有两个选项的菜单: please type 1 for smoking please type 2 for nonsmoking如果购票人键入了1,那么程序就在吸烟区给他分配一个座位(座号15);如果键入了2,程序就在无烟区给他分配一个座位(座号610)。然后程序打印出该购票者所得的座号以及座位是在无烟区还是在吸烟区。3实验分析用一维数组表示飞机中的座位表,把数组中的所有元素初始化为0。每分配一个座位号后,把数组中相应的元素值为1,表示该座位已售出。当吸烟区满员后,而无烟区有空位,应询问购票人是否愿意被分配到无烟区,若愿意,就给他分配一个无烟区的座位,否则就打印出信息Next flight leaves 6 hour.4相关知识1数组排序2数组查找等5相近编程示例数组就地排序。已知数组a100,各元素的值为:a1 = 25, a2 = 25,ai = ( a i-14627 + ai-23581)/100%100 50 (i = 3,4,100)用选择排序法: 把a重整为 a1 a2 a1 00,输出结果 把a重整为 a1 a2 a1 00,输出结果。 基本要求:把排序法写成函数调用的形式,应尽量减少数据移动的次数。 选择排序法:在n个元素的数组中选择最小的一个元素,把它和位于第一个位置的元素互换位置;然后在剩下的n-1个元素中选择次小的一个元素,并把它和第一个位置的元素交换;不断重复这些步骤,直到最后两个元素。例如,欲按选择法对数组bedac排序,其各轮排序后的结果将如下所示: 初 始 b e d a c 第一轮 a e d b c 第二轮 a b d e c 第三轮 a b c e d 第四轮 a b c d e本题程序如下:#include using namespace std; void Px1(int a) int j,k;int t;for (j=0;j100;j+)for (k=j+1;k100;k+)if (akaj) t=ak; ak=aj; aj=t; for (j=0;j100;j+)coutaj ;if (j+1)%10=0) coutn;void Px2(int a)int j,k;int t;for (j=0;j100;j+)if (aj0) aj=-aj;for (j=0;j100;j+)for (k=j+1;k100;k+)if (akaj) t=ak; ak=aj; aj=t; for (j=0;j100;j+)coutaj ;if (j+1)%10=0) coutn;int main() int a100; int i; a0=25; a1=-25; for (i=2;i100;i+) ai=(ai-1*4627+ai-2*3581)/100%100-50; Px1(a); coutn; Px2(a); return 0;实验6 类和对象1实验目的定义类学习构造类的方法掌握面向对象程序设计的方法 2实验内容二维数组类。编写一个程序建立一个56的整数二维安全数组。演示它如何工作。3实验分析建立一个数组类,该类有一个整数指针,两个下标数据成员。整数指针表示数组的首地址,由于new操作符不能直接分配二维数组,所以分配56个一维数组元素来模仿。两个下标分别表示数组的两维。该数组类至少有一个构造函数,一个取值函数,一个赋值函数。构造函数用new操作符分配数组所需的元素空间,由于分配了堆空间,所以,还相应地需要析构函数,在数组对象解体之前,释放曾经分配了的空间。取值函数命名为Get(),两个下标值作为其参数,在核实该操作合法后,返回对应这两个下标的数组元素。赋值函数命名为Put(),它可以是下面的形式void Put(int x, int y, int value);第三个参数表示数组值,赋值操作无返回值。数组下标校验。一旦发现下标超出范围,需执行exit( ) 函数停止程序运行。因此头文件需要有声明exit( ) 函数的stdlib.h。在应用程序中,先定义一个数组对象a,然后依次给该数组对象赋值,最后,将该数组对象中的所有元素值输出。4相关知识1、 对象的初始化2、 内联函数和外联函数3、 成员函数的重载性4、 成员函数设置默认参数5相近编程示例一维数组是应用极为广泛的数据结构,但是在C(C+)语言的数组没有下标越界检查,因而极容易出错。请定义一个安全的一维数组类Vect,使其能避免上述错误。 本题基本要求:在类Vect中,采取如下措施: 数组大小的缺省值为20(使用无参构造函数),也可以由用户定义数组大小(使用带参构造函数) 使用成员函数进行下标的越界检查:当所用的下标超出预定值时,将引起错误信息,并中止程序运行 本题答案程序如下:#include #include /for exit class Vect int * p;int size;public:int up;Vect()Size =20;p = new int size;up = size 1;Vect (int n);Vect() delete p;int & element(int i); ;Vect : Vect(int n) if(n=0) cerr”illegal vect size” n endl;exit(1);size = n;p = new intsize;up = size 1;int & Vect : element(int I) if(i up)cerr “llegal vect index “ i 函数分别返回时对ostream和istream对象的引用。这就实现了级联的函数调用。4、 左值operator()函数和右值operator()函数之间的区别是右值operator()函数返回一个const int型值,而且右值operator()函数是一个常量函数。4相关知识1、 运算符重载为成员函数形式2、 运算符重载为友元函数的形式3、 一元运算符重载4、 二元运算符重载5、 特殊运算符重载5相近编程示例复数类运算符重载。本示例程序如下:#EXAMPLE10_01.H#ifndef EXAMPLE10_01_H#define EXAMPLE10_01_H#includeclass zComplexdouble realpart;double imagpart; public;/构造函数zComplex();zComplex(double r1,double i1);zComplex(const zComplex & c);zComplex(double c)realpart = (double)c; imagpart = 0;/取复数的实部和虚部double real();double imag();friend double real(const zComplex &);friend double imag(const zComplex &);/运算符重载为成员函数zComplex operator + (const zComplex &); zComplex operator - (const zComplex &); zComplex operator * (const zComplex &); zComplex operator / (const zComplex &); zComplex operator = (const zComplex &); /运算符重载为友员函数friend int operator = (const zComplex &, const zComplex &);friend int operator != (const zComplex &, const zComplex &);/ show complex void print();#endif这个复数类定义了复数的+、-、*、/、=、=、!=等各项操作。实验8 堆操作、静态成员与友元1实验目的学习堆对象的分配与释放学习静态数据成员和静态成员函数的使用学习链表类的定义与使用2实验内容模拟栈操作。设计一个整数链表类,满足栈操作。即,总在链表首插入结点,总在链表首取出(删除)结点。 3实验分析类中需有记录结点个数的数据成员。如果链表为空,而要做取出结点的操作,则类必须给出出错显示编制应用程序,取 100次随机数(10200内),每取到比前一个随机数大时,放入链表中,否则,略去。然后逐个取出,求其和。用堆分配方法逐个产生满足条件的结点,插入链表中。每当从链表中取出一个结点时,要及时将结点删除。 求和工作不要在链表类中完成,以使该链表具有通用性。4相关知识1、 友元类2、 构造函数及其重载3、 子对象指针4、 私有的成员函数5、 使用运算符new创建动态对象6、 指向对象的指针作函数的返回值5相近编程示例 对一个已知的链表实例新增链表操作功能。EXAMPLE8_1.CPP中已有的链表操作为: 1)在表头插入一个结点。 使用函数Insert()。 2)在表尾添加一个结点。 使用函数Append()。 3)合并两个链表。 使用函数Cat()。 4)计算链表结点数。 使用函数Getlength()。 5)输出链表各结点值。 使用函数Display()。 基本要求: 使List类增加链表的排序操作。即采用冒泡法,将链表的结点按数据值从小到大排列。 使List类增加在链表中插入中间结点的操作。 使List类增加在链表中删除中间结点的操作。 本示例程序如下: /EXAMPLE8_01.CPP # include # include class Node /声明结点类 public: Node(int d=0)data=d; next=0; Node(); int getdata() const reture data; void setdata(int d)data=d; Node * getnext() const reture next; void setnext(Node *node)next=node; private: int data; /数据项 Node *next; /结点指针,指向链表中下一个元素 ; class List /声明链表类 public: List ()pHead=0; List (int d)pHead=new Node(d); void Insert(int d); /插入操作:在第一个结点前插入另一个结点 void Append(int d); /添加操作:在最后一个结点后添加新结点 void Cat(List &l); /合并操作:将两个链表合并 void Sort(); /排序操作:将链表的结点按数据值从小到大排列 void Getlength() const ; /求长度操作:计算链表结点数 void Display() /输出链表各结点值 private: Node *pHead; /指向链表头结点的指针 Node *end(); /求链表的最后一个结点,返回指向这个结点的指针 ; void List:Insert(int d) /插入操作的实现 Node *pNode=new Node(d); pNode-setnext(pHead); pHead=pNode; void List:Append(int d) /添加操作的实现 Node *pNode=new Node(d); if(pNode=0)exit(0); if(pHead=0) pHead=pNode; else (end()-setnext(pNode); void List:Cat(List &l) /合并操作的实现 if(pHead=0) pHead=l.pHead; else (end()-setnext(l.pHead); void List:Sort() /排序操作的实现,采用冒泡法 int temp; Node *prev, *p, *pend; If(pHead=0)|(pHead-getnext()=0) Return; pend=0; do for(p=pHead,prev=pHead-getnext();prev!=pend;p=prev,prev=prev-getnext() if(p-getdata()prev-getdata() temp=p-getdata(); p-setdata(prev-getdata() prev-setdata(temp); pend=p; while(pend!=pHead-getnext(); void List:Getlength() const /求长度操作的实现 int i=0; Node *p=pHead; While(p) i+; p=p-getnext(); cout”链表长度是:”iendl; void List:Display() /输出操作的实现 if(pHead=0) cout”空链表”endl; return; cout(; int i=0; Node *p=pHead; While(p) if(+i%40=1&i!=1)coutendl; coutgetdata()getnext(); cout)getnext(); return p; void main() /主函数 int number,i; int x; List list1; List1.Display(); coutnumber; cout”请输入各结点数据值:”; for(i=1;ix; list1.Append(x); cout”第一个链表:”; list1.Display(); list1.Getlength(); coutx; list1.Insert(x); cout”链表变为:”; list1.Display(); list1.Getlength(); List list2; coutnumber; cout”请输入各结点数据值:”; for(i=1;ix; list2.Append(x); cout”第二个链表:”; list2.Display(); list2.Getlength(); cout” 第二个链表并入第一个链表后:”; list1.Cat(list2); list1.Display(); cout”从小到大的排序为:”; list1.Sort(); list1.Display(); 程序运行结果如下:(加下划线者为用户输入) 空链表 请输入链表的结点数:5 请输入各结点数据值:12 4 5 2 9 第一个链表:(12 4 5 2 9) 链表长度是:5 请输入用于前插结点的数据值:16 链表变为:(16 12 4 5 2 9) 链表长度是:6 请输入另一个链表的结点数:4 请输入各结点数据值:9 5 8 7 第二个链表:(9 5 8 7) 链表长度是:4 第二个链表并入第一个链表后:(16 12 4 5 2 9 9 5 8 7) 从小到大的排序为:(2 4 5 5 7 8 9 9 12 16) 实验9 类的继承与模板1实验目的根据现有类建立新类学习构造基类和虚函数的用法学习模板的使用2实验内容定义一个Point-Circle Cylinder类层次结构。试为该类层次设计一个应用程序。3实验分析在程序中定义三个类:Point,Circle ,Cylinder。它们之间是继承关系,都是公有继承方式。将类Point和类Circle的数据成员定为保护成员,这样有利于在它们的派生类中引用。如果类Point和类Circle的数据成员为私有成员,会发生什么现象?应如何解决这个问题?4相关知识1、 派生类的三种继承方式2、 单继承派生的构造函数和析构函数3、 子类型4、 多继承派生的构造函数5、 多继承中的二义性问题5相近编程示例 定义一个Location-Point-Circle类层次结构:Location类: 用x,y坐标描述一个平面位置; 得到x坐标与得到y坐标。Point类,在Location类的基础上增加: 点是否可见(Visible); 显示(Show)一个点; 隐藏(Hide)一个点; 得到点是否可见(IsVisible)的信息; 将这个点从当前位置移到(MoveTo)新的位置。Circle类,在Point 类的基础上增加: 圆的半径(Radius); 显示(Show)一个圆; 隐藏(Hide)一个圆; 放大(Expand)一个圆; 移动(MoveTo)一个圆; 缩小(Contract)一个圆。本示例程序如下:/point.hppenum Boolean false,true;class Location protected: int x; int y;public: Location(int InitX, int InitY); int GetX(); int GetY(); ;class Point:public Location protected: Boolean visible;Publie: Point(int InitX, InitY); void Show(); void Hide();Boolean IsVisible();void MoveTo(int NewX, int New Y);class Circle:public Point int Radius;:public:Circle(int InitX, InitY,int InitRadius;); void Show(); void Hide();void Expand(int ExpandBy);void MoveTo(int NewX, int New Y); void Conttract(int ContractBy); /Point.cpp#include “Point.hpp”#include t#include Location: Location(int InitX, int InitY); x = InitX, y= InitY int Location:GetX() return x;Point:Point(int InitX, int InitY); Location(InitX, InitY) visible =true; ;void Point:Show() v

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论