1、类编程题1 【题目】试定义一个类 NUM,验证下列命题是否成立:任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新正整数重复上述步骤,最终一定可以得到一个回文数。例如,正整数 350的反序数为 053(即 53),350+53=403, 403+304=707,707 是回文数,命题成立。又如,正整数 2015 的反序数为 5102,2015+5102 =7117,7117 是回文数,命题成立。具体要求如下:私有数据成员int num:存放用于验证命题的正整数。公有成员函数NUM(int x):构造函数,用 x 初始化数据成员 num。void set(int a):将 num 的值
2、设置为 a。int yn(int n):判断 n 是否回文数,若是,返回 1;否则返回 0。void fun():使用 num 验证命题是否成立,并显示验证过程。在主函数中对该类进行测试。输出示例:num=350 的验证过程如下:350+53=403403+304=707命题成立!num=2015 的验证过程如下:2015+5102=7117命题成立!2 【题目】试定义一个实现计算学生课程成绩的类 STU,对学生学期总评成绩进行计算并排序。具体要求如下:(1) 私有数据成员int norm, ex, final,overall:分别表示平时成绩、实验成绩、期末考试和总评成绩。char name
3、15:学生姓名。(2) 公有成员函数void init(char *name1, int nor1, int ex1, int fin1):用参数name1,nor1,exp1,fin1 分别初始化成员 name,norm, ex, final。void fun( ):计算学生的总评成绩。计算方法为:总评成绩=平时成绩占*20%+实验成绩占*25%+期末成绩占*55%。总评成绩计算时要求四舍五入,并且期末考试成绩不足 50 分时,则期末考试成绩即为总评成绩。friend void sort(STU st, int n):友元函数,对 st 按总评成绩进行从大到小排序。void print( )
4、:输出该学生信息。(3) 在主函数中先定义一个有 5 个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数 init()更新学生信息,然后使用函数 sort()对数组排序,最后输出排序后的学生信息。输入/输出示例(下划线部分为键盘输入):请输入姓名、平时成绩、实验成绩、期末成绩:AAA 82 75 58请输入姓名、平时成绩、实验成绩、期末成绩:BBB 93 60 84请输入姓名、平时成绩、实验成绩、期末成绩:CCC 67 82 81请输入姓名、平时成绩、实验成绩、期末成绩:DDD 54 78 51请输入姓名、平时成绩、实验成绩、期末成绩:EEE 91 52 41按总评成绩排序后
5、:姓名平时成绩实验成绩期末成绩总评成绩BBB 93 60 84 80CCC 67 82 81 78AAA 82 75 58 67DDD 54 78 51 58EEE 91 52 41 413 【题目】试定义一个类 Array,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下:(1) 私有数据成员int a45:需要排序的二维数组。(2) 公有成员函数Array(int t5, int n):构造函数,用参数 t 初始化成员数组a,n 表示数组 t 的行数。int comp(int n):判断整数 n 是否为合数,如果是合数,返回值为1,否则返回值为
6、 0。intsum_comp(int j):求数组 a 第 j 列元素中所有合数之和。void exch(int j1, int j2):交换数组 a 的第 j1, j2 列元素。void fun():根据题意对二维数组进行列排序。void print():以矩阵的形式输出成员数组。(3) 在主函数中定义一个二维数组,并使用该数组对类 Array 进行测试。输出示例:原数组:10 12 5 4 1516 17 8 19 1011 12 13 14 1516 70 18 19 20排序后的数组:12 15 10 5 417 10 16 8 1912 15 11 13 1470 20 16 18
7、194 【题目】 已知切线法求方程 f(x)=ax2+bx+c=0 在 x 附近的一个解的迭代公式为:x=x-f(x)/f(x),其中 f(x)=2ax+b 为函数f(x)的导数。试定义一个类 EQU,用切线法求方程 f(x)=ax2+bx+c=0 在 x 附近的一个解。具体要求如下:(1) 私有数据成员float a,b,c:保存方程的系数 a,b 和 c。double x:x 为所求得的解。(2) 公有成员函数EQU(float a1, float b1, float c1):构造函数,用参数 a1, b1, c1 分别初始化成员 a,b,c。void fun(double x0, dou
8、ble e ):求方程在 x0 附近的一个解,所采用的算法是:依次计算 x1=x0-f(x0)/f(x0), x2=x1-f(x1)/f(x1),, xn=xn-1-f(xn-1)/f(xn-1),直到|f(xn)|0,则方程在区间x1, x2上无解;(2)令x=(x1+x2)/2;(3)如果f(x)*f(x1)0,方程的解在区间x, x2上,则令x1=x;否则,解在区间x1, x,令x2=x;(4)重复步聚(2) 、 (3)直到f(x)满足精度要求。试定义一个类EQU,实现利用二分法求方程ax2+bx+c=0在区间x1, x2内的一个解。具体要求如下:(1) 私有数据成员float a,b,
9、c:存储方程的系数a,b和c。double x1, x2, x:x为方程在区间x1, x2上的解。int k:如果在区间x1, x2内方程有解,则k值为1,否则k值为0;(2) 公有成员函数EQU(float a1, float b1, float c1):用参数a1,b1,c1分别初始化成员a,b,c。void fun(double xx1, double xx2, double e):求方程ax2+bx+c=0在区间xx1, xx2内的一个解x,要求最终误差|f(x)|class NUMprivate:int num;public:NUM(int x);void set(int a);in
10、t yn(int n);void fun();NUM:NUM(int x)num=x;void NUM:set(int a)num=a;int NUM:yn(int n)int t=n,s=0;while(t)s=s*10+t%10;t/=10;if(s=n) return 1;else return 0;void NUM:fun()int m;cout#include class STUprivate:int norm,ex,final,overall;char name15;public:void init(char *name1,int norm1,int ex1,int fin1);v
11、oid fun();friend void sort(STU st,int n);void print();void STU:init(char *name1,int norm1,int ex1,int fin1)strcpy(name,name1);norm=norm1;ex=ex1;final=fin1;overall=0;void STU:fun()if(final=50) overall=int(norm*0.2+ex*0.25+final*0.55+0.5); else overall=int(final+0.5);void sort(STU st,int n)for(int i=0
12、;inamenormexfin;si.init(name,norm,ex,fin);si.fun();for(i=0;iclass Arrayprivate:int a45;public:Array(int t5,int n);int comp(int n);int sum_comp(int j);void exch(int j1,int j2);void fun();void print();Array:Array(int t5,int n)for(int i=0;i#include class EQUprivate:float a,b,c;double x;public:EQU(float
13、 a1,float b1,float c1);void fun(double x0,double e);void print();EQU:EQU(float a1,float b1,float c1)a=a1;b=b1;c=c1;x=0.0;void EQU:fun (double x0,double e)double f;double f0=a*x0*x0+b*x0+c;double ff=2*a*x0+b;while(fabs(f0)e) x0=x0-f0/ff;f0=a*x0*x0+b*x0+c;ff=2*a*x0+b; x=x0;void EQU:print ()coutabc;cou
14、tx0;coute;coutclass Arrayprivate:int a54;public:Array(int t4,int n);int prime(int n);int sum_prime(int i);void exch(int i1,int i2);void fun();void print();Array:Array(int t4,int n)for(int i=0;i#include class IDprivate:char * id; int y,m,d, yes; char *sex;public:ID(char * s);void fun();void print();I
15、D();ID:ID(char * s)id=new char strlen(s)+1;strcpy(id,s);y=0; m=0; d=0;sex=new char5;sex0=0;yes=0;void ID:fun( )int i=6;while(icard2;ID person(card1);person.fun();person.print();7.#include #include class Arrayprivate: double a5,b5;public:Array(double t, int n);double ave();double dat();void fun();voi
16、d print();Array:Array(double t, int n)for(int i=0;i#include class EQUprivate:float a,b,c;double x1,x2,x;int k;public:EQU(float a1,float b1,float c1);void fun(double xx1,double xx2,double e);void print();EQU:EQU(float a1,float b1,float c1) a=a1;b=b1;c=c1; void EQU:fun(double xx1,double xx2,double e)
17、x1=xx1;x2=xx2;double f1=a*x1*x1+b*x1+c,f2=a*x2*x2+b*x2+c;double f; if(f1*f20)k=0;else k=1; x=(x1+x2)/2;f=a*x*x+b*x+c;while(fabs(f)=eelse x2=x;x=(x1+x2)/2;f=a*x*x+b*x+c;void EQU:print() if(k) coutabc;coutx1x2;coute;EQU s(a,b,c);s.fun(x1,x2,e);coutvoid print(int b)for(int i=0;iai;print(a);sort(a,8);pr
18、int(a);2.答案#include #include void insert(char s1,char s2,int m)char *p=s1+m-1,*q=s2;char *r=s1+strlen(s1);int a=strlen(s2);while(pm;insert(s1,s2,m);coutvoid swap(int t1=t2;t2=t;void adjust(int p, int n) int i=0, j=n-1;while(1) while(pi0)i+;while(pjvoid dtor(int n,int r)int i=0,s10;while(n!=0)si=n%r; n=n/r;i+;for(int j=i-1;j=0;j-)coutnr;dtor(n,r);