第一篇:华中科技大学C++实验总结报告(图形编辑器)
C++ 实验总结报告
研究课题:图形编辑器 学 校:华中科技大学 院 系: 班 级: 姓 名: 指导老师:
一、实验目的
1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装 2.学习Microsoft的Visual C++编程工具 3.掌握MFC的相关知识
4.掌握基本的文件保存、读取以及操作封装技术
二、实验目的
设计一个简单的图形编辑器
三、实验所用仪器、设备
计算机:PentiumIII 800 以上
256M内存 操作系统:Windows 2000/XP 开发集成环境:Visual C++ 6.0
四、软件功能简介
(注:此软件是从网上下载得来)
该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。
五、部分代码分析
1.直线类代码:
class CCreateLine : public CCommand { private: Position m_begin;// 直线的起点
Position m_end;// 直线的终点
public: CCreateLine();~CCreateLine();
int GetType();int OnLButtonDown(UINT nFlags, const Position& pos);int OnMouseMove(UINT nFlags, const Position& pos);int OnRButtonDown(UINT nFlags, const Position& pos);
int Cancel();};学习C++我们最需要理解的就是它面向对象的设计思想。这种思想可以在类和对象上得到充分的体现。
类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。它是通过抽象数据类型ADT方法来实现的一种数据类型,将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。因此,它具有更高的抽象性,实现了信息的隐藏和封装。
对象是某种类的一个实例,是类的具体体现。一个类可以有多个对象。
分析这一段代码,编程者将直线的起始点和终止点设置为私有成员,这样做就对整条直线实现了隐藏和保护,是面向对象中封装特性的一个具体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数相反的功能。另外的几个成员函数名称形参返回值都与class Ccommand 中的几个公有函数相同,而在class Ccommand中,这几个函数都是虚函数,这是函数重载,也是多态性的具体体现。
由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了解面向对象程序设计的思想精髓奠定了基础。
2.对构造函数和解析函数的分析
构造函数
CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){
m_nStep = 0;// 初始化操作步为 0 }
此构造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。这是数据共享与数据保护两者兼顾时的一种处理方法。
析构函数
CCreateLine::~CCreateLine(){ }
此析构函数中没有任何操作语句,但它并非没有任何操作。在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。
3.BOOL Cline::Pick(const Position&pos,const double pick_radius){ Position objPos=pos;BOX2D sourceBox,desBOX;GetBox(&sourceBox);desBox.min[0]=sourceBox.min[0]-pick_radius;desBox.min[1]=sourceBox.min[1]-pick_radius;desBox.max[0]=sourceBox.max[0]+pick_radius;desBox.max[1]=sourceBox.min[1]+pick_radius;if(!objPos.lslnBox(desBox))return FALSE;double angle=::GetAngleToXAxis(m_begin,m_end);Position dp =objPos-m_begin;Double dist = fabs(dp.x*cos(angle)+dp.y*sin(angle)-objPos.Distance(m_begin));if(dist<=pick_radius)return TRUE;return FALSE;}
在阅读此函数的源代码过程中,我感觉到对类创建的合理划分对整个程序具有着十分重要的意义。正如上段代码,它的前提是对类进行了合理的划分,只有在对类进行了合理的划分后,我们才能更加高效地处理对象。所以,我感觉到在学习面向对象程序设计时,应当尤为注意类的创建与划分。
六、个人学习体会
在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。
随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。
在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。另外,我还感觉到一个好的程序编出来需要很多人的团结合作。我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。
很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。感谢老师对我们的悉心教授!
第二篇:C++实验总结报告
C++ 实验总结报告
研究课题:图形编辑器
一、实验目的
1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装 2.学习Microsoft的Visual C++编程工具 3.掌握MFC的相关知识
4.掌握基本的文件保存、读取以及操作封装技术
二、实验目的
设计一个简单的图形编辑器
三、实验所用仪器、设备
计算机:PentiumIII 800 以上
256M内存 操作系统:Windows 2000/XP 开发集成环境:Visual C++ 6.0
四、软件功能简介
(注:此软件是从网上下载得来)
该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。
五、部分代码分析
1.类的初始分析:
class CDrawApp : public CWinApp { public: CDrawApp();
// Overrides virtual BOOL InitInstance();
// Implementation protected: //{{AFX_MSG(CDrawApp)afx_msg void OnAppAbout();// NOTE-the ClassWizard will add and remove member functions here.//
DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG DECLARE_MESSAGE_MAP()};学习C++我们最需要理解的就是它面向对象的设计思想。这种思想可以在类和对象上得到充分的体现。
类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。它是通过抽象数据类型ADT方法来实现的一种数据类型,将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。因此,它具有更高的抽象性,实现了信息的隐藏和封装。
对象是某种类的一个实例,是类的具体体现。一个类可以有多个对象。
分析这一段代码,编程者将CDrawApp();设置为公有函数,这样做就是在整个函数的外面开了一个口,使用户可以利用这一函数处理具体问题而不必详解函数内部,是面向对象中封装特性的一个具体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数相反的功能。另外,这段代码中还包括布尔型虚函数InitInstance(),这是函数重载,也是多态性的具体体现。
由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了解面向对象程序设计的思想精髓奠定了基础。
2.对构造函数和析构函数的分析
构造函数
CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){
m_nStep = 0;// 初始化操作步为 0 }
构造函数:C++中“类”只定义了一组对象的类型。要使用这个类还必须用“类”说明它的对象,每个对象中的数据成员还必须赋初值,这些功能都是由构造函数完成的。此造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。这是数据共享与数据保护两者兼顾时的一种处理方法。
析构函数
CCreateLine::~CCreateLine(){ } 它是构造函数的配对物,与构造函数一样是与类同名的成员函数,并在函数名前加上一个’~’以便与构造函数相区别。此析构函数中没有任何操作语句,但它并非没有任何操作。在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。
3.继承和虚函数分析
class CDrawRect : public CDrawObj { protected: DECLARE_SERIAL(CDrawRect);CDrawRect();
public: CDrawRect(const CRect& position);//添加了对新数据成员的初始化
// Implementation public: virtual void Serialize(CArchive& ar);//添加了对新数据成员操作 virtual void Draw(CDC* pDC);//根据要求画出每个图形
virtual int GetHandleCount();//line和roundRectangle特殊处理 virtual CPoint GetHandle(int nHandle);//line和roundRectangle特殊处理
virtual HCURSOR GetHandleCursor(int nHandle);//line和roundRectangle特殊处理
virtual void MoveHandleTo(int nHandle, CPoint point, CDrawView* pView = NULL);//通过特征点来修改大小
virtual BOOL Intersects(const CRect& rect);//判断与图形是否存在相交
virtual CDrawObj* Clone(CDrawDoc* pDoc);//Clone一个新对象加入到pDoc中
protected: enum Shape { rectangle, roundRectangle, ellipse, line };Shape m_nShape;//通过枚举变量来标示属于上述四种的哪一种形状 CPoint m_roundness;// for roundRect corners
friend class CRectTool;};在阅读此函数的源代码过程中,我感觉到对基类中虚函数的使用对整个程序具有着十分重要的意义。正如上段代码,它的前提是派生类CDrawRect对基类CDrawObj进行了继承,只有在对基类中的虚函数进行设置后,我们才能更加高效地处理和使用基类和派生类中的方法。所以,我感觉到在学习面向对象程序设计时,应当尤为注意基类中虚方法的创建和后期调用。
六、个人学习体会
在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。
随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。
在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。
另外,我还感觉到一个好的程序编出来需要很多人的团结合作。我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。
很高兴能够了解到C++的神奇魅力和面向对象程序设计的独特思想,它为我今后的程序设计奠定了基础。感谢老师对我们的悉心教授!
第三篇:C++ 实验一总结报告
实验报告
实验一 VC++ 6.0开发环境应用入门 1.实验结果:
2.实验结果分析:
该程序是利用C++输出两句话,练习输出格式。实验二 C++简单程序设计
1.实验结果:
2.实验结果分析:
求一个图形的面积要先判断是哪一种图形,用switch语句就可以解决,再利用公式即可。如输入1为圆形,再输入边长3,利用面积公式,它的面积就是28.2744。
3.实验结果:
4.实验结果分析:
复习i++与++i的运用。i++在当前语句时,此时i的值是没有变化的,直到此句执行结束,i的值才会+1;++i在当前语句执行之前时,i的值就已经+1。实验三 函数的应用
1.实验结果:
2.实验结果分析:
函数的递归作用,先声明定义一个函数,输入形参n的值,然后进行比较,小于3的直接返回1;大于3的就继续递归,直到得到的形参值小于3,返回1为止。从程序结果得知,返回n个1就最终递归返回n。
3.编写一个函数把华氏温度转换为摄氏温度,转换公式为:C =(F-32)* 5/9。
4.使用系统函数pow(x,y)计算x的值,注意包含头文件math.h
程序:
y
实验总结:
1.基本掌握如何操作C++的界面,包括运行,编译,调试等过程;
2.学会编写简单的C++程序,掌握基本数据类型变量和常量的应用,运算符与表达式的应用;
3.学会使用VC++6.0开发环境中的debug调试功能:单步执行、设置断点、观察变量值;熟练使用F10,F11,shift+F11,ctrl+F10等快捷键的使用。
4.基本掌握函数的运用,并对C语言的复习与运用,认识了C++与C语言的异同。
实验报告
实验四 C++程序的结构
一、实验目的
1.观察程序运行中变量的作用域、生存期和可见性;
2.学习类的静态成员的使用;
3.学习多文件结构在C++程序中的使用;
二、实验任务
1.运行下面的程序,观察变量x、y的值。
#include
cout << “Step into fn1()...” << endl;
using namespace std;
fn1();
void fn1();
cout << “Back in main” << endl;
int x = 1, y = 2;
cout << “x = ” << x << endl;
int main()
cout << “y = ” << y << endl;
{
return 0;
cout << “Begin...” << endl;
}
cout << “x = ” << x << endl;
void fn1()
cout << “y = ” << y << endl;
{
cout << “Evaluate x and y in int y = 200;main()...” << endl;
cout << “x = ” << x << endl;
int x = 10, y = 20;
cout << “y = ” << y << endl;
cout << “x = ” << x << endl;
}
cout << “y = ” << y << endl;
2.实现客户机(CLIENT)类。声明字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中声明类和实现类,在文件client.cpp中测试这个类,观察相应的成员变量取值的变化情况。
程序:
//实现客户机(CLIENT)类。
#include
cout<<“Client构造函数被调用”< Clientnum++;} ~Client(){ cout<<“Client析构函数被调用”< Clientnum--;} static void ChangeServername(){ cout<<“请输入服务器的名字:”< cin>>SeverName; } void show();};int Client::Clientnum=0;char Client::SeverName[10]=“abcd”;//Client.cpp void Client::show(){ 实验五 数组、指针与字符串 一、实验目的 cout<<“该用户机的服务器端名字是:”< //Client.exe void main(){ Client::ChangeServername();Client a;a.show();Client::ChangeServername();Client b;b.show();Client::ChangeServername();Client c;c.show();} 1.学习使用数组数据对象; 2.学习字符串数据的组织和处理; 3.学习标准C++库的使用; 4.掌握指针的使用方法; 5.练习通过debug观察指针的内容及其所指的对象的内容; 6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 7.分别使用字符数组和标准C++库练习处理字符串的方法。 二、实验任务 1.编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 程序: #include for(i=0;i<3;i++)cout<<“请输入一个3*3的矩 cout< cout< for(j=0;j<3;j++)} cin>>a[i][j];2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 程序: #include int i,j,t; cout<<“请输入一个矩阵元素个数n*n=”; cin>>t; int *p=new int[t]; cout< for(i=0;i cin>>p[i]; cout<<“该矩阵的转置为:”< for(j=0;j { for(i=0;i { cout< i=i+sqrt(t); } cout< } } 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 #include int i,j; char a[20],b[10]; cout<<“请输入一个不大于10个字符的字符串:”< cin>>a; cout<<“请再输入一个不大于10个字符的字符串:”< cin>>b; for(i=0;i<10;i++) if(a[i]==' ') { j=i; break; } for(i=0;i<10;i++) { a[i+j]=b[i]; if(b[i]==' ') break; } cout<<“两字符串的连接得:”< cout< #include cin>>a;cout<<“请再输入一个不大于10个字符的字符串:”< cin>>b;cout<<“两字符串的连接得:”< 5.声明一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 程序: #include char street[20];// 街道地址 char city[10];// 市 char prov[10];// 省 char post[7];// 邮政编码 int no;// 记录序号 public: employee(char [],char [],char [],char [],char [],int);void change_name();void display();};employee::employee(char n[],char s[],char c[],char p1[],char p2[],int num){ strcpy(name,n);strcpy(street,s);strcpy(city,c);strcpy(prov,p1);strcpy(post,p2);no=num;} void employee::change_name(){ char n[20];cout<<“记录”< 6.声明包含5个元素的对象数组,每个元素都是Employee类型的对象。 //声明包含5个元素的对象数组,每个元素都是Employee类型的对象。#include int Chinese;// 语文 int English;// 英语 int Sport;// 体育 int Num;// 序号 public: void N(int n){Num=n;} void M(int m){Math=m;} void C(int c){Chinese=c;} void E(int e){English=e;} void S(int s){Sport=s;} void display(){cout<<“输出序号”< cout<<“请依次输入序号、数学、语文、英语和体育成绩:”< cin>>n>>m>>c>>e>>s; date[i].N(n); date[i].M(m); date[i].C(c); date[i].E(e); date[i].S(s);} for(i=0;i date[i].display();} 实验六 类与对象 一、实验目的 1.掌握类的声明和使用。 2.掌握类的声明和对象的声明。 3.复习具有不同访问属性的成员的访问方式。 4.观察构造函数和析构函数的执行过程。 5.学习类的组合使用方法。 二、实验任务 1.声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,其中,rank为字符型,其值可以为P1、P2等;frequency为单位是MHz的整型数;voltage为浮点型的电压值。 公有成员函数包括:GetRank()、GetFrequency()、GetVoltage()用来获取等级、频率、电压的值;SetRank、SetFrequency、SetVoltage用来设置等级、频率、电压的值;run、stop中run里面要求输出“CPU开始运行!”;stop里面要求输出“CPU停止运行!”。 构造函数里面需要输出“构造一个CPU”,析构函数里面需要输出“析构一个CPU”。观察构造函数和析构函数的调用顺序。 程序://声明一个CPU类 #include freauency=f; voltage=v; cout<<“构造一个CPU!”< void stop(){cout<< “CPU停止运行!”< 华中科技大学 《计算机基础与程序设计(C++)》 实验报告 实验名称:第三次上机实验实验学时:4 姓名:学号:班级:电气 实验日期:2017/3/27 教师批阅签字: 一、实验目的 掌握三种循环语句的使用。学会使用continue 和break。掌握多重循环的设计。掌握常用算法的应用。 二、实验内容 1.在vc环境下编写下述程序代码,编译调试然后用不同的数据测试直至得到完全正确的结果。并解释出错原因。 #include cout<<“输入一个正数:”; cin>>a; if(a<0) cout< else; { x0=a/2; x1=(x0+a/x0)/2; while(abs(x1-x0)>=1e-5){ x0=x1; x1=(x0+a/x0)/2; } cout<< a<<“的平方根为:”< } return 0;语法错误: 1.最后缺少花括号。逻辑错误: 1.else后面有分号,导致花括号中的语句不受else限制。2.abs所提供的精度为整数 更改后的程序: #include cout<<“输入一个正数:”; cin>>a; if(a<0) cout< else { x0=a/2;x1=(x0+a/x0)/2; while(fabs(x1-x0)>=1e-5){ x0=x1; x1=(x0+a/x0)/2; } cout<< a<<“的平方根为:”< } return 0;} 2.下列程序的功能是:计算一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子,假设兔子不存在死亡问题,请问从第1个月到第20个月,每个月有多少对兔子?要求输出时按行列方式每行显示5个数据。如下图: 编译调试该程序看是否正确,不正确的话修改之直至完全满足要求。并解释出错原因。int main(){ int fib0=0,fib1=1,fib2;int n; } cout< 语法错误: 1.缺少头文件(iostream以及iomanip)以及命名空间。2.return0后的分号为中文分号。逻辑错误: 1.cout< #include int fib0=0,fib1=1,fib2;int n; cout< fib2=fib0+fib1; cout< fib0=fib1; fib1=fib2; if((n+1)%5==0)cout< } return 0;} 3. 编程任意输入一个三位数,判断其是否是水仙花数(水仙花数是指这个数等于个位,十位和百位的立方和。例如:153=13+53+33)要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include cout<<“该整数为水仙花数”< cout<<“该整数不是水仙花数”< 解决本题的算法思路描述。 首先要解决的是如何取得个十百三位的数字,然后用if语句进行判断。调试过程的记载(包括出现的错误,以及修改过程)对十位和百位的数字进行提取的时候出现错误。 开始时: g=a%10;改正后:g=a%10; s=a%100;s=(a/10)%10;b=a%1000;b=a/100;4. 输出3到100以内的所有素数。(要求每行显示8个数) 提示:该题需要用到多重循环,外循环代表需要判断的数,从3到100,内循环判断该数是否是素数,参考教材的例4.9(判断一个数是否为素数)。 要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include a=1; for(n=2;n { if(i%n==0) } { a=0; break; } } if(a==1) { cout< m=m+1; if(m%8==0) cout< } else ; } return 0; 解决本题的算法思路描述 运用双重循环语句进行,一个用来判断是否为素数,另外一个用来循环3-100.调试过程的记载(包括出现的错误,以及修改过程) a需要每次循环都赋值,最初放在循环外,导致只能输出3一个数字。花括号位置错误,导致格式不正确。 5. 连续输入n 个整数(n由键盘输入)统计其中正数、负数和零的个数。要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include cin>>a; if(a==0) l++; else if(a>0) z++; else f++;} cout<<“统计的数据中正数、负数以及0的个数分别”< 解决本题的算法思路描述 首先判断输入数据的个数,然后运用for循环和if-else语句进行统计出现次数。调试过程的记载(包括出现的错误,以及修改过程)未出现错误,但是最开始的程序未进行相关提示。 6. 改写教材115 例18,规则为5局3胜制规则,其余条件不变。要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include cout<<“请输入两个小孩的划拳值,1代表石头,2代表剪刀,3代表布。”< cin>>p1>>p2; switch(p1) { case 1:cout<<“石头”;break; } case 2:cout<<“剪刀”;break;case 3:cout<<“布”;break;} cout<<'t';switch(p2){ case 1:cout<<“石头”;break;case 2:cout<<“剪刀”;break;case 3:cout<<“布”;break;} cout<<'n';if(p1==p2) continue;if(p1==1&&p2==2||p1==2&&p2==3||p1==3&&p2==1) v1++;else v2++;} if(v1==3)cout<<“小孩1获胜”< 解决本题的算法思路描述 通过修改while的循环条件即可实现五局三胜制 只需要统计两个孩子的胜利次数,谁先到达三次即获胜 调试过程的记载(包括出现的错误,以及修改过程)由于为书中例题,只需简单修改即可完成,故未出现错误 7. 改写教材龟兔赛跑程序,要求在指定距离的条件下比赛,其余规则不变。要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include int s,sw=0,st=0,station=0,sleep=0,run=0;cout<<“输入比赛距离:”;cin>>s;while(sw if(station==0) { run++; sw+=3; st+=9; if(run==10) { run=0; if(st>sw) station=1; else ; } else ; } else { sleep++;sw+=3;if(sleep==30){ station=0;sleep=0;} else;} } if(sw>st) cout<<“乌龟胜”< cout<<“兔子胜”< else cout<<“平局”< 解决本题的算法思路描述 1.以时间为循环的控制条件,计算两者走相同路程时谁的时间少,运用累计时间的算法,有一者到达指定路程就停止计时,然后比较两者的路程。2.对乌龟和兔子的行程进行累计,通过速度和时间来完成。 3.判断兔子是否在进行休息,用station来表示,0为运动1为睡觉。4.累计睡觉的时间,每到十分钟要重新从0开始计算。调试过程的记载(包括出现的错误,以及修改过程)赋值符号与判断相等的符号混淆。 8. 小王拿了50元钱准备去菜场买菜,已知黄瓜3元1斤,韭菜5元1斤,西红柿4元1斤,如何买这3样菜(每种菜都必须买),并且将50元花完,列出所有可能的买法。(只考虑整斤)要求: 程序原代码,及运行结果截图。(直接粘贴在此)#include for(j=1;j<=10;j++) { for(x=1;x<13;x++) { if(3*h+5*j+4*x==50) cout<<“黄瓜,韭菜,西红柿的数量分别为”< } } } return 0;} 解决本题的算法思路描述 利用多重循环,使用穷举法得出结果。 调试过程的记载(包括出现的错误,以及修改过程)For语句中;错写为,循环语句出错,更改了循环语句。 9. 编程将一个10进制整数转换成2进制整数。要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include 解决本题的算法思路描述 十进制转为二进制的各个位数的数字用对2取余获得 然后用数组储存数字 最后倒序输出 调试过程的记载(包括出现的错误,以及修改过程)For语句中的j开始时定义错数值,应为i-1忘记减1 10. 编程将一个10进制定点小数转换成2进制定点小数。要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include a=s*2; if(a>=1) s=a-1; else s=a; m++; cout< if(s==0) break;} cout< 解决本题的算法思路描述 小数点后的每一位数字用乘2循环求得,乘2后的小数用floor取整 调试过程的记载(包括出现的错误,以及修改过程)输入数据的类型出错。由int改为double 11. 编程要求从文件in.txt 中连续读入n个数(n由键盘输入),统计其中正数、负数和零的个数。(in.txt 是事先建好的一个文件存有若干数据,当输入的n值大于in.txt文件中的数据个数时给出相应的提示,判断文件中的数据是否读完使用eof()函数。eof()函数是判断是否到文件结尾,如果到文件结尾函数返回1,否则返回0,具体参考教材115页例4.17)要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include in>>x; i++; if(x==0) l++; else if(x>0) z++; else f++;} m=l+z+f; if(n>m) {cout<<“数据数量小于所要统计的数量”< cout<<“统计的正数、负数和零数量分别为”< in.close(); return 0;} 解决本题的算法思路描述 运用读取文件的语句,用if语句累计三种数据的个数。调试过程的记载(包括出现的错误,以及修改过程) 逗号用的中文用了''标志出现错误。更改为英文的逗号正常了。 12.(选做)一位商人有一个40磅的砝码,由于跌落在地而碎成4块,后来称得每块碎片的重量都是整数,而且可以用这4块来称从1到40磅之间的任意整数磅的重物,问这4块砝码碎片各重多少? 提示:此题需要两次用到穷举法,第一次穷举是4个砝码的重量,分别用四个循环变量i, j, k, l来表示。第二次穷举是当i+j+k+l==40时,对重1磅到40磅共40种物品使用i, j, k, l四个称进行组合,设置一个计数器,组合出1个计数器加1,如果能组合出40个,就是我们要找的答案。 要求: 程序原代码,及运行结果截图。(直接粘贴在此) #include { int i,j,k,l,d1,d2,d3,d4,x,flag,s=0; cout<<“砝码分为”; for(i = 1;i < 41;i++) { for(j = i;j < 41;j++) { for(k = j;k < 41;k++) { if((l = 40-i-j-k)>=k) { s=0; for(x=1;x<41;x++) { flag=0; for(d1=1;d1>-2&&flag==0;d1--) { for(d2=1;d2>-2&&flag==0;d2--) { for(d3=1;d3>-2&&flag==0;d3--) { for(d4=1;d4>-2&&flag==0;d4--) { if(x == i*d1+j*d2+k*d3+l*d4) { flag = 1; s++; } } } } } if(s==40) { cout< } } } } } } return 0; } 解决本题的算法思路描述 首先找出所有组合,然后进行筛选。 调试过程的记载(包括出现的错误,以及修改过程)最终的输出语句所在位置一直不正确,通过调试解决。解决同一个x可能导致s多次累加的问题 解决存在重复的问题,即出现1.3.9.27和3.1.9.27等 三、对本次实验内容及方法、手段的改进建议,以及实验心得实验心得包括:1)哪些知识点已掌握 2)哪些知识点有困难 3)对讲课的建议 4)对没有掌握知识的补救建议 1) For语句循环,while以及do-while语句已经掌握。If-else语句、break、continue已经掌握。文件的读取与写入也已经能够运用。2) 对于龟兔赛跑等很复杂的问题掌握不够熟练 For语句很多次的叠加可能出错 3) 多进行程序上的演示,更容易理解。4) 多进行相关习题的训练掌握原理 重新阅读课本。 华中科技大学 微生物学实验 报告 班级:日期:年月日 指导教师:实验组别:姓名:组员姓名: 实验名称: 一、实验目的aaaaaaa 二、实验原理 aaaaaa 三、实验材料 aaaaaa 四、实验方法 aaaa 五、实验结果与分析 aaaaaa 六、思考题 aaaaaa 七、实验感悟 aaaaaa第四篇:华中科技大学c++第3次上机作业
第五篇:华中科技大学 微生物学实验 报告格式