应用实践VC++编程题及答案Word格式文档下载.docx
- 文档编号:17008013
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:21
- 大小:26.40KB
应用实践VC++编程题及答案Word格式文档下载.docx
《应用实践VC++编程题及答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《应用实践VC++编程题及答案Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
intNUM:
yn(intn){
intt=n,s=0;
while(t){
s=s*10+t%10;
t/=10;
}
if(s==n)return1;
elsereturn0;
fun(){
intm;
cout<
<
"
num="
num<
的验证过程如下:
endl;
while
(1){
intn=num,s=0;
verall<
st[j].overall){
intt;
t=st[i].overall;
st[i].overall=st[j].overall;
st[j].overall=t;
}
voidSTU:
print(){
name<
'
\t'
norm<
ex<
final<
overall<
voidmain(){
STUs[3];
charname[100];
intnorm,ex,fin;
for(inti=0;
i<
3;
i++){
请输入姓名、平时成绩、实验成绩、期末成绩:
cin>
name>
norm>
ex>
fin;
s[i].init(name,norm,ex,fin);
s[i].fun();
}
cout<
按总评成绩排序后:
\n姓名平时成绩实验成绩期末成绩总评成绩"
sort(s,3);
for(i=0;
s[i].print();
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列元素。
根据题意对二维数组进行列排序。
voidprint():
以矩阵的形式输出成员数组。
(3)在主函数中定义一个二维数组,并使用该数组对类Array进行测试。
原数组:
10125415
161781910
1112131415
1670181920
排序后的数组:
12151054
171016819
1215111314
7020161819
3.答案
classArray{
inta[4][5];
Array(intt[][5],intn);
intcomp(intn);
intsum_comp(intj);
voidexch(intj1,intj2);
voidprint();
Array:
Array(intt[][5],intn){
n;
i++)
for(intj=0;
j<
5;
j++)
a[i][j]=t[i][j];
intArray:
comp(intn){
intflag=0;
for(inti=2;
if(n%i==0)flag=1;
returnflag;
sum_comp(intj){
ints=0;
4;
if(comp(a[i][j])==1)
s+=a[i][j];
&
s<
returns;
voidArray:
exch(intj1,intj2){
i++){
intd=a[i][j1];
a[i][j1]=a[i][j2];
a[i][j2]=d;
for(intj=i+1;
if(sum_comp(i)<
sum_comp(j))
exch(i,j);
{
cout<
a[i][j]<
;
voidmain(void){
intb[4][5]={10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20};
Arrayarr(b,4);
();
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为所求得的解。
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)|<
e为止。
voidprint():
输出所求得的解。
(3)在主函数中建立EQU对象,并求出方程f(x)=2x2+6x-7=0在x=附近的一个解,要求最终误差|f(x)|<
10-5,最后调用print()函数输出所求得的解。
正确程序的输入/输出结果如下(下划线部分为键盘输入):
请输入方程的系数(a,b,c):
26-7
请输入预估的初始解x0:
5
请输入误差要求(e):
该方程的解是:
4.答案
classEQU{
floata,b,c;
doublex;
EQU(floata1,floatb1,floatc1);
voidfun(doublex0,doublee);
EQU:
EQU(floata1,floatb1,floatc1){
a=a1;
b=b1;
c=c1;
x=;
voidEQU:
fun(doublex0,doublee){
doublef;
do{
doublef0=a*x0*x0+b*x0+c;
doubleff=2*a*x0+b;
x=x0-f0/ff;
f=a*x*x+b*x+c;
doublef1=2*a*x+b;
x0=x-f/f1;
}while(f>
e);
print(){
x<
doublex0,e;
请输入方程的系数(a,b,c):
cin>
a>
b>
c;
请输入预估的初始解x0:
x0;
e;
EQUt(a,b,c);
(x0,e);
5.【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下:
inta[5][4]:
待处理的数组。
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()。
原数组:
101254
1516178
19101112
13141516
70181920
排序后的数组:
5答案.#include<
inta[5][4];
Array(intt[][4],intn);
intprime(intn);
intsum_prime(inti);
voidexch(inti1,inti2);
Array(intt[][4],intn){
for(intj=0;
a[i][j]=t[i][j];
prime(intn){
if(n%i==0)return0;
return1;
sum_prime(inti){
if(prime(a[i][j]))
exch(inti1,inti2){
intd=a[i1][j];
a[i1][j]=a[i2][j];
a[i2][j]=d;
fun(){
for(intj=i+1;
if(sum_prime(i)<
sum_prime(j))
exch(i,j);
intb[5][4]={10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20};
Arrayarr(b,5);
6.【题目】判断某人是否为青年的标准是男性不超过35周岁或女性不超过40周岁。
已知身份证号从第7位开始的连续8位表示持证人的出生年月日,身份证号的第17位为奇数表示持证人为男性,身份证号第17位数字为偶数表示持证人为女性。
例如:
身份证号为3291X的持证人出生年月为1983年1月3日,性别为男性。
试定义一个类ID,根据身份证号判断持证人截止到2015年10月1日是否为青年。
char*id:
保存18位身份证号。
inty,m,d,yes:
y,m,d分别表示持证人的出生年、月、日。
yes取值为1或0分别表示持证人是青年或不是青年。
char*sex:
持证人的性别(”男”或”女”)。
ID(char*s):
用参数s初始化成员id(需申请动态内存),并将y,m,d初始化为0,并为指针sex分配足够的存储空间。
voidfun():
根据身份证号计算持证人的出生年月和性别,并判断其是否为青年。
voidprint():
输出持证人的信息。
~ID():
析构函数,进行必要的操作。
(3)在主函数中输入一个身份证号,生成相应的对象,判断并输出持证人截止到2015年10月1日是否为青年。
可以使用以下身份证号测试程序:
身份证号1:
32201
身份证号2:
32213
输入/输出示例(下划线部分为键盘输入):
InputanID:
32213
身份证号:
出生日期:
性别:
男
是否青年:
是!
6.#include<
classID{private:
char*id;
inty,m,d,yes;
char*sex;
ID(char*s);
~ID();
ID:
ID(char*s){
id=newchar[100];
strcpy(id,s);
y=0;
m=0;
d=0;
sex=newchar[5];
sex[0]='
\0'
yes=0;
voidID:
fun(){
inti=6;
while(i<
10)
y=y*10+id[i++]-'
0'
12)
m=m*10+id[i++]-'
14)
d=d*10+id[i++]-'
if((id[16]-'
)%2==1)
strcpy(sex,"
男"
);
else
strcpy(sex,"
女"
intage=2016-y;
if(age<
=40&
strcmp(sex,"
)==0)
yes=1;
=35&
print(){
身份证号:
cout<
id<
出生日期:
y<
.'
m<
d<
性别:
sex<
是否青年:
if(yes==1)cout<
是"
elsecout<
不是"
~ID(){
if(id)delete[]id;
if(sex)delete[]sex;
charcard1[100]="
32201"
【题目】设数组a派生出数组b的规则为
,其中,为数组a中n个元素的平均值,为数组a中n个元素的方差,
。
试定义一个类Array,实现上述数组的派生。
doublea[5],b[5]:
数组a,派生数组b。
Array(doublet[],intn):
构造函数,用参数t的前n个元素初始化成员数组a。
doubleave():
计算并返回数组a中所有元素的平均值。
doubledat():
计算并返回数组a中全部n个元素的方差。
根据题意派生数组b。
注:
头文件中的函数doublepow(doublex,doubley)返回值为xy。
输出成员数组。
(3)在主函数中定义一个数组,并使用该数组对类Array进行测试,要求输出原数组和派生数组。
原数组a:
派生数组b:
7.#include<
classArray{private:
doublea[5],b[5];
Array(doublet[],intn);
doubleave();
doubledat();
Array(doublet[],intn){
a[i]=t[i];
b[i]=0;
doubleArray:
ave(){
doubles=0;
s+=a[i];
returns/5;
dat(){doubles=0;
s+=(a[i]-ave())*(a[i]-ave());
doublepi=,e=;
doublet=sqrt(2*pi*dat()),s;
i++){s=-(a[i]-ave())*(a[i]-ave())/(2*dat());
b[i]=pow(e,s)/t;
}}
a[i]<
b[i]<
voidmain(){doublet[5]={,,,,};
Arrayarr(t,5);
();
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]内的一个解。
存储方程的系数a,b和c。
doublex1,x2,x:
x为方程在区间[x1,x2]上的解。
intk:
如果在区间[x1,x2]内方程有解,则k值为1,否则k值为0;
用参数a1,b1,c1分别初始化成员a,b,c。
voidfun(doublexx1,doublexx2,doublee):
求方程ax2+bx+c=0在区间[xx1,xx2]内的一个解x,要求最终误差|f(x)|<
e。
若方程有解,则输出所求得的解;
若无解,则输出“方程在给定区间内无解”。
(3)在主函数中首先输入方程的系数、区间和误差要求,建立EQU对象并初始化,然后调用fun()函数求出方程的解,最后调用print()函数输出所求得的解。
15-4
请输入区间([x1,x2])边界:
010
该方程在区间[0,10]中的解是:
8.#include<
#include<
classEQU{private:
doublex1,x2,x;
intk;
voidfun(doublexx1,doublexx2,doublee);
EQU:
EQU(floata1,floatb1,floatc1){a=a1;
fun(doublexx1,doublexx2,doublee){x1=xx1;
x2=xx2;
doublef1=a*x1*x1+b*x1+c,f2=a*x2*x2+b*x2+c;
do{
x=(x1+x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 实践 VC 编程 答案