C++实训报告模版.doc_第1页
C++实训报告模版.doc_第2页
C++实训报告模版.doc_第3页
C++实训报告模版.doc_第4页
C++实训报告模版.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

软件编程实训1实训报告制造业信息化系一、 课程实训目的1. 巩固并加深学生对C+语言程序设计知识的理解;2. 培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;3. 进一步掌握和应用VC+ 6.0或Visual Studio 2005集成开发环境;提高程序调试的能力,能够快速准确的排查程序错误并纠正,最终调试出可正确运行的程序;4. 提高运用C+语言解决实际问题的能力;5. 初步掌握开发小型实用软件的基本方法,能独立设计、实现基本功能的小系统;6. 掌握应用程序设计开发和文档撰写规范。二、 课程实训任务 每位学生从所给定的题目里面选择两个感兴趣的题目作为实训任务,另外也可自定题目,需经指导老师同意后方可作为实训任务。三、 万年历程序设计与实现 1. 系统需求(1)功能结构图程序主要实现3个功能:显示某一年的每个月的日历、显示某一年某一个月的日 历以及查询某一天是星期几。(2) 需求说明. 程序主要实现3个功能:显示某一年的每个月的日历、显示某一年某一个月的日历以及查询某一天是星期几。. 功能选择用菜单实现。例如:1 显示某一年的日历2 显示某年某一月的日历3 显示某一天是星期几0 退出用户通过输入不同的数字进入不同的菜单。. 每一月以日历表格的形式显示,表格的第一行显示星期,表格的内容是每一天。用户可以很容易看到每一天是星期几。. 利用输入输出函数和循环控制语句,实现一个简单的人机交互界面。. 利用逻辑表达式,使用控制语句,判断闰年,某年某月某日是星期几。. 实现对显示结果进行控制。2. 系统总体设计(1)系统开发环境 操作系统:window 7 开发平台:Visual Studio 2005(2)系统总体设计 Main函数中,运用while、switch函数实现的程序的界面循环。函数fn1中含有year、month、day3个成员变量,实现了某年的第N天是星期几的程序。函数dayofmonth中含有year、month2个成员变量,实现了判断闰年,并且反应出一年12个月每月的天数。函数fn2中含有year、month2个成员变量,实现了日历的排版功能,把日历和星期结合起来。函数fn3中含有year1个成员变量,调用了函数fn2实现了查询某年某月的日历功能。3. 系统详细设计(1)界面菜单设计及实现int i,choose;bool chooseFlag=false;while(1)while(!chooseFlag)cout-nendl;cout 欢迎进入万年历查询系统 nendl;cout-endl;cout请选则要查询的内容:endl;cout1.显示一年的日历endl2.显示一月的日历endl3.显示某一天是星期几endl0.退出endl;coutendlchoose;for(i=0;i=3;i+)if(choose=i) chooseFlag=true; break;else chooseFlag=false;if(!chooseFlag) coutError Input!endl; if(choose=1) setYear();coutendl;coutyear年的每月日历如下:endl;printYear();else if(choose=2)setMonth();coutyear年;printMonth();else if(choose=3)setDate();printDay();else if(choose=0)cout程序结束endl;break;elsecout错误!endl;chooseFlag=0;PerpetualCalendar:PerpetualCalendar()year=0;month=1;day=1;PerpetualCalendar:PerpetualCalendar(int y,int m,int d)year=y;month=m;day=d;bool PerpetualCalendar:isLeap(int y) if(y%4=0&y%100!=0)|(y%400=0)return true;else return false;int PerpetualCalendar:getDays() int i,sumDays=0;for(i=0;iyear;i+)if(isLeap(i) sumDays+=366;else sumDays+=365;if(isLeap(year) daysOfMonth2=29;for(i=1;imonth;i+)sumDays+=daysOfMonthi;sumDays+=day;return sumDays;int _tmain(int argc, _TCHAR* argv)PerpetualCalendar p;p.operate();return 0;(2)显示一年日历功能的设计及实现 coutsetw(6)日setw(6)一setw(6)二setw(6)三setw(6)四setw(6)五setw(6)六endl; for(int i=1;i=dayofmonth(year,month);i+) if(i=1) for(int j=1;jfn1(year,month,1);j+) coutsetw(6) ; coutsetw(6)i; else if(i+fn1(year,month,1)-2)%7=0) coutendl; coutsetw(6)i; (3)显示某一月日历功能的设计与实现 for(int i=1;i=12;i+) coutendlendl; couti月的日历如下:endl; fn2(year,i); coutendl; (4)显示某一天是星期几的实现coutyearmonthday; coutyear年month月day日是星期fn1(year,month,day)endl;四、特殊计算器程序设计与实现1. 系统需求(1)功能结构图(2) 需求说明设计一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。2. 系统总体设计(1)系统开发环境 操作系统:window 7 开发平台:Visual Studio 2005(2)系统总体设计(1)类complex类complex中,成员变量image表示虚部,real表示实部。成员函数print()用来显示数据。运算符重载函数都是用友元函数来实现的。分别重载+、-、*、/运算符。(2)类matrix类matrix中,成员变量elems用来存放矩阵的所有元素,rows表示矩阵的行,cols表示矩阵的列。成员函数SetElems()用来给矩阵中的每一个元素赋值,Disp()用来显示矩阵中的所有元素。其它友元函数分别重载+、-、*、/运算符。(3)类rational类rational中,有两个成员变量:denominator用来表示有理数的分母,numerator表示有理数的分子。有理数成员函数print()用来显示有理数。友元函数real()用来将有理数转换为实数,其它友元函数分别重载+、-、*、/运算符。(4)类set类set中,有两个成员变量:elems用来存储集合中的元素,card表示集合中元素的个数。成员函数print()用来输出集合中的元素,additem()用来给集合增加元素。友元函数分别重载了&、=、!=、+、*、=运算符。程序中的运算符重载函数都用友元函数来实现。 类complex的友元函数复数的表达形式为a+bi,对复数进行运算符重载不像对一般书进行运算那样简单,它的运输方法如下:加法:(a+bi)+(c+di)=(a+c)+(b+d)i减法:(a+bi)-(c+di)=(a-c)+(b-d)i乘法:(a+bi)*(c-di)=(ac-bd)+(ad+bc)i除法:(a+bi)/(c+di)=(a+bi)*(c-di)/(c2+d2)重载函数将以上算法用在了函数中。 类matrix的友元函数矩阵类的赋值,实质上是给二维数组赋值;矩阵相加减就是两个行数列数相同的二维数组相加减;二维数组相乘,其实就是两个二维数组,其中一个的行数等于另一个的列数,按矩阵相乘的法则进行计算。 类rational的友元函数对有理数类进行的操作有下面几种:有理数相加:当两个有理数a/b和c/d相加时,可得到这样的算式:a/b+c/d=(a*d+b*c)/(b*d)有理数相减:当两个有理数a/b和c/d相减时,得到的结果是:分子:a*d-b*c分母:b*d有理数相乘:当两个有理数a/b和c/d相乘时,得到的结果是:分子:a*c分母:b*d有理数相除:当两个有理数a/b和c/d相除时,得到的结果是:分子:a*d分母:b*c每次得到结果时,都需要对有理数进行优化。 类set的友元函数集合类的运算符重载操作主要有以下几种:判定某一元素是否属于集合:此操作用重载运算符函数&实现,返回值只有两种情况true或者false,取bool类型。判断两个集合是否相等:判定两个集合是否相等,需要看两个集合中所包含的元素是否相同,并且不管顺序如何。用重载运算符=来实现。判断两个集合是否不等:是相等操作的取反,用!=来实现两个集合的交集:即求出两个集合中的公共元素,用运算符*实现。两个个集合的并集:即两个集合相合并,合并以后去掉重复的元素,用运算符+来实现。判定一个集合是否是另一个集合的子集:用运算符=来实现判定一个集合是否是另一个集合的纯子集:用运算符实现3. 系统详细设计(1)界面菜单设计及实现 cout-endl;cout* *endl; cout 欢迎使用特殊计算器 endl;cout* *endl;cout-endl;while(1)coutendlendl;cout请选择您的计算类型:endlendl;cout 1.复数计算;endl; cout 2.有理数计算;endl; cout 3.矩阵计算;endl; cout 4.集合计算;endl; cout 0.退出;endl; couti; coutendl;(2) 复数计算 int j;cout请选择您的复数计算内容:endlendl;cout 1.两个复数相加;endl;cout 2.两个复数相减;endl;cout 3.两个复数相乘;endl;cout 4.两个复数相除;endl;cout 0.返回主页面;endl;coutj;while(j)if(j=0&j=4)float r1,j1,r2,j2;coutr1;coutj1;coutr2; coutj2;complex c1(r1,j1);complex c2(r2,j2);complex c3;switch(j)case 1:c3=c1+c2;c1.print();c2.print();c3.print();break;case 2:c3=c1-c2;c1.print();c2.print();c3.print();break;case 3:c3=c1*c2;c1.print();c2.print();c3.print();break;case 4:c3=c1/c2;c1.print();c2.print();c3.print();break;elsecout按键错误,请重新选择endl; coutendl;(3) 有理数计算 int j; cout请选择您的复数计算内容:endlendl; cout 1.两个有理数相加;endl; cout 2.两个有理数相减;endl; cout 3.两个有理数相乘;endl; cout 4.两个有理数相除;endl; cout 0.返回主页面;endl; coutj; cout=0&j=4) int r1,j1,r2,j2; coutr1;coutj1;coutr2; coutj2;rational c1(r1,j1);rational c2(r2,j2);rational c3;switch(j)case 1:c3=c1+c2;c1.print();c2.print();c3.print();break;case 2:c3=c1-c2;c1.print();c2.print();c3.print();break;case 3:c3=c1*c2;c1.print();c2.print();c3.print();break;case 4:c3=c1/c2;c1.print();c2.print();c3.print();break; else cout按键错误,请重新选择endl; coutendl;(4) 矩阵计算 int j; cout请选择您的矩阵计算内容:endlendl; cout 1.两个矩阵数相加;endl; cout 2.两个矩阵数相减;endl; cout 3.两个矩阵数相乘;endl; cout 0.返回主页面;endl; coutj; cout=1&j=3) int r1,j1,r2,j2,val; coutr1;coutj1;coutr2; coutj2;matrix c1(r1,j1);matrix c2(r2,j2);matrix c3;cout请输入第一个矩阵的元素endl;for(int m=1;m=r1;m+)for(int n=1;n=j1;n+)cout第m行nval;c1.SetElem(m,n,val); c1.Disp();cout请输入第二个矩阵的元素endl;for(int h=1;h=r2;h+)for(int k=1;k=j2;k+)cout第h行kval;c2.SetElem(h,k,val); c2.Disp(); switch(j) case 1: c3=c1+c2; cout第一个矩阵为:endl; c1.Disp(); cout第二个矩阵为:endl; c2.Disp(); cout第三个矩阵为:endl; c3.Disp(); break; case 2: c3=c1-c2; cout第一个矩阵为:endl; c1.Disp(); cout第二个矩阵为:endl; c2.Disp(); cout第三个矩阵为:endl; c3.Disp(); break; case 3: c3=c1*c2; cout第一个矩阵为:endl; c1.Disp(); cout第二个矩阵为:endl; c2.Disp(); cout第三个矩阵为:endl; c3.Disp(); break; else cout按键错误,请重新选择endl; coutendl;(5)集合计算 int j; cout请选择您的集合计算内容:endlendl; cout 1.两个集合的交集;endl; cout 2.两个集合的并集;endl; cout 3.一个集合是否为另一个集合的子集;endl; cout 0.返回主页面;endl; coutj; cout=0&j=3) int r1,r2,val; set set1,set2,set3; coutr1; coutr2; cout请输入第一个集合的元素endl; for(int n=1;n=r1;n+)cout第nval;set1.additem(val); set1.print();cout请输入第二个集合的元素endl;for(int n=1;n=r2;n+)cout第nval; set2.additem(val); set2.print(); switch(j) case 1: set3=set1*set2; cout第一个集合为:endl; set1.print(); cout第二个集合为:endl; set2.print(); cout交集为:endl; set3.print(); break; case 2: set3=set1+set2; cout第一个集合为:endl; set1.print(); cout第二个集合为:endl; set2.print(); cout交集为:endl; set3.print(); break; case 3: cout第一个集合为:endl; set1.print(); cout第二个集合为:endl; set2.print(); if(set1set2) cout第一个集合为第二个集合的子集endl; break; else cout按键错误,请重新选择endl; coutendl;5、 课程实训小结为期两个星期的c+实训已经基本结束,但是给了我很大的影响。通过这次实训,使我明白C+语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。通过上机训练,才能够明白自己知识的不足,才能够有的放矢,更加深刻的理解C语言中的知识点。 通过实训,我找到了许多知识漏点,学到了很多以前不懂的知识,以前认为自己已经懂了的知识点也理解更加深刻了。尤其是遇到了自己当时不知道如何编写的C+语言题目如何编写,通过自己的学习和同同学的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成就感。并增加了我们对C+语言的兴趣和学好C+语言的信心。与同学们交流的过程中,了解了程序的多种解决方法,知道了不同编写方法有不同的特点。总结C+语言实训的几个重要作用:1加深对课堂讲授内容的理解课堂上要讲授许多关于C+语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C+语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C+语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。 学习C+语言不能停留在学习它的语法规则,而是利用学到的知识编写C+语言程序,解决实际问题。即把C+语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握C+语言、自己编写的程序是否能够正确地解题。 自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C+语言的理解和程序开发能力。2熟悉程序开发环境、学习计算机系统的操作方法一个C+语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓环境就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握C+语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。3学习上机调试程序 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。 通过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于C+语言的知识,理解巩固了我们C+语言的理论知识。 C+语言这门课程对于我们应用电子专业的同学也相当重要,我们会再将来继续学习并熟悉这门课程。附录程序源代码1、 wannianli.cpp#include stdafx.h#include#includeusing namespace std;int fn1(int year,int month,int day);int monthday(int year,int month);void fn2(int year,int month);void fn3(int year);void main() int year,month,day,i,x; cout-endlendl; cout 欢迎进入万年历查询系统 endlendl; cout-endl; loop:coutendlendl; cout请您选择查询内容:endlendl; cout 1.显示一年的日历endl; cout 2.显示一个月的日历endl; cout 3.显示某一天是星期几endl; cout 0.退出:endl; coutendl; cout请选择按键():i; switch(i) case 0: return; case 1: coutyear; coutendl; coutyear年的每月日历如下:endl; fn3(year);break; case 2: coutyearmonth; coutyear年month月的日历如下:endl; fn2(year,month); break; case 3: coutyearmonthday; coutyear年month月day日是星期fn1(year,month,day)endl;break; default:cout输入错误endl; cout继续查询请输1 endl退出查询请输0x; if(x=1) goto loop;int dayofmonth(int year,int month) int permonthday12=31,28,31,30,31,30,31,31,30,31,30,31; if(month!=2) return permonthdaymonth-1; else if(year%4=0&year%100!=0|year%400=0) return 29; else return 28; return permonthday12;int fn1(int year,int month,int day) int yearjs,monthjs,monthday=0; int permonthday12=31,28,31,30,31,30,31,31,30,31,30,31; for(int i=0;imonth-1;i+) monthday=monthday+permonthdayi; if(year%4=0&year%100!=0|year%400=0) yearjs=2; if(month=2) monthjs=(monthday+1)%7; else monthjs=monthday%7; else yearjs=1; monthjs=monthday%7; return (year+year/4+year/400-year/100-yearjs+monthjs+day)%7)=0?7:(year+year/4+year/400-year/100-yearjs+monthjs+day)%7);void fn2(int year,int month) coutsetw(6)日setw(6)一setw(6)二setw(6)三setw(6)四setw(6)五setw(6)六endl; for(int i=1;i=dayofmonth(year,month);i+) if(i=1) for(int j=1;jfn1(year,month,1);j+) coutsetw(6) ; coutsetw(6)i; else if(i+fn1(year,month,1)-2)%7=0) coutendl; coutsetw(6)i; coutendlendl;void fn3(int year) for(int i=1;i=12;i+) coutendlendl; couti月的日历如下:endl; fn2(year,i); coutendl; 2、 jisuanqi.cppcomplex.h#includeclass complexpublic:void print();complex();complex(float r,float i)real=r;image=i;virtualcomplex();friend complex operator +(complex a,complex b);friend complex operator -(complex a,complex b);friend complex operator *(complex a,complex b);friend complex operator /(complex a,complex b);private: float image; float real;matrix.hclass matrixpublic:void Disp();int matrix:operator()(short row,short col);void SetElem(short row,short col,int val); matrix();matrix(short r,short c) rows=r; cols=c; elems= new introws*cols;virtual matrix();friend matrix operator+(matrix p,matrix q);friend matrix operator-(matrix p,matrix q);friend matrix operator*(matrix p,matrix q);private:int*elems;short cols;short rows;rational.hclass rationalpublic:void print();rational (int x=0,int y=0);virtualrational(); friend rational operator +(rational num1,rational num2); friend rational operator -(rational num1,rational num2); friend rational operator *(rational num1,rational num2); friend rational operator /(rational num1,rational num2); friend bool operator =(rational num1,rational num2);friend double real(rational x);private:void optimization();int denominator;int numerator;set.henum errcode1noerr,overflow;class setpublic:void print();set()card=0;virtual set();errcode1 additem(int);friend bool operator &(int,set); friend bool operator =(set,set); friend bool operator !=(set,set);friend set operator *(set,set); friend set operator +(set,set); friend bool operator (set,set); friend bool operator =(set,set);private:int elems16;int card;complex.cpp#include stdafx.h#include#includecomplex.husing namespace std;complex:complex()complex:complex()void complex:print()cout0)cout+;if(image!=0)coutimagein;complex operator+(complex a,complex b)complex temp;temp.real=a.real+b.real;temp.image=a.image+b.image;return temp;complex operator-(complex a,complex b)complex temp;temp.real=a.real-b.real;temp.image=a.image-b.image;return temp;complex operator*(complex a,complex b)complex temp;temp.real=a.real*b.real-a.image*b.image;temp.image=a.real*b.image+a.image*b.rea

温馨提示

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

评论

0/150

提交评论