C语言编程题及答案.doc_第1页
C语言编程题及答案.doc_第2页
C语言编程题及答案.doc_第3页
C语言编程题及答案.doc_第4页
C语言编程题及答案.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

C语言编程题及答案1、下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle)、并给出具体的求面积函数。 class shape public: virtual float area( )=0 ; float total(shape *s ,int n) float sum=0.0; for(int i=0; in: i+)sum=sum+i.area( ); return sum; 答案: #include 1分class triangle:public shape 1分public: virtual float area( )float s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c); 3分private:float a,b,c; 1分;class rectangle:public shape 1分public: virtual float area( )return a*b; 2分private:float a,b; 1分; 2、创建一个记录通讯录内容的新类Caddrlist,包含:姓名、住址、电话、出生日期,并使该类可以实现串行化。请写出可以实现要求的CAddrlist.h和CAddrlist.cpp文件的内容。答案:2、/Addrlist.h文件内容:class CAddrlist : public CObject 1分public:CString Name;CString Address;CString Tel;CTime Birth;CAddrlist(); 3分DECLARE_SERIAL(CAddrlist) / 使对象可串行化 1分 virtual void Serialize( CArchive & ar ); /重载串行化函数 1分;/ Addrlist.cpp文件内容:IMPLEMENT_SERIAL(CAddrlist,CObject, 0) 1分void CAddrlist:Serialize(CArchive & ar) CObject:Serialize(ar); 1分if ( ar.IsStoring() )arNameTelAddressNameTelAddressBirth; 1分3.(10分)已知点类的定义如下:class Pointprivate: double x,y;; 分别用成员函数和友元函数实现计算两点间的距离,函数名为distance。 答案:(10分)用成员函数实现(5分)double Point:distance( const Point &a ) double dx,dy;dx = x-a.x;dy = y-a.y;return sqrt( dx*dx + dy*dy );用友元函数实现(5分)double distance( const Point &a, const Point &b ) double dx,dy;dx = a.x-b.x;dy = a.y-b.y;return sqrt( dx*dx + dy*dy );4.(15分)要求计算立方体和圆柱2个几何体的表面积和体积。可以抽象出一个公共的基类Base,把它作为抽象类,在该类内定义求表面积和体积的纯虚函数(抽象类本身是没有表面积和体积可言的)。由这个抽象类派生出描述立方体和圆柱的2个具体类,在这2个类中都有计算表面积和体积的函数的自己版本。请用C+语言定义上述类等级。答案:每个类定义5分,共15分const double PI=3.14159;class Basepublic:virtual double area() const=0;virtual double volume() const=0; ;class Cube:public Basepublic:Cube(double l=10)length=l0 ? l : 10; double area() constreturn 6*length*length;double volume() const return length*length*length;private:double length;class Cylinder:public Basepublic:Cylinder(double r=10, double h=5)radius=r0 ? r : 10;height=h0 ? h : 5;double area() constreturn 2*PI*radius*radius+2*PI*radius*height;double volume() const return PI*radius*radius*height; private:double radius;double height;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分) void CExDlg:OnButtonMul( ) / 乘法按钮void CExDlg:OnButtondIV( ) / 除法按钮答案:5、 void CExDlg:OnButtonMul() (5分) UpdateDate(TRUE); m_z = m_x * m_y; UpdateDate(FALSE); void CExDlg:OnButtonDiv() (5分) UpdateDate(TRUE); if ( m_y = 0 ) MessageBox( “除数不能为0!”);return;m_z = m_x / m_y; UpdateDate(FALSE); 6.(10分)设计一个基于对话框的应用程序,如下图所示。要求:单击Color按钮,能弹出通用颜色对话框选取颜色,并用该颜色显示:This is a color example。已知:Example组合框的ID为:IDC_DISPLAY。写出Color按钮的BN_CLICKED消息处理函数。void CXT6_4Dlg:OnColor()答案: void CXT6_4Dlg:OnColor() / TODO: Add your control notification handler code hereCOLORREF m_cTextColor;CColorDialog Dlg;if ( Dlg.DoModal()=IDOK )m_cTextColor=Dlg.GetColor();CWnd * pWnd=GetDlgItem(IDC_DISPLAY);CDC * pDC=pWnd-GetDC();CRect rcDisplay;pWnd-GetClientRect(rcDisplay);pDC-SetTextColor(m_cTextColor);CString s=This is a color example; DC-TextOut(rcDisplay.right/2-80,rcDisplay.bottom/2-5,s);7:(10分)为学员信息设计一个类CStudent,包含:学号、姓名、出生日期、家庭住址、班级,并使该类可以实现串行化。请写出可以实现要求的CStudent.h和CStudent.cpp文件的内容。答案: /CStudent.hclass CStudent :public CObject 1分public:CString Num;CString Name;CTime Birth;CString Address;CString Grade; 2分 DECLARE_SERIAL(CStudent) / 使对象可串行化 1分 virtual void Serialize( CArchive & ar ); /重载串行化函数 1分;/ CStudent.cppIMPLEMENT_SERIAL(CStudent ,CObject, 0) 1分void CStudent:Serialize(CArchive & ar)CObject:Serialize(ar); 1分if ( ar.IsStoring() ) 1分arNumName Birth AddressNumName Birth AddressGrade; 1分8、如何定义ODBC的数据源?试叙述其过程。(5分)答案: 打开控制面板,双击ODBC图标,进入ODBC数据源管理器。定义用户DSN的步骤如下:单击【添加】按钮,弹出“创建新数据源”对话框。为新的数据源选择数据库驱动程序。并单击【完成】按钮。在“ODBC Microsoft Access 97 安装”对话框中,应为该数据源起一个简短的名称。并在下一个编辑框中输入对该数据库的说明。指定数据库的位置。单击【选取】按钮,然后指定所创建的Access数据库。单击【确定】按钮,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。9.该应用有4个命令按钮,作为增加项目、删除项目和全部删除项目以及退出程序的按键。另外,还有一个编辑框作为新项目名称输入框IDC_NAME_EDIT对应控件变量为m_Name(类型为CString),1个静态文本用于显示项目数目,列表框用于项目列表对应控件变量为m_List1,1个静态文本用于显示标题。界面下图所示。 根据要求写出代码:(1)对话框初始化消息处理函数OnInitDialog()里,向列表框添加“China”,“Germany”两项内容。BOOL CEx6_3Dlg:OnInitDialog()return TRUE; (2) “增加”命令按钮的单击消息处理函数OnAdd() 将新项目名称输入框的内容增加到列表框中。void CEx6_3Dlg:OnAdd() (3)“删除”按钮的单击消息处理函数OnDel() 将当前列表框中选中的项删除void CEx6_3Dlg:OnDel() 答案:第一个函数5分,第二个函数8分,第三个函数7分,(1) BOOL CEx6_3Dlg:OnInitDialog( ) m_List1.AddString(China); m_List1.AddString(Germany);UpdateData(FALSE);return TRUE;(2) void CEx6_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) void CEx6_3Dlg:OnDel( ) int nIndex=m_List1.GetCurSel();if(nIndex!=LB_ERR)m_List1.DeleteString(nIndex);elseMessageBox(当前没有选择项或列表框操作失败);UpdateData(FALSE); 10.4、下面是一个基于对话框的应用程序,用来求解一元二次方程的根。当用户在A、B、C 三个编辑框中输入3个参数后,单击【计算】按钮,将显示出该方程的根。(10分)试写出计算按钮的单击消息处理函数。void CEx3_4Dlg:OnButton1() 答案: void CEx6_1Dlg:OnButton1() UpdateData(); double disc;disc=(double)(m_b*m_b-4*m_a*m_c);if ( fabs(disc)1e-6 ) /如果disc大于0 double x1,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小于0double realpart,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:编程求100300之间的所有素数。要求(1)每行输出5个素数;(2)判断一个整数是否为素数用一个函数来实现;/(3)将程序运行的结果存放在文件data.txt中。#include/#include#include#includeint prime(int n) int i,k; k=sqrt(n); for(i=2;i=k)return 1; else return 0;void main(void) /*ofstream file(data.txt); if(!file) coutCant open the file!; exit(1); */ int i, g=0; for(i=101;i300;i+=2) if(prime(i) couti ; /filei ; +g ; if(g%5=0) /filen; coutn; /file.close( ); coutn;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)。答案:class Pointprivate:int x,y;public:set(int a, int b)x = a;y = b;int getx()return x;int gety()return y;void print()coutx轴的坐标:x,y轴的坐标:yendl;Point(int a = 0, int b = 0)x = a;y = b;void main()Point p1;p1.print();Point p2(2,3);p2.print();p2.set(3,4);coutp2.getx()t;coutp2.gety();coutendl;p2.print();13.要求设计一个用于维护联系人的 SDI 应用程序 Addrbook ,完成这些功能:从文件读取所有联系人、显示所有联系人、将所有的联系人保存到文件。 程序中用到的类定义如下, 在不修改类定义的前提下完成实现程序功能所需的类成员函数。(注:未用到的类定义已省略,注意黑体字的提示) /contact.h ,联系人类定义文件 class CContact : public CObject public: CContact (); CContact ( CString name,CString tel,CString email ) public: CString m_strName; CString m_strTel; CString m_strEmail; ; /contact.cpp ,联系人类实现文件 CContact: CContact ( CString name,CString tel,CString email ) m_strName=name; m_strTel=tel; m_strEmail=email /AddrbookDoc.h ,文档类定义文件 class CContact; class CAddrbookDoc : public CDocument protected: / create from serialization only CAddrbookDoc(); DECLARE_DYNCREATE(CAddrbookDoc) / Attributes public: / 存放联系人的链表 CTypedPtrList m_ContactList; /AFX_VIRTUAL(CAddrbookDoc) public: virtual BOOL OnNewDocument(); virtual void Serialize(CArchive& ar); virtual void DeleteContents(); /AFX_VIRTUAL / Implementation public: virtual CAddrbookDoc(); #ifdef _DEBUG virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif protected: / Generated message map functions protected: /AFX_MSG(CAddrbookDoc) /AFX_MSG DECLARE_MESSAGE_MAP() ; 1. 完成此函数,此函数在加载新的联系人文件或退出程序时清空联系人链表( 10 分) /AddrbookDoc.cpp ,文档类实现文件 void CAddrbookDoc:DeleteContents() CDocument:DeleteContents(); 答案:1. void CAddrbookDoc:DeleteContents() POSITION pos=m_ContactList.GetHeadPosition();while(pos!=NULL)CContact *pContact;pContact=(CContact *)m_ContactList.GetNext(pos);delete pContact;ContactList.RemoveAll();CDocument:DeleteContents();14. 完成此函数,此函数完成从文件读取所有的联系人存放在链表中,以及将链表中所有联系人保存到文件的功能( 20 分) void CAddrbookDoc:Serialize(CArchive& ar) if (ar.IsStoring() else /AddrbookView.cpp, 视图类实现文件 答案: void CAddrbookDoc:Serialize(CArchive& ar)if (ar.IsStoring()POSITION pos=m_ContactList.GetHeadPosition();while(pos!=NULL)CContact *pContact;pContact=(CContact *)m_ContactList.GetNextPosition(pos);arm_strName;arm_strTel;arm_strEMail;elsewhile(TRUE)tryCString name,tel,email;arnametelemail;CContact *pContact=new CContact(name,tel,email);m_ContactList.AddTail(pContact);catch(CArchiveException *e)break;15完成此函数,在此函数中显示所有练习人的信息,格式如下( 10 分) 姓名 电话 电子邮件 xxxx xxxx xxxxxxxxxx void CAddrbookView:OnDraw(CDC* pDC) CAddrBookDoc *pDoc=GetDocument(); ASSERT_VALID(pDoc); 答案:void CAddrbookView:OnDraw(CDC* pDC)CAddrBookDoc *pDoc=GetDocument();ASSERT_VALID(pDoc);pDC-TextOut(20,10,姓名);pDC-TextOut(100,10,电话);pDC-TextOut(200,10,电子邮件);pDC-MoveTo(20,25);pDC-LineTo(300,25);POSITION pos=pDoc-m_ContactList.GetHeadPosition();y=30;while(pos!=NULL)CContact *pContact;pContact=(CContact *)pDoc-m_ContactList.GetNextPosition(pos);pDC-TextOut(20,y,pContact-m_strName);pDC-TextOut(100,y,pContact-m_strTel);pDC-TextOut(200,y0,pContact-m_strEMail);y+=20;

温馨提示

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

评论

0/150

提交评论