应用实践编程题答案_第1页
应用实践编程题答案_第2页
应用实践编程题答案_第3页
应用实践编程题答案_第4页
应用实践编程题答案_第5页
免费预览已结束,剩余25页可下载查看

付费下载

下载本文档

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

文档简介

1、类编程题1 .【题目】试定义一个类NUM验证下列命题是否成立:任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新正整数重复上述步骤,最终一定可以得到一个回文数。例如,正整数350的反序数为053(即53),350+53=403,403+304=707,707是回文数,命题成立。又如,正整数2015的反序数为5102,2015+5102=7117,7117是回文数,命题成立。具体要求如下:私有数据成员intnum:存放用于验证命题的正整数。公有成员函数NUM(intx):构造函数,用x初始化数据成员numvoidset(inta):将num的值设置为a。intyn(intn):判断n是

2、否回文数,若是,返回1;否则返回0。voidfun():使用num验证命题是否成立,并显示验证过程。在主函数中对该类进行测试。输出示例:num=350勺验证过程如下:350+53=403403+304=707命题成立!num=2015勺验证过程如下:2015+5102=7117命题成立!2 .【题目】试定义一个实现计算学生课程成绩的类STU对学生学期总评成绩进行计算并排序。具体要求如下:(1)私有数据成员intnorm,ex,final,overall:分别表示平时成绩、实验成绩、期末考试和总评成绩。charname15:学生姓名。(2)公有成员函数voidinit(char*name1,in

3、tnor1,intex1,intfin1):用参数name1,nor1,exp1,fin1分另U初始化成员namenorm,ex,final。voidfun():计算学生的总评成绩。计算方法为:总评成绩=平时成绩占*20%犊验成绩占*25%蝴末成绩占*55%总评成绩计算时要求四舍五入,并且期末考试成绩不足50分时,则期末考试成绩即为总评成绩。friendvoidsort(STUst,intn):友元函数,对st按总评成绩进行从大到小排序。voidprint():输出该学生信息。(3)在主函数中先定义一个有5个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数init()更新学生

4、信息,然后使用函数sort()对数组排序,最后输出排序后的学生信息。输入/输出示例(下划线部分为键盘输入):请输入姓名、平时成绩、实验成绩、期末成绩:AAA827558请输入姓名、平时成绩、实验成绩、期末成绩:BBB936084请输入姓名、平时成绩、实验成绩、期末成绩:CCC678281请输入姓名、平时成绩、实验成绩、期末成绩:DDD547851请输入姓名、平时成绩、实验成绩、期末成绩:EEE915241按总评成绩排序后:姓名平时成绩实验成绩期末成绩总评成绩BBB93608480CCC67828178AAA82755867DDD54785158EEE915241413 .【题目】试定义一个类A

5、rray,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下:(1)私有数据成员inta45:需要排序的二维数组。(2)公有成员函数Array(intt5,intn):构造函数,用参数t初始化成员数组a,n表示数组t的行数。intcomp(intn):判断整数n是否为合数,如果是合数,返回值为1,否则返回值为0。intsum_comp(intj):求数组a第j列元素中所有合数之和voidexch(intj1,intj2):交换数组a的第j1,j2列元素voidfun():根据题意对二维数组进行列排序。voidprint():以矩阵的形式输出成员数组。

6、(3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。输出示例:原数组:1012541516178191011121314151670181920排序后的数组:12151054171016819121511131470201618194 .【题目】已知切线法求方程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)私有数据成员floata,b,c:保存方程的系数a,b和cdoublex:x

7、为所求得的解。(2)公有成员函数EQU(floata1,floatb1,floatc1):构造函数,用参数a1,b1,cl分别初始化成员a,b,c。voidfun(doublex0,doublee):求方程在x0附近的一个解,所采用的算法是:依次计算x1=x0-f(x0)/f'(x0),x2=x1-f(x1)/f(x1),,xn=xn-1-f(xn-1)/f'(xn-1),直到|f(xn)|<e为止。voidprint():输出所求得的解。(3)在主函数中建立EQU寸象,并求出方程f(x)=2x2+6x-7=0在x=附近的一个解,要求最终误差|f(x)|<10-5,

