应用实践编程题答案.docx
- 文档编号:9807784
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:27
- 大小:22.09KB
应用实践编程题答案.docx
《应用实践编程题答案.docx》由会员分享,可在线阅读,更多相关《应用实践编程题答案.docx(27页珍藏版)》请在冰豆网上搜索。
应用实践编程题答案
类编程题
1.【题目】试定义一个类NUM,验证下列命题是否成立:
任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新正整数重复上述步骤,最终一定可以得到一个回文数。
例如,正整数350的反序数为053(即53),350+53=403,403+304=707,707是回文数,命题成立。
又如,正整数2015的反序数为5102,2015+5102=7117,7117是回文数,命题成立。
具体要求如下:
私有数据成员
intnum:
存放用于验证命题的正整数。
公有成员函数
NUM(intx):
构造函数,用x初始化数据成员num。
voidset(inta):
将num的值设置为a。
intyn(intn):
判断n是否回文数,若是,返回1;否则返回0。
voidfun():
使用num验证命题是否成立,并显示验证过程。
在主函数中对该类进行测试。
输出示例:
num=350的验证过程如下:
350+53=403
403+304=707
命题成立!
num=2015的验证过程如下:
2015+5102=7117
命题成立!
2.【题目】试定义一个实现计算学生课程成绩的类STU,对学生学期总评成绩进行计算并排序。
具体要求如下:
(1)私有数据成员
intnorm,ex,final,overall:
分别表示平时成绩、实验成绩、期末考试和总评成绩。
charname[15]:
学生姓名。
(2)公有成员函数
voidinit(char*name1,intnor1,intex1,intfin1):
用参数name1,nor1,exp1,fin1分别初始化成员name,norm,ex,final。
voidfun():
计算学生的总评成绩。
计算方法为:
总评成绩=平时成绩占*20%+实验成绩占*25%+期末成绩占*55%。
总评成绩计算时要求四舍五入,并且期末考试成绩不足50分时,则期末考试成绩即为总评成绩。
friendvoidsort(STUst[],intn):
友元函数,对st按总评成绩进行从大到小排序。
voidprint():
输出该学生信息。
(3)在主函数中先定义一个有5个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数init()更新学生信息,然后使用函数sort()对数组排序,最后输出排序后的学生信息。
输入/输出示例(下划线部分为键盘输入):
请输入姓名、平时成绩、实验成绩、期末成绩:
AAA827558
请输入姓名、平时成绩、实验成绩、期末成绩:
BBB936084
请输入姓名、平时成绩、实验成绩、期末成绩:
CCC678281
请输入姓名、平时成绩、实验成绩、期末成绩:
DDD547851
请输入姓名、平时成绩、实验成绩、期末成绩:
EEE915241
按总评成绩排序后:
姓名平时成绩实验成绩期末成绩总评成绩
BBB93608480
CCC67828178
AAA82755867
DDD54785158
EEE91524141
3.【题目】试定义一个类Array,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下:
(1)私有数据成员
inta[4][5]:
需要排序的二维数组。
(2)公有成员函数
Array(intt[][5],intn):
构造函数,用参数t初始化成员数组a,n表示数组t的行数。
intcomp(intn):
判断整数n是否为合数,如果是合数,返回值为1,否则返回值为0。
intsum_comp(intj):
求数组a第j列元素中所有合数之和。
voidexch(intj1,intj2):
交换数组a的第j1,j2列元素。
voidfun():
根据题意对二维数组进行列排序。
voidprint():
以矩阵的形式输出成员数组。
(3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。
输出示例:
原数组:
10125415
161781910
1112131415
1670181920
排序后的数组:
12151054
171016819
1215111314
7020161819
4.【题目】已知切线法求方程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和c。
doublex:
x为所求得的解。
(2)公有成员函数
EQU(floata1,floatb1,floatc1):
构造函数,用参数a1,b1,c1分别初始化成员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)| voidprint(): 输出所求得的解。 (3)在主函数中建立EQU对象,并求出方程f(x)=2x2+6x-7=0在x=附近的一个解,要求最终误差|f(x)|<10-5,最后调用print()函数输出所求得的解。 正确程序的输入/输出结果如下(下划线部分为键盘输入): 请输入方程的系数(a,b,c): 26-7 请输入预估的初始解x0: 5 请输入误差要求(e): 该方程的解是: 5.【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下: (1)私有数据成员 inta[5][4]: 待处理的数组。 (2)公有成员函数 Array(intt[][4],intn): 构造函数,用参数t初始化成员数组a,n为数组t的行数。 intprime(intn): 判断整数n是否为素数,如果是素数,返回值为1,否则返回值为0。 intsum_prime(inti): 求数组a中第i行元素中所有素数之和。 voidexch(inti1,inti2): 交换数组a的第i1,i2行元素。 voidfun(): 根据题意对二维数组进行行排序。 要求排序过程中交换数据时使用成员函数exch()。 voidprint(): 以矩阵的形式输出成员数组。 (3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。 输出示例: 原数组: 101254 1516178 19101112 13141516 70181920 排序后的数组: 19101112 70181920 1516178 13141516 101254 6.【题目】判断某人是否为青年的标准是男性不超过35周岁或女性不超过40周岁。 已知身份证号从第7位开始的连续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(需申请动态内存),并将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个元素的平均值,为数组a中n个元素的方差,。 试定义一个类Array,实现上述数组的派生。 具体要求如下: (1)私有数据成员 doublea[5],b[5]: 数组a,派生数组b。 (2)公有成员函数 Array(doublet[],intn): 构造函数,用参数t的前n个元素初始化成员数组a。 doubleave(): 计算并返回数组a中所有元素的平均值。 doubledat(): 计算并返回数组a中全部n个元素的方差。 voidfun(): 根据题意派生数组b。 注: 头文件中的函数doublepow(doublex,doubley)返回值为xy。 voidprint(): 输出成员数组。 (3)在主函数中定义一个数组,并使用该数组对类Array进行测试,要求输出原数组和派生数组。 输出示例: 原数组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)私有数据成员 floata,b,c: 存储方程的系数a,b和c。 doublex1,x2,x: x为方程在区间[x1,x2]上的解。 intk: 如果在区间[x1,x2]内方程有解,则k值为1,否则k值为0; (2)公有成员函数 EQU(floata1,floatb1,floatc1): 用参数a1,b1,c1分别初始化成员a,b,c。 voidfun(doublexx1,doublexx2,doublee): 求方程ax2+bx+c=0在区间[xx1,xx2]内的一个解x,要求最终误差|f(x)| voidprint(): 若方程有解,则输出所求得的解;若无解,则输出“方程在给定区间内无解”。 (3)在主函数中首先输入方程的系数、区间和误差要求,建立EQU对象并初始化,然后调用fun()函数求出方程的解,最后调用print()函数输出所求得的解。 正确程序的输入/输出结果如下(下划线部分为键盘输入): 请输入方程的系数(a,b,c): 15-4 请输入区间([x1,x2])边界: 010 请输入误差要求(e): 该方程在区间[0,10]中的解是: 函数编程题 1.定义两个独立函数,voidprint(intb[]);实现将一维数组元素一行输出,voidsort(intb[],intn);实现将一维数组的元素按从大到小排序;在主函数中定义一个整型数组a[8],从键盘输入8个数为数组元素赋值,分别调用两个函数。 2.字符串处理: 设计一个通用函数实现在字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。 初始状态: s1: abcdefg s2: 1234 输入插入字符串的位置: 3 目标状态: s1: ab1234cdefg s2: 1234 3.编写程序实现的功能是: 调整数组中元素的存放顺序,使得所有正数放置在数组的前部,负数放置在数组的后部(假定数组中所有元素的值均不为0)。 输出结果如下: 处理前的数组为: -12-3-45-678-9-101112 处理后的数组为: 12211857-6-4-9-10-3-1 4.编写程序: 定义一个函数voiddtor(intn,intr);实现将十进制整型数转换为r进制数。 从键盘输入十进制数和要转换的进制数,在主函数中调用该函数实现进制转换。 (算法介绍: p201) 例如输入82输出结果为1000 输入2016输出结果为14 类编程题答案 1.答案 #include<> classNUM{ private: 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; cout<<"num="< "< while (1){ intn=num,s=0;verall STUt;t=st[i];st[i]=st[j];st[j]=t; } } voidSTU: : print(){ cout< } voidmain(){ STUs[5]; charname[100]; intnorm,ex,fin; for(inti=0;i<5;i++){ cout<<"请输入姓名、平时成绩、实验成绩、期末成绩: "< cin>>name>>norm>>ex>>fin; s[i].init(name,norm,ex,fin); s[i].fun(); } for(i=0;i<5;i++){ s[i].print(); } cout<<"按总评成绩排序后: \n姓名平时成绩实验成绩期末成绩总评成绩"< sort(s,5); for(i=0;i<5;i++){ s[i].print(); } } 3.答案 #include<> classArray{ private: inta[4][5]; public: Array(intt[][5],intn); intcomp(intn); intsum_comp(intj); voidexch(intj1,intj2); voidfun(); voidprint(); }; Array: : Array(intt[][5],intn){ for(inti=0;i for(intj=0;j<5;j++) a[i][j]=t[i][j]; } intArray: : comp(intn){ for(inti=2;i if(n%i==0)return1; return0; } intArray: : sum_comp(intj){ ints=0; for(inti=0;i<4;i++) if(comp(a[i][j])==1) s+=a[i][j]; returns; } voidArray: : exch(intj1,intj2){ for(inti=0;i<4;i++){ intd=a[i][j1]; a[i][j1]=a[i][j2]; a[i][j2]=d; } } voidArray: : fun(){ for(inti=0;i<4;i++) for(intj=i+1;j<5;j++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 实践 编程 答案