应用实践VC++编程题及答案_第1页
应用实践VC++编程题及答案_第2页
应用实践VC++编程题及答案_第3页
应用实践VC++编程题及答案_第4页
应用实践VC++编程题及答案_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

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的值设置为a。int yn(int

2、 n):判断n是否回文数,若是,返回1;否则返回0。void fun():使用num验证命题是否成立,并显示验证过程。在主函数中对该类进行测试。输出示例:num=350的验证过程如下:350+53=403403+304=707命题成立!num=2015的验证过程如下:2015+5102=7117命题成立!#include class NUMprivate:int num;public:NUM(int x);void set(int a);int yn(int n);void fun();NUM:NUM(int x) num=x;void NUM:set(int a) num=a;int NUM

3、: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;coutnum=num的验证过程如下:endl;while(1) int n=num,s=0; /350 do s=s*10+n%10;/ 053 n/=10;while(n); m=s+num; /403 if(yn(m)=1) coutnum+s=mn命题成立!endl; break;else coutnum+s=mendl; num=m;void main() NUM arr(350);

4、arr.fun(); arr.set(2015); arr.fun ();2【题目】试定义一个实现计算学生课程成绩的类STU,对学生学期总评成绩进行计算并排序。具体要求如下:(1) 私有数据成员int norm, ex, final,overall:分别表示平时成绩、实验成绩、期末考试和总评成绩。char name15:学生姓名。(2) 公有成员函数void init(char *name1, int nor1, int ex1, int fin1):用参数name1,nor1,exp1,fin1分别初始化成员name,norm, ex, final。void fun( ):计算学生的总评成绩

5、。计算方法为:总评成绩=平时成绩占*20%+实验成绩占*25%+期末成绩占*55%。总评成绩计算时要求四舍五入,并且期末考试成绩不足50分时,则期末考试成绩即为总评成绩。friend void sort(STU st, int n):友元函数,对st按总评成绩进行从大到小排序。void print( ):输出该学生信息。(3) 在主函数中先定义一个有5个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数init()更新学生信息,然后使用函数sort()对数组排序,最后输出排序后的学生信息。输入/输出示例(下划线部分为键盘输入):请输入姓名、平时成绩、实验成绩、期末成绩:AAA

6、82 75 58请输入姓名、平时成绩、实验成绩、期末成绩:BBB 93 60 84请输入姓名、平时成绩、实验成绩、期末成绩:CCC 67 82 81请输入姓名、平时成绩、实验成绩、期末成绩:DDD 54 78 51请输入姓名、平时成绩、实验成绩、期末成绩:EEE 91 52 41按总评成绩排序后:姓名 平时成绩 实验成绩 期末成绩 总评成绩BBB 93 60 84 80CCC 67 82 81 78AAA 82 75 58 67DDD 54 78 51 58EEE 91 52 41 41#include#include class STUprivate:int norm,ex,final,ov

7、erall;char name15;public: void init(char *name1,int norm1,int ex1,int fin1); void 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.2

8、5+final*0.55+0.5); else overall=int(final+0.5);void sort(STU st,int n)for(int i=0;in-1;i+)for(int j=i+1;jn;j+)if(sti.overallstj.overall)int t;t=sti.overall;sti.overall=stj.overall;stj.overall=t;void STU:print()coutnametnormtextfinaltoverallendl;void main()STU s3;char name100;int norm,ex,fin;for(int

9、i=0;i3;i+)cout请输入姓名、平时成绩、实验成绩、期末成绩:namenormexfin;si.init(name,norm,ex,fin);si.fun(); cout按总评成绩排序后:n姓名 平时成绩 实验成绩 期末成绩 总评成绩endl;sort(s,3); for(i=0;i3;i+)si.print();3【题目】试定义一个类Array,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下: (1) 私有数据成员int a45:需要排序的二维数组。(2) 公有成员函数Array(int t5, int n):构造函数,用参数t初始化成

10、员数组a,n表示数组t的行数。int comp(int n):判断整数n是否为合数,如果是合数,返回值为1,否则返回值为0。int sum_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排序后的数组:1

11、2 15 10 5 417 10 16 8 1912 15 11 13 1470 20 16 18 193答案#include class 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;in;i+)for(int j=0;j5;j+)aij=tij;int Array:comp(int n) int fl

