




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高级程序设计语言A卷答案
1.(15分)试编写一个C++程序实现求两个数的最大公约数和最小公倍数。要
求两个数字必须用随机数生成。
答案
#include<iostream>
#include<time.h>
usingnamespacestd;
intgcd(intx,inty)
{
intr;
while(x%y!=O)
(
r=x%y;x=y;y=r;
}
returny;
)
intlcm(intx,inty)
(
returnx*y/gcd(x,y);
)
voidmain()
(
srand(time(O));
inta=rand(),b=rand();
cout<<"输出两个正整数:"«a«n<<b;
cout«"最大公约数为:"<<gcd(a,b)«endl«"最小公倍数
为:"<<lcm(a,b)«endl;
)
备注:最大公约数也可以写成intgcd(inta,intb){if(a%b==0)returnb;return
gcd(b,a%b);}或
intgcd(intx,inty)
{intt,r;while(x!=y)
{if(x>y)x=x-y;elseif(y>x)y=y-x;}
returny;
)
2.(15分)编写递归函数实现如下函数。
-1n=0
Pn(x)=YXn=l
[((2n-1)*x*Pn.i(x)-(n-l)*Pn-2(x))/nn>l
答案
#include<iostream>
usingnamespacestd;
doubleP(intn,intx)
(
if(n==0)
return1;
elseif(n==l)
returnx;
elseif(n>l)
return((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n;
}
voidmain()
(
intx,y;
cin»x»y;
cout«P(x,y)«endl;
}
3.(10分)编写一函数intSubStrNum(char*str,char*substr),实现统计字符
串substr在字符串str中出现的次数。
答案
#include<iostream>
usingnamespacestd;
intSubStrNum(char*str,char*substr)
(
intNum=0,h1,h2,p1=0,p2;
hl=strlen(str);
h2=strlen(substr);
while(pl<hl)
(
p2=0;
while(str[p1]==substr[p2]&&p2<h2&&pl<hl)
pl++,p2++;
if(pl==h1&&p2<h2)
break;
if(p2==h2)
Num++;
else
pl=pl-p2+l;
)
returnNum;
)
voidmain()
(
charstr[200],substr[20];
cin»str;
cin»substr;
cout«SubStrNum(str,substr)«endl;
}
4.(15分)已有一个数组,现在输入一个数,查找数组中是否有这个数,如果
有,把这个元素删除掉。
要求
(1)查找使用如下函数(5分)
intfind(inta[],intn,intkey)
(
inti;
for(i=0;i<n;i++)
if(a[i]==key)
returni;
return-1;
)
(2)屏幕对话应出现以下格式的画面:(5分)
输入n:5
输入n个数:26379
输入要删除的数:6
删除以后数组变为:2379
答案
#include<iostream>
usingnamespacestd;
#defineN100
intfind(inta[],intn,intkey)
(
inti;
for(i=0;i<n;i++)
if(a[i]==key)
returni;
return-1;
)
voidmain()
(
intkey,n,i,index,a[N];
coutv<”输入n:n;
cin»n;
cout«endl;
coutvv”输入n个数:”;
for(i=0;i<n;i+4-)
cin»a[i];
cout«endl;
coutv<”输入要删除的数:”;
cin»key;
cout«endl;
index=find(a,n,key);
if(index==-l)
cout<v”这个数不存在。”<vendl;
else
for(intj=index;j<n;j++)
a[j]=a|j+l];
n--;
coutvv”删除以后数组变为:!"vvendl;
for(i=0;i<n;i++)
cout«a[i]«,\t,;
5.(15分)有5个学生,每个学生的数据包括学号,姓名,3门课的成绩,从
键盘输入5个学生数据,并打印出各科的总分和平均分,以及平均成绩最高
的学生的数据(包括学号,姓名,3门课的成绩,平均分数)。要求用结构体
表示学生的基本信息。
答案
#include<iostream>
usingnamespacestd;
#defineM100
doublesum[M];
structStudent
{
charnumfll];
charname[20];
floatscore1;
floatscore2;
floatscore3;
);
voidInput(Students[],intn)
for(inti=0;i<n;i++)
(
cout<<”请输入学生的学号、姓名、成绩";
cin»s[i].num»s[i].name»s[i].scorel»s[i].score2»s[i].score3;
if((s[i].score1>0&&s[i].score1<101)&&(s[i].score2>0lls[i].score2<101)&&(s
[i].score3>0&&s[i].score3<101))
sum[i]=s[i].scorel+s[i].score2+s[i].score3;
else
break;
cout«endl;
}
voidOutput(Students[],intn)
(
intt=O,ss=O,s1=0,s2=0,s3=0;
for(inti=0;i<n;i++)
(
sl+=s[i].score1;
s2+=s[i].score2;
s3+=s[i].score3;
if(sum[i]>ss)
ss=sum[i];
)
cout<<"第一门平均成绩为:"<<sl/n«\n々"第二门平均成绩为:
"<<s2/n«\nV<"第三门平均成绩为:"«s3/n«endl;
for(i=0;i<n;i++)
(
if(sumfi]==ss)
cout<<"最高分学生是:"<<s[i].name<<N<<"平均分是:
"«ss/3.0«endl;
)
)
voidmain()
(
StudentS[M];
Input(S,10);
Output(SJO);
)
6.(10分)设计一个程序,利用友元函数计算平面上两点之间的距离。根据给
定的类定义实现其友元函数,并用主函数进行测试。
提示:Point定义
classPoint
(
public:
Point(intxx=0,intyy=0)
(
X=xx,Y=yy;
)
voidDisplayO
(
cout«X«,\t,«Y«endl;
)
friendfloatdis(Point&M,Point&N);
private:
intX,Y;
答案
#include<iostream>
#include<cmath>
usingnamespacestd;
classPoint
(
public:
Point(intxx=0,intyy=0)
(
X=xx,Y=yy;
}
voidDisplayO
{
cout«X«,\t,«Y«endl;
)
friendfloatdis(Point&M,Point&N);
private:
intX,Y;
};
floatdis(Point&M,Point&N)
(
returnsqrt((M.X-N.X)*(M.X-N,X)+(M.Y-N.Y)*(M.Y-N.Y));
}
voidmain()
(
PointA(1,2),B(3,5);
cout<<"两点之间距离为:"《dis(A,B)«endl;
)
7.(20分)设计一个用于人数管理的“People(人员)”类。由于考虑到通用性,
这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、
birthday(出生日期)、id(身份证号)。其中“出生日期”声明为一个已给定
的“日期类”类型,身份证号为18位。要求包括:
(1)利用给定的条件,将People类定义完整。(4分)
(2)在类外实现对人员信息的录入和显示。(8分)
(3)在类定义中添加一个析构函数。(2分)
(4)在类外实现成员函数的功能。(6分)
提示:
#include<iostream>
#include<string>
usingnamespacestd;
classDate//日期类
private:
intyear,month,day;
public:
Date(){}〃默认构造
Date(inty,intm,intd)〃带参构造
{year=y,month=m,day=d;}
voidset()
{cin»year»month»day;}
voiddisplay。〃显示函数
{cout«year«n^n«month«HJI"«day«nH";}
);
classPerson〃人员类
(
private:
{此部分填写类的数据成员}
public:
Person(){}〃默认构造
Person(intn,inty,intm,intd,charid[18],chars=,m,):birthday(y,m,d);
Person(Person&p);
voidinput();
voidoutput();
);
主函数如下:
voidmain()
(
Personpl;
pl.input();
pl.output();
cout«endl;
Personp2(5,2001,3,21,叫;
p2.output();
)
答案
#include<iostream>
#include<string>
usingnamespacestd;
classDate〃日期类
(
private:
intyear,month,day;
public:
Date(){}〃默认构造
Date(inty,intm,intd)〃带参构造
{year=y,month=m,day=d;}
voidset()
{cin»year»month»day;}
voiddisplay。//显示函数
{coutvvyearvv"年"vvmonthvv”月,,«day«,,H";}
classPerson〃人员类
(
private:
intnum;charsex;Datebirthday;charID[18];
public:
Person(){}〃默认构造
Person(intn,inty,intm,intd,charid[18],chars='m'):birthday(y,m,d)〃有默认
值的带参构造
(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 静脉输液工具的合理选择 2
- 广东诗莞市高二数学下学期5月期中试题
- 部编版一年级语文下册生字笔顺期末复习
- 【2】66144+AIGC应用基础+课程标准
- 岳阳现代服务职业学院《生物医学导论》2023-2024学年第二学期期末试卷
- 四川省德阳中学2025年高三调研测试(二)物理试题文试题含解析
- 辽宁省大连市达标名校2025届中考猜题卷(一)语文试题含解析
- 江西婺源茶业职业学院《数字音频处理技术》2023-2024学年第二学期期末试卷
- 延边大学《生物医学工程应用实验》2023-2024学年第二学期期末试卷
- 四川省成都龙泉第二中学2025届高三下学期零月考英语试题试卷含解析
- 短期资金拆借合同样本
- 汽车液压主动悬架系统的设计与仿真
- 第五讲-铸牢中华民族共同体意识-2024年形势与政策(讲稿)
- 水泵电机年度维修项目方案投标文件(技术方案)
- 数学-天一大联考2025届高三四省联考(陕晋青宁)试题和解析
- 《生物科技》课件
- 2025全国辅警考试题库及参考答案
- 城建档案地方立法研究
- GB/T 6075.6-2024机械振动在非旋转部件上测量评价机器的振动第6部分:功率大于100 kW的往复式机器
- 集装箱装货知识培训课件
- 医疗机构管理条例新旧对照
评论
0/150
提交评论