C++第一单元实验一第二题-菜单选择程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【设计题目】
设计菜单选择趣味程序
【设计要求】
菜单是应用程序的界面,本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。
菜单内容
程序运行后,界面给出3个菜单项的内容和输入提示。
1.解一元二次方程
2.出圈游戏
3.退出程序
选择l-3:
使用数字1-3来选择菜单项,执行相应的菜单项功能,其他输入则不起作用。
【总体设计】
一、菜单驱动程序
输入1-3之间的任意一个数字,即可进入相应选择项。从程序测试结果可知,当选择相应选择项时,其输出信息分别为:解一元二次方程、出圈游戏和退出程序。
1.主程序的设计
假设使用文件select.cpp,内容如下:
/*********************************
*select.cpp主程序文件
*********************************/
#include"cpp2.h"
void main()
{
handle_menu(); //调用菜单处理函数
}
2.实现循环和功能选择的设计-菜单处理函数
/*********************************
*菜单处理函数
*********************************/
void handle_menu(void)
{
for(; ;)
{
switch(menu_select())//调用菜单选择函数
{
case 1:
FindIt();//求解一元二次方程
break;
case 2:
game();//出圈游戏
break;
case 3:
cout<<"\t再见!\n";
return;
}
}
}
这里使用for循环实现重复选择,假设输入选择用变量用cn存储,它作为menu_select()函数的返回值提供给switch语句。
3.得到cn的合理值的设计-菜单选择函数
应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数
值cn,以便供给switch语句使用。
/*********************************
*菜单选择函数
**********************************/
int menu_select()
{
char s[2];
int cn;
cout<<"\t1.解一元二次方程\n";
cout<<"\t2.出圈游戏\n";
cout<<"\t3.退出程序\n";
cout<<"\t选择1-3:";
for(; ;)
{
gets(s);
cn=atoi(s); // 是为了使输入的字符串转变为数字
if(cn<1||cn>3)
printf("\n\t输入错误,重选1-3:");
else
break;
}
return cn;
}
二、求解一元二次方程
1.设计要求
这里要求编制一个求方程aX2+bx+c=0的根的程序。一般将系数设成float型,可以把求根变量设成double型,使用库函数sqrt()求平方根,sqrt()在头文件math.h中定义。
假设:d=b*b-4*a-c可以根据d>0、=0或<0来决定求解方法。
if(d>0)
{//有两个不相等的实数解}
else if(d==0)
{//有两个相等的实数解}
else
{//有两个不相等的虚数解}
2.设计方法
(1)设计一个FindRoot 类表示这个方程。
(2)在头文件cpp2.h 中声明类,在FindRoot.cpp 文件中定义成员函数。
(3)使用函数Findlt()作为菜单项。
3.类FindRoot 的设计
为了方便,除了将方程系数设计为属性之外,还将方程的根x1和x2,以及用来作为判定条件的d(d=b*b-4*a*c)均设计成类的属性。如图1是其类图,图2是对象obj 的对象图。
其中,成员函数Find()是用来求方程的根,Display()则用来输出结果。由此可见,它们都需要用到属性d 。可在构造函数中求出d 的值,其他成员函数直接使用这个属性,不必再去计算。
图1 类图 图2obj 对象图
①.设计构造函数
FindRoot::FindRoot(float x,float y,float z)
{
a=x;b=y;c=z;
d=b*b-4*a*c;
}
② 设计求根成员函数Find()
void FindRoot::Find()
{
if ( d>0)
{
x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a);
return;
}
else if(d==0)
{
x1=x2=(-b)/(2*a);
return;
}
else
{
x1=(-b)/(2*a);
x2=sqrt(-d)/(2*a);
}
}
③设计输出结果的成员函数Display()
void FindRoot::Display()
{
if(d>0)
{
cout<<"x1="< return; } else if(d==0) { cout<<"xl=x2="< return; } else { cout<<"Xl="<