c+
编程
汇总
450
第 1 页 共 13 页学号姓名院(部)专业考试时间:2008 年月日-密-封-线-c+编程题试卷试卷第三章第三章1.1.编编写一写一个求方个求方程程ax2+bx+c=0ax2+bx+c=0的根的根 的程序的程序,用3,用3个个函函数分别求数分别求当当b2-4acb2-4ac大大于零、于零、等等于零、和于零、和小小于零于零时的方程的根时的方程的根。要。要求从主求从主函函数输数输入 a,b,c入 a,b,c 的值并的值并输出结输出结果。果。#include#include void equation_1(int a,int b,int c)double x1,x2,temp;temp=b*b-4*a*c;x1=(-b+sqrt(temp)/(2*a*1.0);x2=(-b-sqrt(temp)/(2*a*1.0);cout两个不相等的实根 endl;coutx1=x1,x2=x2 endl;void equation_2(int a,int b,int c)double x1,x2,temp;temp=b*b-4*a*c;x1=(-b+sqrt(temp)/(2*a*1.0);x2=x1;cout两个相等的实根 endl;coutx1=x1,x2=x2 endl;void equation_3(int a,int b,int c)double temp,real1,real2,image1,image2;temp=-(b*b-4*a*c);real1=-b/(2*a*1.0);real2=real1;image1=sqrt(temp);image2=-image1;cout两个虚根 endl;coutx1=real1+image1j endl;coutx2=real2+image2j endl;void main()int a,b,c;double temp;cout输入 a,b,c 的值abc;cout方程为:ax*x+bx+c=0 0)equation_1(a,b,c);if(temp=0)equation_2(a,b,c);if(temp 0)equation_3(a,b,c);2.定义函数 up(ch),如字符变量 ch 是小写字母就转换成大写字母并通过 up2.定义函数 up(ch),如字符变量 ch 是小写字母就转换成大写字母并通过 up返返回,否回,否则字符则字符 ch 不ch 不改变改变。要。要求在短小求在短小而而完全的程序中完全的程序中显示显示这个程序是怎样这个程序是怎样被被调用调用的的。#include using namespace std;char up(char c)if(c=97&c=122)return(c-32);elsereturn c;void main()int i;char c15=A,v,e,t,E,T,%,&,4,Y,e,i,9,;for(i=0;i 15;i+)cout up(ci),;cout endl;3.编写主程序条用带实数 r 和整数 n 两个参数的函数并输出 r 的 n 次幂。3.编写主程序条用带实数 r 和整数 n 两个参数的函数并输出 r 的 n 次幂。#include#include double power(double a,int b)int i;double result=1.0;for(i=0;i b;i+)result=result*a;return result;重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 2 页 共 13 页void main()double r;int n;coutr;coutn;cout r的 n次幂是:power(r,n)endl;4.编写有字符型参数 C 和整形参数 N 的函数,让他们显示出由字符 C 组成的三4.编写有字符型参数 C 和整形参数 N 的函数,让他们显示出由字符 C 组成的三角形角形。其方式为第其方式为第 1 1 行有行有 1 1 个字符个字符 C,C,第第 2 2 行有行有 2 2 个字符个字符 C,C,等等等等。#include using namespace std;void print_triangle(char c,int n)int i,j;for(i=0;i n;i+)for(j=0;j=i;j+)cout c;cout endl;void main()print_triangle(a,10);5.编写一个 ieqiu 字符串长度的函数,strlen(),再用 strlen()函数编写一5.编写一个 ieqiu 字符串长度的函数,strlen(),再用 strlen()函数编写一个个函函数数 revers(s)revers(s)的倒序递归程序的倒序递归程序,使字符串使字符串 s s 逆序逆序。#include#include using namespace std;int strlen(char*str)int len=0;while(strlen!=0)len+;return len;void revers(char*b)char c;int j,len;len=strlen(b);j=len/2-1;while(j=0)c=*(b+j);*(b+j)=*(b+len-j-1);*(b+len-j-1)=c;j-;blen=0;void main()char str=1234567890;cout str-的长度:strlen(str)endl;cout str endl;/倒序前revers(str);/cout str endl;/倒序后6.用函数模板实现 3 个数值中按最小值到最大值排序的程序。6.用函数模板实现 3 个数值中按最小值到最大值排序的程序。#include using namespace std;templatevoid sort(T a,T b,T c)T array3,temp;int i,j;array0=a;array1=b;array2=c;for(i=0;i3;i+)for(j=0;jarrayj+1)temp=arrayj;arrayj=arrayj+1;arrayj+1=temp;cout array0 array1 array2 endl;void main()sort(5,1,9);第 3 页 共 13 页7.利用函数模板设计一个求数组元素中和的函数,并检验之。7.利用函数模板设计一个求数组元素中和的函数,并检验之。#include using namespace std;templateT sum(T a,int n)int i;T s=0;for(i=0;i n;i+)s=s+ai;return s;void main()int a5=1,2,3,4,5;int s=sum(a,5);cout s endl;8.重载上题中的函数模板,使他能够进行两个数组的求和。8.重载上题中的函数模板,使他能够进行两个数组的求和。#include using namespace std;templateT sum(T a,int n)int i;T s=0;for(i=0;i n;i+)s=s+ai;return s;template/重载上面的模板T sum(T a,int n,T b,int m)return sum(a,n)+sum(b,m);void main()int a5=1,2,3,4,5;int b10=1,2,3,4,5,6,7,8,9,10;int s1=sum(a,5);int s2=sum(b,10);int s3=sum(a,5,b,10);cout s1 endl;cout s2 endl;cout s3 endl;第四章第四章1.设计一个点类 Point,再设计一个矩形类,矩形类使用 Point 类的两个坐1.设计一个点类 Point,再设计一个矩形类,矩形类使用 Point 类的两个坐标点作为矩形的对角标点作为矩形的对角顶顶点点。并并可可以输出以输出 4 4 个坐标值个坐标值和面积。和面积。使使用用测试程序验测试程序验证证程序程序。#includeusing namespace std;class Point/点类private:int x,y;/私有成员变量,坐标public:Point()/无参数的构造方法,对 xy 初始化x=0;y=0;Point(int a,int b)x=a;y=b;void setXY(int a,int b)x=a;y=b;int getX()/得到 x 的方法return x;int getY()/得到有的函数return y;class Rectangle/矩形类private:Point point1,point2,point3,point4;public:Rectangle();/类 Point 的无参构造函数已经对每个对象做初始化啦,这里不用对每个点多初始化了Rectangle(Point one,Point two)point1=one;重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 4 页 共 13 页point4=two;init();Rectangle(int x1,int y1,int x2,int y2)point1.setXY(x1,y1);point4.setXY(x2,y2);init();void init()/给另外两个点做初始化的函数point2.setXY(point4.getX(),point1.getY();point3.setXY(point1.getX(),point4.getY();void printPoint()/打印四个点的函数coutA:(point1.getX(),point1.getY()endl;coutB:(point2.getX(),point2.getY()endl;coutC:(point3.getX(),point3.getY()endl;coutD:(point4.getX(),point4.getY()0)return area;elsereturn-area;void main()Point p1(-15,56),p2(89,-10);/定义两个点Rectangle r1(p1,p2);/用两个点做参数,声明一个矩形对象 r1Rectangle r2(1,5,5,1);/用两队左边,声明一个矩形对象 r2cout矩形 r1 的 4 个定点坐标:endl;r1.printPoint();cout矩形 r1 的面积:r1.getArea()endl;coutn 矩形 r2 的 4 个定点坐标:endl;r2.printPoint();cout矩形 r2 的面积:r2.getArea()endl;2.2.使使用用内联内联函函数设计数设计一一个类个类,用,用来表来表示示直角坐标系中的任意直角坐标系中的任意一一条直线并输出条直线并输出它的属性它的属性。#include#include class Lineprivate:int x1,y1,x2,y2;public:Line();Line(int=0,int=0,int=0,int=0);void printPoint();double getLength();inline Line:Line(int a,int b,int c,int d)x1=a;y1=b;x2=c;y2=d;inline void Line:printPoint()coutA:x1,y1 endl;coutB:x2,y2 endl;inline double Line:getLength()double length;length=sqrt(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);return length;void main()Line line(10,80,-10,12);line.printPoint();cout line.getLength()endl;第五章第五章1.声明复数的类,complex,使用友元函数 add 实现复数加法。1.声明复数的类,complex,使用友元函数 add 实现复数加法。#include using namespace std;class Complexprivate:重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 5 页 共 13 页double real,image;public:Complex()Complex(double a,double b)real=a;image=b;void setRI(double a,double b)real=a;image=b;double getReal()return real;double getImage()return image;void print()if(image0)cout复数:real +image i endl;if(image0)cout复数:real -image i endl;friend Complex add(Complex,Complex);/声明友元函数;Complex add(Complex c1,Complex c2)/定义友元函数Complex c3;c3.real=c1.real+c2.real;/访问 Complex 类中的私有成员c3.image=c1.image+c2.image;return c3;void main()Complex c1(19,0.864),c2,c3;c2.setRI(90,125.012);c3=add(c1,c2);cout复数一:;c1.print();cout复数二:;c2.print();cout相加后:;c3.print();3.编写一个程序,该程序建立一个动态数组,为动态数组的元素赋值,显示3.编写一个程序,该程序建立一个动态数组,为动态数组的元素赋值,显示动态数组的值并删除动态数组动态数组的值并删除动态数组。#include using namespace std;void main()int i,n,temp=0;coutn;double*array=new doublen;/用指针,动态申请数组大小cout给每个数组元素赋值:endl;for(i=0;i n;i+)coutarray i temp;*(array+i)=temp;/给数组元素赋值cout动态数组个元素的值如下:endl;for(i=0;i n;i+)coutarray i =arrayi endl;/打印数组元素delete array;/释放内存4.定义一个 Dog 类,它用静态数据成员 Dogs 记录 Dog 的个体数目,静态成4.定义一个 Dog 类,它用静态数据成员 Dogs 记录 Dog 的个体数目,静态成员员函函数数 GetDoGetDog gs 用s 用来存来存取 Do取 Dog gs。s。设计并测试这个类设计并测试这个类。#include using namespace std;class Dogprivate:static int dogs;/静态数据成员,记录 Dog 的个体数目public:Dog()void setDogs(int a)dogs=a;static int getDogs()return dogs;int Dog:dogs=25;/初始化静态数据成员void main()cout未定义 Dog 类对象之前:x=Dog:getDogs()endl;/x 在产生对象之前即存在,输出 25Dog a,b;couta 中 x:a.getDogs()endl;coutb 中 x:b.getDogs()endl;a.setDogs(360);cout给对象 a 中的 x 设置值后:endl;第 6 页 共 13 页couta 中 x:a.getDogs()endl;coutb 中 x:b.getDogs()endl;第六章第六章1.设计一个基类,从基类派生圆柱,设计成员函数输出它们的面积和体积;1.设计一个基类,从基类派生圆柱,设计成员函数输出它们的面积和体积;#include using namespace std;class Basic/基类protected:doubler;public:Basic()r=0;Basic(double a):r(a);class Circular:public Basic/从基类派生圆类protected:double area;public:Circular(double a)r=a;area=area=3.1415926*r*r;double getArea()/返回圆面积return area;class Column:public Circular/从圆类派生圆柱类protected:double h;double cubage;public:Column(double a,double b):Circular(a)h=b;cubage=getArea()*h;double getCubage()/返回圆柱体积函数return cubage;void main()Circular circular(45);Column column(12,10);cout圆的面积:circular.getArea()endl;cout圆柱的体积:column.getCubage()endl;3.定义一个线段类作为矩形的基类,基类有起点和终点坐标,有输出左边和3.定义一个线段类作为矩形的基类,基类有起点和终点坐标,有输出左边和长度以长度以及及线段线段和 x和 x 轴的夹角的成员轴的夹角的成员函函数数。矩线段对象的矩线段对象的两两个坐标作为自个坐标作为自己一己一条边的位置条边的位置,它具有另外它具有另外一一条边条边,能输出矩形的能输出矩形的 4 4 个个顶顶点坐标点坐标。给出类的定给出类的定义并义并用用程序验程序验证证它们的功能它们的功能。#include#include using namespace std;class Point/点类protected:double x,y;public:Point()Point(double a,double b)x=a;y=b;double getX()return x;double getY()return y;class Lineprotected:Point p1,p2;/Point 对象做成员double length,angle;public:Line(double a,double b,double c,double d):p1(a,b),p2(c,d)/用两对坐标初始化线段init();Line(Point a,Point b)/用两个点的对象初始化线段p1=a;p2=b;init();void init()/计算线段长度,以及和 x 轴的夹角的度数double x1=p1.getX(),y1=p1.getY();double x2=p2.getX(),y2=p2.getY();重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 7 页 共 13 页length=sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);angle=atan(y2-y1)/(x2-x1);angle=angle*180/3.141592653;void printXY()cout(p1.getX(),p1.getY();(p2.getX(),p2.getY()endl;void printLength()cout线段长度:length endl;void printAngle()cout与 x 轴的夹角:angle endl;class Rectangle:public Lineprotected:Line*line;public:Rectangle(double a,double b,double c,double d,double e,double f,double g,double h):Line(a,b,c,d)line=new Line(e,f,g,h);Rectangle(Point a,Point b,Point c,Point d):Line(a,b)/4个点对象,初始化line=new Line(c,d);void printPoint()coutprintXY();void main()Point p1(0,0),p2(4,3),p3(12,89),p4(10,-50);Line l1(0,0,4,3);l1.printXY();l1.printLength();l1.printAngle();Line l2(p1,p2);l2.printXY();l2.printLength();l2.printAngle();Rectangle r1(12,45,89,10,10,23,56,1);r1.printPoint();Rectangle r2(p1,p2,p3,p4);r2.printPoint();4.基类是使用极坐标的点类,从它派生一个圆类,圆类用点类的左边作圆心,圆周4.基类是使用极坐标的点类,从它派生一个圆类,圆类用点类的左边作圆心,圆周通过极坐标通过极坐标原原点点,圆,圆类有输出类有输出圆心圆心直直、圆、圆半径半径和面积和面积的成员的成员函函数数。完成完成类的设计并验类的设计并验证证之之。#include#include using namespace std;class Point/点类protected:int x,y;public:Point();class Circular:public Point/圆类,继承点类protected:double r,area;public:Circular(int a,int b)x=a;y=b;r=sqrt(x*x+y*y);area=3.1415926*r*r;void printPoint()cout圆形直角坐标:(x,y)endl;void printRadius()cout圆的半径:r endl;void printArea()cout圆的面积:area endl;void main()Circular c(10,25);c.printPoint();第 8 页 共 13 页c.printRadius();c.printArea();5.设计一个线段基类,当创建五参数对象时,才要求用户输入长度。同样,5.设计一个线段基类,当创建五参数对象时,才要求用户输入长度。同样,其派生的直角其派生的直角三三角形类也是在产生对象时角形类也是在产生对象时要要求输求输入两入两个直角边的长度个直角边的长度。直角直角三三角形在派生矩形类角形在派生矩形类,矩形类的参数也由键盘输矩形类的参数也由键盘输入。入。设计这些类并测试他们设计这些类并测试他们的功能的功能。#include#include using namespace std;class Line/线段基类protected:double sizeA;public:Line()cout输入线段的长度:sizeA;Line(double a)sizeA=a;double getLength()return sizeA;class Triangle:public Line/三角形类protected:double sizeB,sizeC;public:Triangle()cout输入线段长度:sizeB;sizeC=sqrt(sizeB*sizeB+sizeA*sizeA);void printSize()cout直角三角形,三条边分别为:;coutA:sizeA ,b:sizeB ,C:sizeC endl;class Rectangle:public Triangle/矩形类protected:double sizeD;public:Rectangle()sizeC=sizeA;sizeD=sizeB;void printSize()cout矩形,四条边分别为:;coutA:sizeA ,b:sizeB ,C:sizeC ,D:sizeD endl;void main()/*Line*l=new Line();cout线段长度为:getLength()printSize();*/Rectangle*r=new Rectangle();r-printSize();第七章第七章1.使用类模板演示复制兼容性规则。1.使用类模板演示复制兼容性规则。#include using namespace std;templateclass Pointprotected:T x,y;public:Point(T a,T b)x=a;y=b;void show()重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 9 页 共 13 页coutx=x,y=y endl;templateclass Rectangle:public Pointprivate:T h,w;public:Rectangle(T a,T b,T c,T d):Point(a,b)h=c;w=d;void show()coutx=x,y=y;h=h,w=w show();Rectangle*pb=&b;/子类指针 pbpb-show();a=b;/派生类对象的属性值,更新父类对象的属性值a.show();2.设计一个点的类模板,分别使用继承、包含的方法设计线段类模板,要求2.设计一个点的类模板,分别使用继承、包含的方法设计线段类模板,要求演演示示构造构造函函数数和和复制构造复制构造函函数的设计方法数的设计方法,并并用用主程序验主程序验证证之之。#include using namespace std;templateclass Pointpublic:T x,y;Point(T a=0,T b=0)x=a;y=b;void show()coutx=x,y=y endl;templateclass Line_1:public Point/继承 Point 类模板,的线段类模板protected:T x1,y1;public:Line_1(T a,T b,T c,T d):Point(a,b)x1=c;y1=d;Line_1(const Line_1&);/复制构造函数void show()cout(x,y);(x1,y1)endl;templateLine_1:Line_1(const Line_1&t):Point(t.x,t.y)x1=t.x1;y1=t.y1;templateclass Line_2/包含 point 类模板,的线段类protected:Pointp1,p2;public:Line_2(T a,T b,T c,T d)p1.x=a;p1.y=b;p2.x=c;p2.y=d;Line_2(const Line_2&);/复制构造函数void show()重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 10 页 共 13 页cout(p1.x,p1.y);(p2.x,p2.y)endl;templateLine_2:Line_2(const Line_2&t)p1=t.p1;p2=t.p2;void main()Line_1L1(1,2,3,4);coutL1:;L1.show();Line_1L2(L1);/用现有的对象,初始化新对象coutL2:;L2.show();Line_2J1(5,6,7,8);coutJ1:;J1.show();Line_2J2(J1);coutJ2:;J2.show();3.已知有一个整型数组 a,其内容为 1 3 5 7 9 2 4 6 8 10.先对数组进行3.已知有一个整型数组 a,其内容为 1 3 5 7 9 2 4 6 8 10.先对数组进行升序排列升序排列,再,再使使用用它产生向它产生向量 b,量 b,然后然后再再在向在向量量的的尾尾部追加部追加 11,11,并按降序排并按降序排列输出向列输出向量量的内容的内容和 ca和 cap pacitacity y()()的内容的内容。#include#include#include using namespace std;void main()int a=1,3,5,7,9,2,4,6,8,10;sort(a,a+10);/先对数组进行升序排序copy(a,a+10,ostream_iterator(cout,);cout endl;vectorpa(a,a+10);/再声明向量pa.push_back(11);/向量尾部追加 11reverse_copy(pa.begin(),pa.end(),ostream_iterator(cout,);/按降序输出向量的内容coutncapacity:pa.capacity()endl;/输出capacity()的内容第九章第九章1.利用流格式控制,进行成绩和名字的输出,要求名字左对齐,分数右对齐。1.利用流格式控制,进行成绩和名字的输出,要求名字左对齐,分数右对齐。#include#include using namespace std;class Studentprivate:string name;float score;public:Student()Student(string n,float s)name=n;score=s;string getName()return name;float getScore()return score;void main()Student s1(liming,98);Student s2(sdfh,90);Student s3(vn.fy,80);Student s4(cnbtrt,70);Student s5(ryuety,48);cout.width(15);cout left 姓名 right 分数 endl;cout.width(15);cout left s1.getName()right s1.getScore()endl;cout.width(15);cout left s2.getName()right s2.getScore()endl;cout.width(15);cout left s3.getName()right s3.getScore()endl;cout.width(15);cout left s4.getName()right s4.getScore()endl;cout.width(15);cout left s5.getName()right s5.getScore()endl;重庆大学学长Q Q 196 490 7 139,全校各院专业课考研资料有售第 11 页 共 13 页2.2.编编写一写一个产生文本文件的程序个产生文本文件的程序。#include#include using namespace std;void main()char*p=C+程序设计;ofstream myFile(Worl9_5_2.txt);myFile p;3.编写一个程序,要求输入三角形的 3 条边,然后判断是否合理,如果不合3.编写一个程序,要求输入三角形的 3 条边,然后判断是否合理,如果不合理理,给出信息并给出信息并要要求重新输求重新输入;入;如如果果合理合理,计算其计算其面积面积并将结并将结果果存存入入文件中文件中。#include#include#include#include#include#include using namespace std;class Triangledouble sizeA,sizeB,sizeC,area;public:Triangle()void setArea()double p=(sizeA+sizeB+sizeC)*0.5;area=sqrt(p*(p-sizeA)*(p-sizeB)*(p-sizeC);void setSizeA(double a)sizeA=a;void setSizeB(double b)sizeB=b;void setSizeC(double c)sizeC=c;void set(vector&);/*/*成员函数:set/*参 数:向量对象的引用/*返回值:无/*功能:为向量赋值并将向量存入文件/*void Triangle:set(vector&v)Triangle t;double a,b,c;while(1)couta;if(a=-1)/结束符为-1ofstream writeFile;char fileName20;coutfileName;cout保存到文件:fileName endl;writeFile.open(fileName);if(writeFile.fail()cout没有正确建立文件!endl;return;for(int i=0;i v.size();i+)writeFile vi.sizeA vi.sizeB vi.sizeC vi.area endl;writeFile.close();cout一共写入 v.size()个三角形信息 endl;return;cout b;cout c;if(a0&b0&c0&a+bc&a+cb&b+ca)t.setSizeA(a);t.setSizeB(b);t.setSizeC(c);t.setArea();v.push_back(t);elsecout不能组成三角形,重新输入 endl;第 12 页 共 13 页void main()vectortri;Triangle triangle;triangle.set(tri);4.改写上题的程序,使程序反复计算,直到输入结束符号为止。要求在停止4.改写上题的程序,使程序反复计算,直到输入结束符号为止。要求在停止计算后计算后,询问询问要要保存的文件名保存的文件名,然后讲结然后讲结果一果一次次写入写入制定文件中制定文件中。#include#include#include#include#include#include using namespace std;class Triangledouble sizeA,sizeB,sizeC,area;public:Triangle()void setArea()double p=(sizeA+sizeB+sizeC)*0.5;area=sqrt(p*(p-sizeA)*(p-sizeB)*(p-sizeC);void setSizeA(double a)sizeA=a;void setSizeB(double b)sizeB=b;void setSizeC(double c)sizeC=c;void set(vector&);/*/*成员函数:set/*参 数:向量对象的引用/*返回值:无/*功能:为向量赋值并将向量存入文件/*void Triangle:set(vector&v)Triangle t;double a,b,c;while(1)couta;if(a=-1)/结束符为-1ofstream writeFile;char fileName20;cout fileName;cout保存到文件:fileName endl;writeFile.open(fileName);if(writeFile.fail()cout没有正确建立文件!endl;return;for(int i=0;i v.size();i+)writeFile vi.sizeA vi.sizeB vi.sizeC vi.area endl;writeFile.close();cout一共写入 v.size()个三角形信息 endl;return;coutb;coutc;if(a0&b0&c0&a+b