8、最后调用print()函数输出所求得的解。正确程序的输入/输出结果如下(下划线部分为键盘输入):请输入方程的系数(a,b,c):26-7请输入预估的初始解x0:5请输入误差要求(e):该方程的解是:5 .【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下:(1)私有数据成员inta54:待处理的数组。(2)公有成员函数Array(intt4,intn):构造函数,用参数t初始化成员数组a,n为数组t的行数。intprime(intn):判断整数n是否为素数,如果是素数,返回值为1,否则返回值为0。intsum_prime(inti):求数组a中第

9、i行元素中所有素数之和。voidexch(inti1,inti2):交换数组a的第i1,i2行元素。voidfun():根据题意对二维数组进行行排序。要求排序过程中交换数据时使用成员函数exch()。voidprint():以矩阵的形式输出成员数组。(3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。输出示例:原数组:1012541516178191011121314151670181920排序后的数组:19101112701819201516178131415161012546 .【题目】判断某人是否为青年的标准是男性不超过35周岁或女性不超过40周岁。已知身份证号从第7位

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

11、存),并将y,m,d初始化为0,并为指针sex分配足够的存储空间。voidfun():根据身份证号计算持证人的出生年月和性别,并判断其是否为青年。voidprint():输出持证人的信息。ID():析构函数,进行必要的操作。(3)在主函数中输入一个身份证号,生成相应的对象,判断并输出持证人截止到2015年10月1日是否为青年。可以使用以下身份证号测试程序:身份证号1:32201身份证号2:32213输入/输出示例(下划线部分为键盘输入):InputanID:32213身份证号:32213出生日期:性别:男是否青年:是!7 .【题目】设数组a派生出数组b的规则为,其中,u为数组a中n个元素的平均

12、值,为数组a中n个元素的方差,。试定义一个类Array,实现上述数组的派生。具体要求如下:(1)私有数据成员doublea5,b5:数组a,派生数组b。(2)公有成员函数Array(doublet,intn):构造函数,用参数t的前n个元素初始化成员数组a。doubleave():计算并返回数组a中所有元素的平均值。doubledat():计算并返回数组a中全部n个元素的方差。voidfun():根据题意派生数组b。注:头文件中的函数doublepow(doublex,doubley)返回值为xy。voidprint():输出成员数组。(3)在主函数中定义一个数组,并使用该数组对类Array进

13、行测试,要求输出原数组和派生数组。输出示例:原数组a:派生数组b:8 .【题目】用二分法求方程f(x)=ax2+bx+c=0£区间x1,x2内的一个解的迭代算法如下(假设f(x)在区间x1,x2内单调):(1)如果f(x1)*f(x2)>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)私有

14、数据成员floata,b,c:存储方程的系数a,b和c。doublex1,x2,x:x为方程在区间x1,x2上的解。intk:如果在区间x1,x2内方程有解,则k值为1,否则k值为0;(2)公有成员函数EQU(floata1,floatb1,floatc1)成员a,b,c。:用参数a1,b1,c1分别初始化voidfun(doublexx1,doublexx2,doublee):求方程ax2+bx+c=0在区间xx1,xx2内的一个解x,要求最终误差|f(x)|<e。voidprint():若方程有解,则输出所求得的解;若无解,则输出“方程在给定区间内无解”。(3)在主函数中首先输入方程

15、的系数、区间和误差要求,建立EQU对象并初始化,然后调用fun()函数求出方程的解,最后调用print()函数输出所求得的解。正确程序的输入/输出结果如下(下划线部分为键盘输入):请输入方程的系数(a,b,c):15-4请输入区间(x1,x2)边界:010请输入误差要求(e):该方程在区间0,10中的解是:函数编程题1 .定义两个独立函数,voidprint(intb);实现将一维数组元素一行输出,voidsort(intb,intn);实现将一维数组的元素按从大到小排序;在主函数中定义一个整型数组a8,从键盘输入8个数为数组元素赋值,分别调用两个函数。2 .字符串处理:设计一个通用函数实现在