12、ag=0; for(int i=2;in;i+) if(n%i=0) flag=1; return flag;int Array:sum_comp(int j)int s=0; for(int i=0;i4;i+) if(comp(aij)=1) s+=aij;cout&sendl;return s;void Array:exch(int j1,int j2) for(int i=0;i4;i+) int d=aij1; aij1=aij2; aij2=d;void Array:fun() for(int i=0;i4;i+) for(int j=i+1;j5;j+) if(sum_comp(

13、i)sum_comp(j) exch(i,j);void Array:print()for(int i=0;i4;i+)for(int j=0;j5;j+)coutaijt;coutendl;void main(void)int b45=10,12,5, 4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20;Array arr(b,4);cout原数组:endl;arr.print();arr.fun(); cout排序后的数组:endl;arr.print();4【题目】 已知切线法求方程 f(x)=ax2+bx+c=0 在x附近的一个解的迭代公式

14、为: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, double e ):求方程在x0附近的一个解,所采用的算法是:依次计算x1=x0-f(x0)/f(x0), x2=x1-f(x

15、1)/f(x1),, xn=xn-1-f(xn-1)/f(xn-1),直到|f(xn)|e为止。void print( ):输出所求得的解。(3) 在主函数中建立EQU对象,并求出方程 f(x)=2x2+6x-7=0 在x=5.0附近的一个解,要求最终误差|f(x)|10-5,最后调用print()函数输出所求得的解。正确程序的输入/输出结果如下(下划线部分为键盘输入):请输入方程的系数(a,b,c):2 6 -7请输入预估的初始解x0: 5请输入误差要求(e):0.00001该方程的解是:0.8979164答案#include class EQUprivate:float a,b,c;dou

