应用实践编程题答案

上传人:沈*** 文档编号:64136811 上传时间:2022-03-21 格式:DOC 页数:24 大小:151.50KB
收藏 版权申诉 举报 下载
应用实践编程题答案_第1页
第1页 / 共24页
应用实践编程题答案_第2页
第2页 / 共24页
应用实践编程题答案_第3页
第3页 / 共24页
资源描述:

《应用实践编程题答案》由会员分享,可在线阅读,更多相关《应用实践编程题答案(24页珍藏版)》请在装配图网上搜索。

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)

2、 :将 num的值设置为 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:分别表示平时成绩、实验成绩、期末考试和

3、总评成绩。char name15 :学生姓名。(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 按总

4、评成绩进行从大到小排序。void print( ) :输出该学生信息。(3) 在主函数中先定义一个有 5 个元素的对象数组,用循环语句输入 学生信息,并根据这些信息利用成员函数 init() 更新学生信息,然 后使用函数 sort() 对数组排序,最后输出排序后的学生信息。 输入/输出示例 (下划线部分为键盘输入 ): 请输入姓名、平时成绩、实验成绩、期末成绩: AAA 82 75 58 请输入姓名、平时成绩、实验成绩、期末成绩: BBB 93 60 84 请输入姓名、平时成绩、实验成绩、期末成绩: CCC 67 82 81 请输入姓名、平时成绩、实验成绩、期末成绩: DDD 54 78 51

5、 请输入姓名、平时成绩、实验成绩、期末成绩: EEE 91 52 41 按总评成绩排序后: 姓名平时成绩实验成绩期末成绩总评成绩BBB93608480CCC67828178AAA82755867DDD54785158EEE915241413【题目】试定义一个类 Array ,首先求各列元素中的合数 (非素数) 之和,再将数组各列以其合数之和的大小从大到小排序, 具体要求如 下:(1) 私有数据成员int a45 :需要排序的二维数组。(2) 公有成员函数Array(int t5, int n) :构造函数,用参数 t 初始化成员数组 a, n 表示数组 t 的行数。int comp(int n

6、) :判断整数 n 是否为合数,如果是合数,返回值为 1,否则返回值为 0。intsum_comp(int j) :求数组 a 第 j 列元素中所有合数之和。void exch(int j1, int j2):交换数组 a 的第 j1, j2 列元素。void fun() :根据题意对二维数组进行列排序。void print() :以矩阵的形式输出成员数组。(3) 在主函数中定义一个二维数组, 并使用该数组对类 Array 进行测 试。输出示例:原数组:1012541516178191011121314151670181920排序后的数组:121510541710168191215111314

7、70201618194【题目】 已知切线法求方程 f(x)=ax 2+bx+c=0 在 x 附近的一个解 的迭代公式为: x=x- f(x)/f (x) ,其中 f (x)=2ax+b 为函数 f(x) 的导数。试定义一个类 EQU,用切线法求方程 f(x)=ax 2+bx+c=0 在 x 附近的一个解。具体要求如下:(1) 私有数据成员float a,b,c :保存方程的系数 a,b 和 cdouble x : x 为所求得的解(2) 公有成员函数EQU(float a1, float b1, float c1) :构造函数,用参数 a1, b1, c1 分别初始化成员 a,b,c 。voi

8、d fun(double x0, double 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)|e 为止。void print( ) :输出所求得的解(3) 在主函数中建立EQU对象,并求出方程f(x)=2x2+6x-7=0x=5.0 附近的一个解,要求最终误差 |f(x)|0, 则方程在区间 x1, x2 上无解;(2) 令x=(x1+x2)/2 ;(3) 如果f(x)*f(x1)0 ,方程的解在区间 x, x2 上

9、,则令 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 上的解。int k :如果在区间 x1, x2 内方程有解,则 k值为1,否则k值为0;(2) 公有成员函数EQU(float a1, float b1, float c1):用参数 a1,b1,c1 分别初始化成员 a

10、,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() 函数求出方程的解, 最后调用 print() 函数输出所求得的解。正确程序的输入 / 输出结果如下(下划线部分为键盘输入) : 请输入方程的系数 (a,b,c) : 1 5 -4请输入区间

11、(x1,x2) 边界:0 10 请输入误差要求 (e) : 0.00001该方程在区间 0,10 中的解是: 0.701561函数编程题1. 定义两个独立函数, void print(int b);实现将一维数组元素一行输出 ,void sort(int b,int n);实现将一维数组的元素按从大到小排序;在主函数中定义一个整型数组 a8 ,从键盘输入 8 个数 为数组元素赋值,分别调用两个函数。2字符串处理: 设计一个通用函数实现在字符串 s1 中从第 m个字符 开始插入字符串 s2,在主程序中对该函数进行测试。 初始状态: s1: abcdefgs2:1234 输入插入字符串的位置: 3

12、 目标状态 :s1: ab1234cdefgs2:12343编写程序实现的功能是:调整数组中元素的存放顺序,使得所有 正数放置在数组的前部, 负数放置在数组的后部 (假定数组中所有元 素的值均不为 0)。输出结果如下:处理前的数组为:-1 2 -3 -4 5 -6 7 8 -9 -10 11 12 处理后的数组为:12 2 11 8 5 7 -6 -4 -9 -10 -3 -1 4编写程序:定义一个函数 void dtor(intn,int r); 实现将十进制 整型数转换为 r 进制数。从键盘输入十进制数和要转换的进制数, 在 主函数中调用该函数实现进制转换。 (算法介绍: p201) 例如

13、 输入 8 2 输出结果为 1000输入 20 16 输出结果为 14类编程题答案1答案#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: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

14、的验证过程如下: endl; while(1)int n=num,s=0; / 350dos=s*10+n%10;/ 053n/=10;while(n);m=s+num; /403endl;if(yn(m)=1) coutnum+s=mn 命题成立! break;else coutnum+s=mendl; num=m;void main()NUM arr(350);arr.fun();arr.set(2015);arr.fun ();2答案#include#include class STUprivate:int norm,ex,final,overall;char name15;public

15、: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.25+final*0.55+0.5);else overa