16、字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。初始状态:s1:abcdefgs2:1234输入插入字符串的位置:3目标状态:s1:ab1234cdefgs2:12343.编写程序实现的功能是:调整数组中元素的存放顺序,使得所有正数放置在数组的前部,负数放置在数组的后部(假定数组中所有元素的值均不为0)。输出结果如下:处理前的数组为:-12-3-45-678-9-101112处理后的数组为:12211857-6-4-9-10-3-14.编写程序:定义一个函数voiddtor(intn,intr);实现将十进制整型数转换为r进制数。从键盘输入十进制数和要转换的进制数,在主

17、函数中调用该函数实现进制转换。(算法介绍:p201)例如输入82输出结果为1000输入2016输出结果为14类编程题答案1.答案#include<>classNUMprivate:intnum;public:NUM(intx);voidset(inta);intyn(intn);voidfun(););NUM:NUM(intx)num=x;)voidNUM:set(inta)num=a;)intNUM:yn(intn)intt=n,s=0;while(t)s=s*10+t%10;t/=10;)if(s=n)return1;elsereturn0;)voidNUM:fun()intm

18、;cout<<"num="<<num<<"的验证过程如下:"<<endl;while(1)intn=num,s=0;verall<stj.overall)STUt;t=sti;sti=stj;stj=t;)voidSTU:print()cout<<name<<'t'<<norm<<'t'<<ex<<'t'<<final<<'t'<<

19、overall<<endl;)voidmain()STUs5;charname100;intnorm,ex,fin;for(inti=0;i<5;i+)cout<<"请输入姓名、平时成绩、实验成绩、期末成绩:"<<endl;cin>>name>>norm>>ex>>fin;si.init(name,norm,ex,fin);si.fun();)for(i=0;i<5;i+)si.print();)cout<<"按总评成绩排序后:n姓名平时成绩实验成绩期末成绩

20、总评成绩"<<endl;sort(s,5);for(i=0;i<5;i+)si.print();)3.答案#include<>classArrayprivate:inta45;public:Array(intt口5,intn);intcomp(intn);intsum_comp(intj);voidexch(intj1,intj2);voidfun();voidprint(););Array:Array(intt口5,intn)for(inti=0;i<n;i+)for(intj=0;j<5;j+)aij=tij;)intArray:comp

21、(intn)for(inti=2;i<n;i+)if(n%i=0)return1;return0;)intArray:sum_comp(intj)ints=0;for(inti=0;i<4;i+)if(comp(aij)=1)s+=aij;returns;)voidArray:exch(intj1,intj2)for(inti=0;i<4;i+)intd=aij1;aij1=aij2;aij2=d;)voidArray:fun()for(inti=0;i<4;i+)for(intj=i+1;j<5;j+)if(sum_comp(i)<sum_comp(j)e

22、xch(i,j);)voidArray:print()for(inti=0;i<4;i+)for(intj=0;j<5;j+)cout<<aij<<'t'cout<<endl;)voidmain(void)intb45=10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20;Arrayarr(b,4);cout<<"原数组:"<<endl;();();cout<<"排序后的数组:"<<e

23、ndl;();4. 答案#include<>#include<>classEQUprivate:floata,b,c;doublex;public:EQU(floata1,floatb1,floatc1);voidfun(doublex0,doublee);voidprint();EQU:EQU(floata1,floatb1,floatc1)a=a1;b=b1;c=c1;x=;voidEQU:fun(doublex0,doublee)doublef;doublef0=a*x0*x0+b*x0+c;doubleff=2*a*x0+b;while(fabs(f0)>

