C++程序设计结课论文.docx
- 文档编号:8536448
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:20
- 大小:343.94KB
C++程序设计结课论文.docx
《C++程序设计结课论文.docx》由会员分享,可在线阅读,更多相关《C++程序设计结课论文.docx(20页珍藏版)》请在冰豆网上搜索。
C++程序设计结课论文
成绩
中国农业大学
课程论文
(2014-2015学年秋季学期)
论文题目:
C++程序设计期末
大作业实验报告
课程名称:
C++程序设计
任课教师:
班 级:
学 号:
姓 名:
C++程序设计期末大作业实验报告
CTest1
源代码:
CTest1_main.cpp(主函数):
#include
usingnamespacestd;
voidcircle();
voidrectangle();
voidtrangle();
doublereadch();
voidresult(doublel,doubles);
voidmain()
{
charn='a';
cout<<"******************************"< cout<<"******************************"< cout<<"***欢迎使用周长面积计算器! ***\n"; cout<<"******************************"< cout<<"******************************"< cout< cout<<"@使用说明: "< cout<<"@请您根据菜单提示使用本软件,每次只能输入一个数据,以回车作为结束,"< cout<<"多余字符将被舍弃。 "< cout<<"@请估计确认您的计算结果不会过于庞大,结果有效范围是(0,1.7*10^308]。 "< cout<<"@我们提供的计算结果将保留3位小数。 "< do { cout<<"我们可以为您提供三种图形的计算,请您输入您要计算图形的代码: \n"; cout<<"1————圆形;\n"; cout<<"2————长方形;\n"; cout<<"3————直角三角形;\n"; cout<<"0————退出程序;\n"; cout<<"您的选择: ";//菜单提示,循环出现 loop: cin>>n;//读取代码,标号loop fflush(stdin);//清空输入缓冲区,多余的输入将被舍弃,防止出现非法输入造成程序故障,因此使用说明中提示舍弃多余输入 cout< switch(n) { case'0': cout<<"$$$$$$$$$$$$$$$$$$$$\n"; cout<<"$$$感谢您的使用! $$$\n"; cout<<"$$$再见! $$$\n"; cout<<"$$$$$$$$$$$$$$$$$$$$\n"; exit(0);//代码0,退出程序,出现退出界面,退出程序 case'1': circle();//代码1,进入圆形计算函数 break; case'2': rectangle();//代码2,进入长方形计算函数 break; case'3': trangle();//代码3,进入直角三角形计算函数 break; default: cout<<"您输入的代码不能识别,代码只能是菜单中所列(0-3),请您重新输入: "; gotoloop;//用户输入非菜单中所列代码程序报错,请求重新输入,跳转标号loop所在位置,再次读取输入 } }while(n! ='0'); } CTest1_function.cpp(函数): #include #include #include usingnamespacestd; doublereadch()//读数据函数,功能包括判断输入数据类型正误、数据取值是否符合要求 { doublet; reputin: while(! (cin>>t))//判断输入类型是否正确,标号reputin { cin.sync();//清空cin缓冲区里面未读取的信息 cin.clear();//清除错误状态 cout<<"您输入的数据类型不能识别,请输入大于零的数字: "< } do { if(t<=0)//判断输入数据数值是否大于零 {cout<<"您输入的数字小于等于零,请输入大于零的数字,请重新输入: "< gotoreputin;}//转向标号reputin,重新获取输入,判断数据是否符合要求 }while(t<=0); fflush(stdin);//清空输入缓存区,多余输入被舍弃,防止在不知情的情况下多余数据流入下一次运算,因此使用说明中提示一次只能输入一个数据,多余数据被舍弃 returnt; } voidresult(doublel,doubles)//数据输出函数,进行周长和面积4位有效数字输出 { cout< : fixed)< cout< : fixed)< cout< : fixed);//取消固定格式输出 cout< cout< cout<<"############################################################"< cout< } voidcircle() { doublepi,r,l,s; cout<<"您选择了“圆形”,请您输入它的半径(r): "< cout<<"r="; r=readch();//利用读数据函数读取正确的r值 cout< pi=3.1415926; l=2*pi*r; s=pi*r*r;//圆形相关计算公式 cout<<"您给出的“圆形”的计算结果如下: "< result(l,s);//利用数据输出函数按固定格式输出结果 } voidrectangle() { doublea,b,l,s; cout<<"您选择了“长方形”,请您分别输入它的长(a)和宽(b): "< cout<<"a="; a=readch(); cout<<"b="; b=readch();//读数据 cout< l=2*(a+b); s=a*b;//长方形公式 cout<<"您给出的长方形的计算结果如下: "< result(l,s);//写数据 } voidtrangle() { doubleb,h,l,s,x2,x; cout<<"您选择了“直角三角形”,请您分别输入它的底边(b)和高(h): "< cout<<"b="; b=readch(); cout<<"h="; h=readch();//读数据 cout< x2=b*b+h*h; x=sqrt(x2); l=b+h+x; s=0.5*b*h;//直角三角公式 cout<<"您给出的直角三角形的计算结果如下: "< result(l,s);//写数据 } 程序测试结果及说明: 1.测试菜单选择(测试主函数),进行非法的输入,程序提示重新输入,会提示重新输入的情况有: 1)输入一个字符串; 2)出入单个任意字符; 3)输入一个菜单中没有的数; 4)按Enter、tab键,程序会继续等待有效输入; 5)以菜单中含有的字符开头进行输入会被识别,有效字符后的字符会被忽略舍弃。 2.在圆形模式下(测试circle函数),正确输入合法数据,测试是否得到保留3位小数的有效结果(测试result函数)。 3.正常进入长方形模式(测试rectangle函数),测试数据输入是否正常(测试readch函数),不能正确录入的原因有二: 1)数据类型不正确 除数字外其他字符开头(数字开头为合法,后面字符被舍弃)。 2)数据类型正确,但取值不符合要求 小于等于零的数均不合法,大于零实数为合法。 4.不断选择不同模式进行计算,测试主函数是否正常,菜单是否循环出现。 5.直角三角形模式下(测试trangle函数),输入两个整数,进一步测试result函数保留3位小数稳定性。 6.再次回到长方形模式,进行数据边界测试,输入两个较大的数,面积溢出,这是double型取值范围限定的,因此在使用说明中提示估计计算值是否超出边界,否则有溢出结果不准的危险。 7.测试数据边界,输入两个大小合适的数,结果正确表达。 8.测试数据边界,输入两个接近零的数,由于保留小数位的限制,结果近似为零,但依然体现精度。 9.测试数据边界,输入两个小数位较多的数,由于保留小数位的限制,结果为一具有一定精度的近似值。 10.测试程序退出机制和退出页面,输入菜单代码零,页面显示如图,程序测试完毕。 CTest2 源代码: CTest2_main.cpp(主函数): #include #include"CTest2_class.cpp"//包含类所在文件 usingnamespacestd; doublereadch(); voidresult(doublel,doubles); voidmain() { Circleyuan; Rectanglechangfang; tranglesanjiao;//声明对象 doubler,chang,kuan,di,gao; doublel,s; charn='a'; cout<<"******************************"< cout<<"******************************"< cout<<"***欢迎使用周长面积计算器! ***\n"; cout<<"******************************"< cout<<"******************************"< cout< cout<<"@使用说明: "< cout<<"@请您根据菜单提示使用本软件,每次只能输入一个数据,以回车作为结束,"< cout<<"多余字符将被舍弃。 "< cout<<"@请估计确认您的计算结果不会过于庞大,结果有效范围是(0,1.7*10^308]。 "< cout<<"@我们提供的计算结果将保留3位小数。 "< do { cout<<"我们可以为您提供三种图形的计算,请您输入您要计算图形的代码: \n"; cout<<"1————圆形;\n"; cout<<"2————长方形;\n"; cout<<"3————直角三角形;\n"; cout<<"0————退出程序;\n"; cout<<"您的选择: ";//菜单提示,循环出现 loop: cin>>n;//读取代码,标号loop fflush(stdin);//清空输入缓冲区,多余的输入将被舍弃,防止出现非法输入造成程序故障,因此使用说明中提示舍弃多余输入 cout< switch(n) { case'0': cout<<"$$$$$$$$$$$$$$$$$$$$\n"; cout<<"$$$感谢您的使用! $$$\n"; cout<<"$$$再见! $$$\n"; cout<<"$$$$$$$$$$$$$$$$$$$$\n"; exit(0);//代码0,退出程序,出现退出界面,退出程序 case'1': cout<<"您选择了“圆形”,请您输入它的半径(r): "< r=readch(); cout< yuan.Set(r);//赋值 l=yuan.Perimeter(); s=yuan.Area();//调用函数成员 cout<<"您给出的“圆形”的计算结果如下: "< result(l,s);//利用数据输出函数按固定格式输出结果 break; case'2': cout<<"您选择了“长方形”,请您分别输入它的长(a)和宽(b): "< cout<<"a="; chang=readch(); cout<<"b="; kuan=readch(); cout< changfang.Set(chang,kuan); l=changfang.Perimeter(); s=changfang.Area(); cout<<"您给出的长方形的计算结果如下: "< result(l,s); break; case'3': cout<<"您选择了“直角三角形”,请您分别输入它的底边(b)和高(h): "< cout<<"b="; di=readch(); cout<<"h="; gao=readch(); cout< sanjiao.Set(di,gao); l=sanjiao.Perimeter(); s=sanjiao.Area(); cout<<"您给出的直角三角形的计算结果如下: "< result(l,s); break; default: cout<<"您输入的代码不能识别,代码只能是菜单中所列(0-3),请您重新输入: "; gotoloop;//用户输入非菜单中所列代码程序报错,请求重新输入,跳转标号loop所在位置,再次读取输入 } }while(n! ='0'); } CTest2_class.cpp(类): #include classCircle//类的定义 { private: //私有数据成员 doubler; public: //公有函数成员 voidSet(doubledata) {r=data;}// doubleArea()//面积计算函数 {doubles=0; s=3.14*r*r; returns; } doublePerimeter()//周长计算函数 {doublel=0; l=2*3.14*r; returnl; } Circle()//不带参数的构造函数 {r=0;} Circle(doubledata)//带参数的构造函数 {r=data;} Circle(Circle&c)//拷贝构造函数 {r=c.r;} }; classRectangle { private: doublelength,width; public: voidSet(doublea,doubleb) {length=a;width=b;} doubleArea() { doublearea; area=length*width; returnarea; } doublePerimeter() {return2*(length+width);} Rectangle() {length=0;width=0;} Rectangle(doublea,doubleb) {length=a;width=b;} Rectangle(Rectangle&r) {length=r.length;width=r.width;} }; classtrangle { private: doubledi,gao; public: voidSet(doubleb,doubleh) {di=b;gao=h;} doubleArea() { doublearea; area=0.5*di*gao; returnarea; } doublePerimeter() {doublex2,x,l; x2=di*di+gao*gao; x=sqrt(x2); l=di+gao+x; returnl; } trangle() {di=0;gao=0;} trangle(doubleb,doubleh) {di=b;gao=h;} trangle(trangle&r) { di=r.di;gao=r.gao; } }; CTest2_function.cpp(函数): #include #include usingnamespacestd; doublereadch()//读数据函数,功能包括判断输入数据类型正误、数据取值是否符合要求 {doublet; reputin: while(! (cin>>t))//判断输入类型是否正确,标号reputin { cin.sync();//清空cin缓冲区里面未读取的信息 cin.clear();//清除错误状态 cout<<"您输入的数据类型不能识别,请输入大于零的数字: "< } do { if(t<=0)//判断输入数据数值是否大于零 {cout<<"您输入的数字小于等于零,请输入大于零的数字,请重新输入: "< gotoreputin;}//转向标号reputin,重新获取输入,判断数据是否符合要求 }while(t<=0); fflush(stdin);//清空输入缓存区,多余输入被舍弃,防止在不知情的情况下多余数据流入下一次运算,因此使用说明中提示一次只能输入一个数据,多余数据被舍弃 returnt; } voidresult(doublel,doubles)//数据输出函数,进行周长和面积4位有效数字输出 { cout< : fixed)< cout< : fixed)< cout< : fixed);//取消固定格式输出 cout< cout< cout<<"############################################################"< cout< } 程序测试结果及说明: 由于CTest2的主要算法和数据处理函数与CTest1相同,只是使用面向对象程序设计方法设计,因此不再重复CTest1中的测试,只测试程序是否成功运行,测试结果如以下截图。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 论文