16、ll=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) STU t; t=sti;sti =stj;stj =t;void STU:print() coutnametnormtextfinaltoverallendl;void main()STU s5;char name100;int norm,ex,fin;for(int i=0;i5;i+) cout 请输入姓名、平时成绩、实验成绩、期末成绩:namenormexfin;si.in

17、it(name,norm,ex,fin); si.fun(); for(i=0;i5;i+) si.print();endl;cout 按总评成绩排序后: n 姓名平时成绩实验成绩期末成绩总评成绩 sort(s,5);for(i=0;i5;i+) si.print();3答案#include class Array private: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(i

18、nt t5,int n)for(int i=0;in;i+)for(int j=0;j5;j+) aij=tij;int Array:comp(int n)for(int i=2;in;i+)if(n%i=0) return 1;return 0;int Array:sum_comp(int j)int s=0;for(int i=0;i4;i+)if(comp(aij)=1) s+=aij;return s;void Array:exch(int j1,int j2) for(int i=0;i4;i+) int d=aij1; aij1=aij2; aij2=d;void Array:fu

19、n() for(int i=0;i4;i+) for(int j=i+1;j5;j+) if(sum_comp(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 排序后的

20、数组: endl; arr.print();4答案#include #include class EQU private:float a,b,c; double 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;double f0=a*x0*x0+b*x0+c;double ff

21、=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 ()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 #include class Array private: int a54;public:Array(int t4,int n);int prime(int n);int sum_

22、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 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:ex

23、ch(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);void 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,7

24、0,18,19,20; Array arr(b,5);cout 原数组: ; coutendl;arr.print(); arr.fun();cout 排序后的数组: ; coutendl;arr.print();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 char strlen(s)+1; strcpy(id,s);y=0; m=0;d=0;sex=n

25、ew char5;sex0=0;yes=0;void ID:fun( )int i=6; while(i10) y=y*10+idi+-0;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=2015-y; if(age=40&strcmp(sex, 女 )=0) yes=1;if(age=35&strcmp(sex, 男 )=0)yes=1;void ID:print( )cout 身份证号: ;coutidendl;cout 出生

26、日期: ;couty.m.dendl;cout 性别: ;coutsexendl;cout 是否青年: ;if(yes=1)cout 是 endl;else cout 不是 endl;ID:ID()if(id) delete id;if(sex) delete sex;void main()char card1100=321102197504011201;/char card2100; / 321102198103011213 coutcard2;ID person(card1);person.fun();person.print();7.#include #include class Arr

27、ayprivate: 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=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();retu

28、rn 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+)coutait;coutendl; cout 派生数组 b:endl;for(i=0;i5;i+)coutbit;coutendl;void main() double t5=6.1,2.6,15.8,4.

29、3,1.72;Array arr(t,5);arr.fun();arr.print();8 #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(float a1,float b1,float c1) a=a1;b=b1;c=c1; void EQU:fun(double xx1,double xx2,double

30、 e) 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)=e&k)if(f1*f0)x1=x;else x2=x;x=(x1+x2)/2; f=a*x*x+b*x+c;void EQU:print() if(k) coutxendl;else cout ”无解 ”endl;void main()float a,b,c;double x1,x2,e;coutabc;coutx1x2;

31、coute;EQU s(a,b,c);s.fun(x1,x2,e);cout该方程在区间 0,10中的解是: ;/ 0.701561 s.print ();函数编程题答案1.答案#include void print(int b)for(int i=0;i8;i+) coutbit;coutendl;void sort(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

32、(int i=0;iai;print(a);sort(a,8);print(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(p=r)*(r+a)=*r;r-;while(*q!=0)*p+=*q+;void print(char s1,char s2) couts1:s1endl;coutt s2:s2endl;void main()char s1100=abcdefg,s2100=1234;i

33、nt m;cout 初始状态: ;print(s1,s2);cout 输入插入字符串的位置: m;insert(s1,s2,m);cout 目标状态: ;print(s1,s2);3 #include void swap(int &t1, int &t2) int t=t1;t1=t2;t2=t;void adjust(int p, int n) int i=0, j=n-1;while(1) while(pi0) i+;while(pj0)j-;if(ij)swap(pi, pj);elsebreak;i+;j-;void main( ) int a12= -1,2,-3,-4,5,-6,7,8,-9,-10,11,12; cout 处理前的数组为: endl;for(int k=0; k12; k+)coutak ;adjust(a, 12);coutn 处理后的数组为: endl; for(k=0; k12; k+)coutak ;coutendl;4 #include void 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-)coutsj; coutendl;void main()int n,r;r endl;coutnr;dtor(n,r);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!