高级语言期末考试试卷_第1页
高级语言期末考试试卷_第2页
高级语言期末考试试卷_第3页
高级语言期末考试试卷_第4页
高级语言期末考试试卷_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

高级程序设计语言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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论