24、e)(x0=x0-f0/ff;f0=a*x0*x0+b*x0+c;ff=2*a*x0+b;)x=x0;)voidEQU:print()cout<<x<<endl;)voidmain()floata,b,c;doublex0,e;cout<<"请输入方程的系数(a,b,c):cin>>a>>b>>c;cout<<"请输入预估的初始解x0:"cin>>x0;cout<<"请输入误差要求(e):"cin>>e;cout<<

25、;"该方程的解是:"EQUt(a,b,c);(x0,e);();)5. #include<>classArrayprivate:inta54;public:Array(intt4,intn);intprime(intn);intsum_prime(inti);voidexch(inti1,inti2);voidfun();voidprint(););Array:Array(intt口4,intn)for(inti=0;i<n;i+)for(intj=0;j<4;j+)aij=tij;)intArray:prime(intn)for(inti=2;i&

26、lt;n;i+)if(n%i=0)return0;return1;)intArray:sum_prime(inti)ints=0;for(intj=0;j<4;j+)if(prime(aij)s+=aij;returns;)voidArray:exch(inti1,inti2)for(intj=0;j<4;j+)intd=ai1j;ai1j=ai2j;ai2j=d;)voidArray:fun()for(inti=0;i<4;i+)for(intj=i+1;j<5;j+)if(sum_prime(i)<sum_prime(j)exch(i,j);)voidArra

27、y:print()for(inti=0;i<5;i+)for(intj=0;j<4;j+)cout<<aij<<'t'cout<<endl;)voidmain()intb54=10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20;Arrayarr(b,5);cout<<"原数组:"cout<<endl;();();cout<<"排序后的数组:"cout<<endl;();6. #inc

28、lude<>#include<>classIDprivate:char*id;inty,m,d,yes;char*sex;public:ID(char*s);voidfun();voidprint();ID(););ID:ID(char*s)id=newcharstrlen(s)+1;strcpy(id,s);y=0;m=0;d=0;sex=newchar5;sex0='0'yes=0;voidID:fun()inti=6;while(i<10)y=y*1O+idi+-'O'while(i<12)m=m*10+idi+-

29、9;0'while(i<14)d=d*1O+idi+-'O'if(id16-'0')%2=1)strcpy(sex,"男)elsestrcpy(sex,"女)intage=2015-y;if(age<=40&&strcmp(sex,"女")=0)yes=1;if(age<=35&&strcmp(sex,"男")=0)yes=1;)voidID:print()cout«"身份证号:"cout«id«

30、endl;cout«"出生日期:"cout«y«'.'«m«'.'«d«endl;cout<<"性另1J:"cout«sex«endl;cout«"是否青年:if(yes=1)cout«">"«endl;elsecout«"不是"<<endl;ID:ID()if(id)deleteid;if(sex)deletese

31、x;)voidmain()charcard1100="32201”;include<>#include<>classArrayprivate:doublea5,b5;public:Array(doublet,intn);doubleave();doubledat();voidfun();voidprint(););Array:Array(doublet,intn)for(inti=0;i<n;i+)ai=ti;bi=0;)doubleArray:ave()doubles=0;for(inti=0;i<5;i+)s+=ai;returns/5;)do

32、ubleArray:dat()doubles=0;for(inti=0;i<5;i+)s+=(ai-ave()*(ai卜ave();returns/5;)voidArray:fun()doublepi=,e=;doublet=sqrt(2*pi*dat(),s;for(inti=0;i<5;i+)s=-(ai-ave()*(ai-ave()/(2*dat();bi=pow(e,s)/t;)voidArray:print()cout<<"原数组a:"<<endl;for(inti=0;i<5;i+)cout<<ai<<'t'cout<<endl;cout<<"派生数组b:"<<endl;for(i=0;i<5;i+)cout<<bi<<'t'cout<<endl;)voidmain()doublet5=,;Arrayarr(t,5);();();8.#include<>#include<>

温馨提示

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

评论

0/150

提交评论