16、ble x;public:EQU(float 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;do double f0=a*x0*x0+b*x0+c; double ff=2*a*x0+b; x=x0-f0/ff; f=a*x*x+b*x+c; double f1=2*a*x+b; x0=x-f/f1; while(

17、fe);void EQU:print () coutxendl;void main() float a,b,c; double x0,e; coutabc; coutx0; coute; cout该方程的解是:; EQU t(a,b,c); t.fun (x0,e); t.print();5【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下:(1) 私有数据成员int a54:待处理的数组。(2) 公有成员函数Array(int t4, int n):构造函数,用参数t初始化成员数组a,n为数组t的行数。int prime(int n):判断整数

18、n是否为素数,如果是素数,返回值为1,否则返回值为0。int sum_prime(int i):求数组a中第i行元素中所有素数之和。void exch(int i1, int i2):交换数组a的第i1, i2行元素。void fun( ):根据题意对二维数组进行行排序。要求排序过程中交换数据时使用成员函数exch()。void print( ):以矩阵的形式输出成员数组。(3) 在主函数中定义一个二维数组,并使用该数组对类Array进行测试。输出示例:原数组:10 12 5 415 16 17 819 10 11 1213 14 15 1670 18 19 20排序后的数组:19 10 11

19、 1270 18 19 2015 16 17 813 14 15 1610 12 5 45答案#include class 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;in;i+) for(int j=0;j4;j+) aij=tij;int Array:prime (int n) for(int

20、 i=2;in;i+)if(n%i=0) return 0;return 1;int Array:sum_prime (int i)int s=0; for(int j=0;j4;j+)if(prime(aij) s+=aij;return s;void Array:exch(int i1,int i2) for(int j=0;j4;j+) int d=ai1j; ai1j=ai2j; ai2j=d; void Array:fun ()for(int i=0;i4;i+)for(int j=i+1;j5;j+)if(sum_prime(i)sum_prime(j) exch(i,j);voi

21、d Array:print() for(int i=0;i5;i+)for(int j=0;j4;j+) coutaijt; coutendl;void main() int b54=10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20; Array arr(b,5);cout原数组:;coutendl;arr.print();arr.fun();cout排序后的数组:;coutendl;arr.print();6.【题目】判断某人是否为青年的标准是男性不超过35周岁或女性不超过40周岁。已知身份证号从第7位开始的连续8位表示持证人的

22、出生年月日,身份证号的第17位为奇数表示持证人为男性,身份证号第17位数字为偶数表示持证人为女性。例如:身份证号为32110219830103191 X的持证人出生年月为1983年1月3日,性别为男性。试定义一个类ID,根据身份证号判断持证人截止到2015年10月1日是否为青年。具体要求如下:(1) 私有数据成员char * id:保存18位身份证号。int y,m,d, yes: y,m,d分别表示持证人的出生年、月、日。yes取值为1或0分别表示持证人是青年或不是青年。char *sex:持证人的性别(”男”或”女”)。(2) 公有成员函数ID(char * s):用参数s初始化成员id(

23、需申请动态内存),并将y,m,d初始化为0,并为指针sex分配足够的存储空间。void fun( ): 根据身份证号计算持证人的出生年月和性别,并判断其是否为青年。void print( ): 输出持证人的信息。ID(): 析构函数,进行必要的操作。(3) 在主函数中输入一个身份证号,生成相应的对象,判断并输出持证人截止到2015年10月1日是否为青年。可以使用以下身份证号测试程序:身份证号1份证号2入/输出示例(下划线部分为键盘输入):Input an ID:份证号: 32

24、1102198103011213出生日期: 1981.3.1性别: 男是否青年: 是!6#include #include class IDprivate: char * id; int y,m,d, yes; char *sex;public: ID(char * s); void fun(); void print(); ID();ID:ID(char * s)id=new char100;strcpy(id,s);y=0;m=0;d=0;sex=new char5;sex0=0;yes=0;void ID:fun( ) int i=6; while(i10) y=y*10+idi+-0;

25、 while(i12) m=m*10+idi+-0; while(i14) d=d*10+idi+-0;if(id16-0)%2=1) strcpy(sex,男);else strcpy(sex,女); int age=2016-y; if(age=40&strcmp(sex,女)=0) yes=1; if(age=35&strcmp(sex,男)=0) yes=1;void ID:print( ) cout身份证号:;coutidendl; cout出生日期:;couty.m.dendl;cout性别:;coutsexendl;cout是否青年:; if(yes=1) cout是endl;

26、else cout不是endl;ID:ID() if(id) delete id; if(sex) delete sex;void main() char card1100 /char card2100; coutcard2; ID person(card1); person.fun(); person.print();7. 【题目】设数组a派生出数组b的规则为 ,其中, 为数组a中n个元素的平均值, 为数组a中n个元素的方差, 。试定义一个类Array,实现上述数组的派生。具体要求如下:(1) 私有数据成员dou

27、ble a5,b5:数组a,派生数组b。(2) 公有成员函数Array(double t, int n):构造函数,用参数t的前n个元素初始化成员数组a。double ave():计算并返回数组a中所有元素的平均值。double dat():计算并返回数组a中全部n个元素的方差。void fun():根据题意派生数组b。注:头文件math.h中的函数double pow(double x, double y)返回值为xy。void print():输出成员数组。(3) 在主函数中定义一个数组,并使用该数组对类Array进行测试,要求输出原数组和派生数组。输出示例:原数组a:6.1 2.6 15

28、.8 4.3 1.72派生数组b:0.0786135 0.0648345 0.0179753 0.0746989 0.05814217.#include #include class Array private:double a5,b5;public:Array(double t, int n); double ave(); double dat(); void fun(); void print();Array:Array(double t, int n)for(int i=0;in;i+) ai=ti;bi=0;double Array:ave()double s=0;for(int i=

29、0;i5;i+)s+=ai; return s/5;double Array:dat()double s=0;for(int i=0;i5;i+)s+=(ai-ave()*(ai-ave(); return s/5;void Array:fun() double pi=3.1415926,e=2.71828; double t=sqrt(2*pi*dat(),s; for(int i=0;i5;i+)s=-(ai-ave()*(ai-ave()/(2*dat(); bi=pow(e,s)/t; void Array:print()cout原数组a:endl;for(int i=0;i5;i+)

30、coutait;coutendl; cout派生数组b:endl;for(i=0;i5;i+)coutbit;cout0,则方程在区间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,c:存储方程的系数a,b和c。double x1, x2, x:x为方程在区间x1, x2上的解。in

31、t 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)|e。void print():若方程有解,则输出所求得的解;若无解,则输出“方程在给定区间内无解”。 (3) 在主函数中首先输入方程的系数、区间和误差要求,建立EQU对象并初始化,然后调用fun()函数求出方程的解,最后调用

32、print()函数输出所求得的解。正确程序的输入/输出结果如下(下划线部分为键盘输入):请输入方程的系数(a,b,c):1 5 -4请输入区间(x1,x2)边界:0 10请输入误差要求(e):0.00001该方程在区间0,10中的解是:0.7015618#include #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(flo

33、at a1,float b1,float c1) a=a1;b=b1;c=c1; void EQU:fun(double xx1,double xx2,double e) x1=xx1;x2=xx2; double f1=a*x1*x1+b*x1+c,f2=a*x2*x2+b*x2+c; double f; do x=(x1+x2)/2; f=a*x*x+b*x+c; if(f1*f0) x1=x; else x2=x; while(fabs(f)=e);void EQU:print() coutxendl; void main()double a,b,c;double x1,x2,e; co

34、utabc; coutx1x2; coute;EQU s(a,b,c); s.fun(x1,x2,e); cout该方程在区间0,10中的解是:;/0.701561s.print ();函数编程题1. 定义两个独立函数,void print(int b);实现将一维数组元素一行输出,void sort(int b,int n);实现将一维数组的元素按从大到小排序;在主函数中定义一个整型数组a8,从键盘输入8个数为数组元素赋值,分别调用两个函数。1.答案#include void print(int b) for(int i=0;i8;i+) coutbit; coutendl;void sor

35、t(int b,int n) for(int i=0;in-1;i+)for(int j=i+1;jn;j+) if(bibj) int t; t=bi; bi=bj; bj=t;void main() int a8; cout请输入8个数存放到一维数组a:endl; for(int i=0;iai; print(a); sort(a,8); print(a);2字符串处理:设计一个通用函数实现在字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。初始状态:s1: abcdefg s2: 1234输入插入字符串的位置:3目标状态:s1: ab1234cdefg s2: 123

温馨提示

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

评论

0/150

提交评论