C语言编程题及答案.docx
- 文档编号:11608710
- 上传时间:2023-03-28
- 格式:DOCX
- 页数:20
- 大小:70.44KB
C语言编程题及答案.docx
《C语言编程题及答案.docx》由会员分享,可在线阅读,更多相关《C语言编程题及答案.docx(20页珍藏版)》请在冰豆网上搜索。
C语言编程题及答案
C语言编程题及答案
1、下列shape类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。
请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。
classshape{
public:
virtualfloatarea()=0
};
floattotal(shape*s[],intn)
{floatsum=0.0;
for(inti=0;i i++) sum=sum+i.area(); returnsum; } 答案: #include classtriangle: publicshape{1分 public: virtualfloatarea() { floats=(a+b+c)/2; returnsqrt(s*(s-a)*(s-b)*(s-c));3分 } private: floata,b,c;1分 }; classrectangle: publicshape{1分 public: virtualfloatarea() { returna*b;2分 } private: floata,b;1分 }; 2、创建一个记录通讯录内容的新类Caddrlist,包含: 姓名、住址、电话、出生日期,并使该类可以实现串行化。 请写出可以实现要求的CAddrlist.h和CAddrlist.cpp文件的内容。 答案: 2、 //Addrlist.h文件内容: classCAddrlist: publicCObject{1分 public: CStringName; CStringAddress; CStringTel; CTimeBirth; CAddrlist();3分 DECLARE_SERIAL(CAddrlist)//使对象可串行化1分 virtualvoidSerialize(CArchive&ar);//重载串行化函数1分 }; //Addrlist.cpp文件内容: IMPLEMENT_SERIAL(CAddrlist,CObject,0)1分 voidCAddrlist: : Serialize(CArchive&ar) {CObject: : Serialize(ar);1分 if(ar.IsStoring()) {ar< } else {ar>>Name>>Tel>>Address>>Birth;1分 } } 3.(10分)已知点类的定义如下: classPoint{ …… private: doublex,y; }; 分别用成员函数和友元函数实现计算两点间的距离,函数名为distance。 答案: (10分) 用成员函数实现(5分) doublePoint: : distance(constPoint&a) {doubledx,dy; dx=x-a.x; dy=y-a.y; returnsqrt(dx*dx+dy*dy); } 用友元函数实现(5分) doubledistance(constPoint&a,constPoint&b) {doubledx,dy; dx=a.x-b.x; dy=a.y-b.y; returnsqrt(dx*dx+dy*dy); } 4.(15分)要求计算立方体和圆柱2个几何体的表面积和体积。 可以抽象出一个公共的基类Base,把它作为抽象类,在该类内定义求表面积和体积的纯虚函数(抽象类本身是没有表面积和体积可言的)。 由这个抽象类派生出描述立方体和圆柱的2个具体类,在这2个类中都有计算表面积和体积的函数的自己版本。 请用C++语言定义上述类等级。 答案: 每个类定义5分,共15分 constdoublePI=3.14159; classBase{ public: virtualdoublearea()const=0; virtualdoublevolume()const=0; }; classCube: publicBase{ public: Cube(doublel=10) {length=l>0? l: 10;} doublearea()const {return6*length*length;} doublevolume()const {returnlength*length*length;} private: doublelength; }; classCylinder: publicBase{ public: Cylinder(doubler=10,doubleh=5) {radius=r>0? r: 10; height=h>0? h: 5; } doublearea()const {return2*PI*radius*radius+2*PI*radius*height;} doublevolume()const {returnPI*radius*radius*height;} private: doubleradius; doubleheight; }; 5: 3、(10分)简单计算程序界面如下图所示,x对应编辑框控件的ID为IDC_EDIT1,对应值类型的成员变量m_x(double);y对应编辑框控件的ID为IDC_EDIT2,对应值类型成员变量m_y(double);z对应的编辑框控件的ID为IDC_EDIT3,对应值类型的成员变量m_z(double)。 乘法按钮的功能是将x,y相乘,除法按钮的功能是将x,y相除,并将结果在z对应的编辑框IDC_EDIT3显示出来。 写出乘法按钮和除法按钮对应的代码。 (10分) voidCExDlg: : OnButtonMul()//乘法按钮 { } voidCExDlg: : OnButtondIV()//除法按钮 { } 答案: 5、voidCExDlg: : OnButtonMul()(5分) {UpdateDate(TRUE); m_z=m_x*m_y; UpdateDate(FALSE); } voidCExDlg: : OnButtonDiv()(5分) {UpdateDate(TRUE); if(m_y==0) {MessageBox(“除数不能为0! ”); return; } m_z=m_x/m_y; UpdateDate(FALSE); 6.(10分)设计一个基于对话框的应用程序,如下图所示。 要求: 单击Color按钮,能弹出通用颜色对话框选取颜色,并用该颜色显示: Thisisacolorexample。 已知: Example组合框的ID为: IDC_DISPLAY。 写出Color按钮的BN_CLICKED消息处理函数。 voidCXT6_4Dlg: : OnColor() { } 答案: voidCXT6_4Dlg: : OnColor() { //TODO: Addyourcontrolnotificationhandlercodehere COLORREFm_cTextColor; CColorDialogDlg; if(Dlg.DoModal()==IDOK) { m_cTextColor=Dlg.GetColor(); CWnd*pWnd=GetDlgItem(IDC_DISPLAY); CDC*pDC=pWnd->GetDC(); CRectrcDisplay; pWnd->GetClientRect(rcDisplay); pDC->SetTextColor(m_cTextColor); CStrings="Thisisacolorexample"; DC->TextOut(rcDisplay.right/2-80,rcDisplay.bottom/2-5,s); } } 7: (10分)为学员信息设计一个类CStudent,包含: 学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化。 请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容。 答案: //CStudent.h classCStudent: publicCObject{1分 public: CStringNum; CStringName; CTimeBirth; CStringAddress; CStringGrade;2分 DECLARE_SERIAL(CStudent)//使对象可串行化1分 virtualvoidSerialize(CArchive&ar);//重载串行化函数1分 }; //CStudent.cpp IMPLEMENT_SERIAL(CStudent,CObject,0)1分 voidCStudent: Serialize(CArchive&ar) {CObject: : Serialize(ar);1分 if(ar.IsStoring())1分 {ar< } else {ar>>Num>>Name>>Birth>>Address>>Grade;1分 } } 8、如何定义ODBC的数据源? 试叙述其过程。 (5分) 答案: 打开控制面板,双击ODBC图标,进入ODBC数据源管理器。 定义用户DSN的步骤如下: 单击【添加】按钮,弹出“创建新数据源”对话框。 为新的数据源选择数据库驱动程序。 并单击【完成】按钮。 在“ODBCMicrosoftAccess97安装”对话框中,应为该数据源起一个简短的名称。 并在下一个编辑框中输入对该数据库的说明。 指定数据库的位置。 单击【选取】按钮,然后指定所创建的Access数据库。 单击【确定】按钮,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。 9.该应用有4个命令按钮,作为增加项目、删除项目和全部删除项目以及退出程序的按键。 另外,还有一个编辑框作为新项目名称输入框IDC_NAME_EDIT对应控件变量为m_Name(类型为CString),1个静态文本用于显示项目数目,列表框用于项目列表对应控件变量为m_List1,1个静态文本用于显示标题。 界面下图所示。 根据要求写出代码: (1)对话框初始化消息处理函数OnInitDialog()里,向列表框添加“China”,“Germany”两项内容。 BOOLCEx6_3Dlg: : OnInitDialog() { returnTRUE; } (2)“增加”命令按钮的单击消息处理函数OnAdd()将新项目名称输入框的内容增加到列表框中。 voidCEx6_3Dlg: : OnAdd() { } (3)“删除”按钮的单击消息处理函数OnDel()将当前列表框中选中的项删除 voidCEx6_3Dlg: : OnDel() { } 答案: 第一个函数5分,第二个函数8分,第三个函数7分, (1)BOOLCEx6_3Dlg: : OnInitDialog() {m_List1.AddString("China"); m_List1.AddString("Germany"); UpdateData(FALSE); returnTRUE; } (2)voidCEx6_3Dlg: : OnAdd() {if(m_Name.IsEmpty()) {MessageBox("项目名不能为空! "); return; } m_Name.TrimLeft(); m_Name.TrimRight(); if(m_List1.FindString(-1,m_Name)! =LB_ERR) {MessageBox("列表框中已有相同的项目名,不能添加! "); return; } m_List1.AddString(m_Name); UpdateData(FALSE); } (3)voidCEx6_3Dlg: : OnDel() {intnIndex=m_List1.GetCurSel(); if(nIndex! =LB_ERR) {m_List1.DeleteString(nIndex);} else MessageBox("当前没有选择项或列表框操作失败"); UpdateData(FALSE); } 10.4、下面是一个基于对话框的应用程序,用来求解一元二次方程的根。 当用户在A、B、C三个编辑框中输入3个参数后,单击【计算】按钮,将显示出该方程的根。 (10分) 试写出计算按钮的单击消息处理函数。 voidCEx3_4Dlg: : OnButton1() { } 答案: voidCEx6_1Dlg: : OnButton1() { UpdateData(); doubledisc; disc=(double)(m_b*m_b-4*m_a*m_c); if(fabs(disc)<=1e-6)//如果disc等于0 {m_x1.Format("x1=%6.2f",-m_b/(2*m_a)); m_x2.Format("x2=%6.2f",-m_b/(2*m_a)); } elseif(disc>1e-6)//如果disc大于0 {doublex1,x2; x1=(-m_b-sqrt(disc))/(2*m_a); x2=(-m_b+sqrt(disc))/(2*m_a); m_x1.Format("x1=%6.2f",x1); m_x2.Format("x2=%6.2f",x2); } else//如果disc小于0 { doublerealpart,imagpart; realpart=-m_b/(2*m_a); imagpart=sqrt(-disc)/(2*m_a); m_x1.Format("x1=%6.2f+%6.2fi",realpart,imagpart); m_x2.Format("x2=%6.2f-%6.2fi",realpart,imagpart); } UpdateData(FALSE); } 11: 编程求100—300之间的所有素数。 要求 (1)每行输出5个素数; (2)判断一个整数是否为素数用一个函数来实现; //(3)将程序运行的结果存放在文件data.txt中。 #include //#include #include #include intprime(intn) { inti,k; k=sqrt(n); for(i=2;i if(n%i==0)break; if(i>=k)return1; elsereturn0; } voidmain(void) { /* ofstreamfile("data.txt"); if(! file) {cout<<"Can'topenthefile! "; exit (1); }*/ inti,g=0; for(i=101;i<300;i+=2) { if(prime(i)) { cout< //file< ++g; if(g%5==0){ //file<<'\n'; cout<<'\n'; } } } //file.close();cout<<'\n'; } 12: 四.根据要求写出程序 1.平面上的点可用坐标(x,y)表示,试用C++设计一个Point类(4分), 其要求为: (1)私有数据为点坐标(x,y),用整型数表示; (2)类对外的接口有: 给定一对整型数(a,b),置点坐标(x,y);可取坐标x;可取坐标y;可从标准输出设备输出对象的坐标; (3)在定义一个Point类的对象时,可用给定的数据初始化(x,y);若没有给出初始化数据,则(x,y)为(0,0)。 答案: classPoint { private: intx,y; public: set(inta,intb) { x=a; y=b; } intgetx() { returnx; } intgety() { returny; } voidprint() { cout<<"x轴的坐标: "< "< } Point(inta=0,intb=0) { x=a; y=b; } }; voidmain() { Pointp1; p1.print(); Pointp2(2,3); p2.print(); p2.set(3,4); cout< cout< cout< p2.print(); } 13.要求设计一个用于维护联系人的SDI应用程序Addrbook,完成这些功能: 从文件读取所有联系人、显示所有联系人、将所有的联系人保存到文件。 程序中用到的类定义如下,在不修改类定义的前提下完成实现程序功能所需的类成员函数。 (注: 未用到的类定义已省略,注意黑体字的提示) //contact.h,联系人类定义文件 classCContact: publicCObject { public: CContact(); CContact(CStringname,CStringtel,CStringemail) public: CStringm_strName; CStringm_strTel; CStringm_strEmail; }; //contact.cpp,联系人类实现文件 CContact: : CContact(CStringname,CStringtel,CStringemail) { m_strName=name; m_strTel=tel; m_strEmail=email } //AddrbookDoc.h,文档类定义文件 classCContact; classCAddrbookDoc: publicCDocument { protected: //createfromserializationonly CAddrbookDoc(); DECLARE_DYNCREATE(CAddrbookDoc) //Attributes public: //存放联系人的链表 CTypedPtrList //{{AFX_VIRTUAL(CAddrbookDoc) public: virtualBOOLOnNewDocument(); virtualvoidSerialize(CArchive&ar); virtualvoidDeleteContents(); //}}AFX_VIRTUAL //Implementation public: virtual~CAddrbookDoc(); #ifdef_DEBUG virtualvoidAssertValid()const; virtualvoidDump(CDumpContext&dc)const; #endif protected: //Generatedmessagemapfunctions protected: //{{AFX_MSG(CAddrbookDoc) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; 1.完成此函数,此函数在加载新的联系人文件或退出程序时清空联系人链表(10分) //AddrbookDoc.cpp,文档类实现文件 voidCAddrbookDoc: : DeleteContents() { CDocument: : DeleteContents(); } 答案: 1.voidCAddrbookDoc: : DeleteContents() { POSITIONpos=m_ContactList.GetHeadPosition(); while(pos! =NULL){ CContact*pContact; pContact=(CContact*)m_ContactList.GetNext(pos); deletepContact; } ContactList.RemoveAll(); CDocument: : DeleteContents(); } 14.完成此函数,此函数完成从文件读取所有的联系人存放在链表中,以及将链表中所有联系人保存到文件的功能(20分) voidCAddrbookDoc: : Serialize(CArchive&ar) { if(ar.IsStoring()) { } else { } } //AddrbookView.cpp,视图类实现文件 答案: voidCAddrbookDoc: : Serialize(CArchive&ar) { if(ar.IsStoring()) { POSITIONpos=m_ContactList.GetHeadPosition(); while(pos! =NULL){ CContact*pContact; pContact=(CContact*)m_ContactList.GetNextPosition(pos); ar< ar< ar<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)