C++上机题目及答案1.docx

上传人:b****5 文档编号:8202572 上传时间:2023-01-29 格式:DOCX 页数:44 大小:38.91KB
下载 相关 举报
C++上机题目及答案1.docx_第1页
第1页 / 共44页
C++上机题目及答案1.docx_第2页
第2页 / 共44页
C++上机题目及答案1.docx_第3页
第3页 / 共44页
C++上机题目及答案1.docx_第4页
第4页 / 共44页
C++上机题目及答案1.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

C++上机题目及答案1.docx

《C++上机题目及答案1.docx》由会员分享,可在线阅读,更多相关《C++上机题目及答案1.docx(44页珍藏版)》请在冰豆网上搜索。

C++上机题目及答案1.docx

C++上机题目及答案1

第一周上机题

1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:

structstudent{charname[20];floatmath;};

studenta[10]={{"张三",90},{"李四",85},{"王五",73}};

intcount=3;//数组中包含的学生数

编写两个函数分别实现在a数组中添加和删除学生信息。

要求:

1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;

2)以下数据用于添加:

{"赵二",96},{"钱六",65},{"孙七",80}

3)注意:

添加,删除后count数据要相应变化。

#include

#include

 

structstudent{

charname[20];

floatmath;

};

intcount=3;

voidadd(studenta[10]);

voiddele(studenta[10]);

voidprint(studenta[]);

voidmain(){

studenta[10]={{"张三",90},{"李四",85},{"王五",73}};

intn=0;

do{

cout<<".................学生信息处理系统.................."

<<"\n1-删除"

<<"\n2-增加"

<<"\n3-结束\n"

<<"\n请选择:

";

cin>>n;

if(n==1)dele(a);

elseif(n==2)add(a);

elsecout<<"谢谢使用本系统!

\n";

}while(n!

=3);

}

voidadd(studenta[10]){

studentstu;

inti=0,n=count;

cout<<"请输入需增加的学生信息(姓名,成绩):

";

cin>>stu.name>>stu.math;

while(stu.math

for(;n>i;n--)a[n]=a[n-1];//腾位置

a[i]=stu;//插入

count++;

print(a);

}

voiddele(studenta[10]){

charname[20];

inti=0,n=count;

print(a);

cout<<"请输入需删除学生的姓名:

";

cin>>name;

while(strcmp(name,a[i].name)!

=0&&i

if(i>=n)cout<<"查无此人!

\n";

else{

for(;i

count--;

print(a);

}

}

voidprint(studenta[]){

cout<<"\n最新学生信息:

\n";

for(inti=0;i

cout<

}

2.定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。

要求:

编写函数求两坐标点之间的距离。

#include

#include

structpoint{

doublex,y,z;

};

doubledistance(pointa,pointb);

voidmain(){

pointa,b;

cout<<"请分别输入两个点的坐标(x,y,z):

\n";

cin>>a.x>>a.y>>a.z;

cin>>b.x>>b.y>>b.z;

cout<<"a点的坐标:

"<

cout<<"b点的坐标:

"<

cout<<"a,b两点的距离是:

"<

}

doubledistance(pointa,pointb){

doubled;

d=sqrt((a.x-b.x)*(a.x-b.x)

+(a.y-b.y)*(a.y-b.y)

+(a.z-b.z)*(a.z-b.z));

returnd;

}

3.某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。

函数delmaxmin的功能是对一个选手的得分做以下计算:

去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。

函数sort完成对n名选手的得分按平均分从高到低排序。

【测试数据与运行结果】

测试数据:

程序中给定的初始化测试数据

运行结果:

li:

94979896100999797.40

zhang:

96979898100979697.20

zhou:

95100999697969797.00

以下语句描述了包含数学成绩的学生信息结构体及其数组a:

struct{charplayer_name[20];

doublescore[7],aver;

}PERSON[3];

#include

structP{

charname[20];

doublescore[7],aver;

}PERSON[3];

doubledelmaxmin(doublea[7]){

doubleaver=0,sum=0,max,min;

max=min=a[0];

for(inti=0;i<7;i++){

if(a[i]>max)max=a[i];

if(a[i]

aver+=a[i];

}

aver-=max+min;

returnaver/5;

}

voidsort(Pp[3]){

inti,j;

Pa;

for(i=0;i<3;i++)

for(j=i+1;j<3;j++)//原程序:

for(j=0;j<3;j++)

if(p[i].aver

if(p[i].aver

a=p[i],p[i]=p[j],p[j]=a;

}

voidmain(){

inti,j;

cout<<"请输入比赛选手的比赛数据:

"<

for(i=0;i<3;i++){

cin>>PERSON[i].name;

for(j=0;j<7;j++)

cin>>PERSON[i].score[j];

}

for(i=0;i<3;i++)

PERSON[i].aver=delmaxmin(PERSON[i].score);

sort(PERSON);

cout<<"比赛成绩如下"<

for(i=0;i<3;i++){

cout<

for(j=0;j<7;j++)

cout<

cout<

}

}

第二周上机题

1.查找并输出同时出现在两个一维数组中的整数,每个一维数组中的元素均按升序排列,并且每个数组中的元素没有重复值。

函数intcoincidence_count(int*a,int*b;int*c)按上述要求在a数组和b数组上查找,将找到的数据保存到c所指向的的数组中。

a数组中的数据:

1,2,4,8,10,12,13,14,16,18

b数组中的数据:

3,4,7,8,9,10,12,13,16,19

#include

intcoincidence_count(int*a,int*b,int*c);

voidprint(int*d,intn);

voidmain(){

inta[]={1,2,4,8,10,12,13,14,16,18};

intb[]={3,4,7,8,9,10,12,13,16,19},c[10];

intk=coincidence_count(a,b,c);

cout<<"原始数据:

\n数组a:

";print(a,10);

cout<<"\n数组b:

";print(b,10);

cout<<"\n结果显示:

\n数组c:

";print(c,k);

cout<<'\n';

}

intcoincidence_count(int*a,int*b,int*c){

int*pa=a,*pb=b,*pc=c;

while(pa

if(*pa<*pb)pa++;

elseif(*pb<*pa)pb++;

else*pc++=*pa++;

}

return(pc-c);

}

voidprint(int*d,intn){

int*pd=d;

while(pd

cout<<*pd++<<',';

}

}

2.从键盘任意输入10个整数,用函数void(int*pa,int*pb)编程实现找出最大值和最小值,并通过指针pa,pb返回它们所在数组中的位置。

主函数并通过屏幕输出结果(最大值,最大值在数组中的位置,最小值,最小值在数组中的位置,)。

#include

voidmax_min(int*a,int*pa,int*pb);

voidmain(){

inta[10],max,min;

max=min=0;

int*pa=a;

while(pa>*pa++;

max_min(a,&max,&min);

cout<<"max="<

<<"在数组中位置是:

"<

cout<<"min="<

<<"在数组中位置是:

"<

}

 

voidmax_min(int*a,int*pa,int*pb){

intmax,min;

max=min=*(a+0);

for(inti=0;i<10;i++,a++){

if(*a>max){max=*a,*pa=i;}

elseif(*a

}

}

附加题:

3.25个人围成一个圈,从第1个人开始顺序报号(1,2,3……),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。

要求:

函数voidseek(int*a,intn,int*pn)按上述要求在a数组,找出最后留在圈子中的人原来的序号并返回。

主函数是:

voidmain(){

intn=3;

intnum;

inta[25],*p=a;

for(inti=0;i<25;i++)p[i]=i+1;

seek(a,n,&num);

cout<<”最后留在圈子中的人原来的序号是:

”<

}

*/

#include

#defineNUM10

#include

voidseek(int*a,intn,int*pn);

 

voidmain(){

intn=3;

intnum;

inta[NUM],*p=a;

for(inti=0;i

for(i=0;i

seek(a,n,&num);

cout<<"\n最后留在圈子中的人序号是:

"<

}

voidseek(int*a,intn,int*pn){

intnum=NUM;

intk=1;

inti;

cout<<"\n游戏中.......\n";

while(num>1){

for(i=0;i

if(a[i]==0)continue;

if(k++%3==0){

a[i]=0;

num--;

}

else*pn=i;

}

for(i=0;i

if(a[i]!

=0)cout<

cout<

}

}

第三周上机题目

题目:

1.从一个整型数组中删除所有小于数组元素平均值并且不是素数的那些整数。

【编程要求】

1)编写函数intdel(intr[],intn),计算r数组中前n个整数的平均值,删除数组中所有小于该平均值并且不是素数的那些数,函数返回r数组中剩余整数的个数。

2)编写main函数,声明数组resource并用测试数据初始化,调用del函数处理数组resource中的数据,将resource数组中剩余的整数输出到屏幕。

【测试数据与运行结果】

数组初始数据为:

175618828

运行结果:

1751828

#include

#include

intdel(intr[],intn);

intsh(intn);

voidmain(){

intresource[]={17,5,6,18,8,28},n;

cout<<"数组初始数据为:

";

for(inti=0;i<6;i++){

cout<

}

n=del(resource,6);

cout<<"\n运行结果:

";

for(i=0;i

cout<

}

cout<

}

intdel(intr[],intn){

int*p1=r,*p2=r,i=0;

floatavr=0;

while(p1

avr/=6;p1=r;

while(p1

if(*p1

p1++;continue;}

*p2++=*p1++;

}

return(p2-r);

}

intsh(intn){

intj;

j=sqrt(n);

for(inti=2;i<=j;i++)

if(n%i==0)break;

if(i<(j+1))return0;

return1;

}

2.编程要求

1)编写函数intfind(char*a,char*b),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。

函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。

2)编写main函数,接受键盘输入的一个英文句子。

调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。

#include

#include

intfind(char*a,char*b);

voidmain(){

chara[80],b[80];

intn;

cout<<"请输入的一个英文句子:

";

cin.getline(a,80);

cout<

"<

}

intfind(char*a,char*b){

char*p1,*p2,*p3;

p1=p2=p3=a;

intmax=0;

while(*p1!

=0){

while(*p1=='')p1++,p2++;

while(*p1!

=''&&*p1!

=0)p1++;

if(p1-p2>max){

max=p1-p2;

p3=p2;

}

p2=p1;

}

strncpy(b,p3,max);

*(b+max)='\0';

return(p3-a);

}

附加题

3.重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。

【测试数据与运行结果】

数组原始数据为:

17151014161719181312

输出结果:

18161412101315171719

要求:

1)编写函数voidresort(int*x,intn),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。

(可根据编程需要增加函数)

2)编写main函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。

#include

#include

voidresort(int*x,intn);

voidsort(int*a,intn);

voidmain(){

inta[10]={0};

cout<<"请输入十个数据:

";

for(inti=0;i<10;i++)cin>>a[i];

cout<<"数组原始数据为:

";

for(i=0;i<10;i++)cout<

resort(a,10);

cout<<"\n输出结果:

";

for(i=0;i<10;i++)cout<

cout<

}

voidresort(int*x,intn){

inta[10],*i,*j,*pa=a,*px=x;

while(px

sort(a,10);

i=x,j=x+9;

for(pa=a;pa

if(*pa%2==0)*i++=*pa++;

else*j--=*pa++;

}

}

voidsort(int*a,intn){

int*i,*j,temp;

for(i=a;i

for(j=i+1;j

if(*i<*j)

temp=*i,*i=*j,*j=temp;

}

4.【程序功能】

生成一个n阶螺旋方阵,将其存放到一个二维数组中并输出。

【测试数据与运行结果】

当n为5时,输出如下螺旋方阵:

1)编写函数voidrot(intmat[N][N],intn)生成一个n阶螺旋方阵,并存放到一个二维数组mat中;

2)编写主函数,由主函数调用rot函数完成上述功能,并按行输出结果。

#include

#include

#defineN7

voidrot(intmat[N][N],intn);

voidmain(){

inta[N][N]={0},k=1;

rot(a,N);

int*p=a[0];

intn=1;

for(;p<=&a[N-1][N-1];p++){

cout<

if(k++%N==0)cout<

}

}

voidrot(intmat[N][N],intn){

inti,j,num=1,x=-N,y=-1,z;

int*p1=mat[0];

while(n>0){

for(i=1;i<=4&&n>0;i++){

if(i%2==1){x=-x;z=x;}//(上下移动)向下-指针每次移动N位向上-指针每次移动-N位向左指针每次移动-1位

else{n--;y=-y;z=y;}//(左右移动)向右-指针每次移动+1位,向左-指针每次移动-1位

for(j=0;j

*p1=num++;

p1-=z;

if(i%2==1){p1-=y;}//调整起点位置

else{p1-=x;}

}

}

}

第五周上机题目

1.编写一个求积分的函数,该函数的原型如下:

floatIntegral(inta,intb,float(*fun)(float));

该函数返回值为积分结果,形参a,b分别为积分上下限,fun是被积函数。

要求:

1)积分算法:

将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;

2)用积分函数分别求解y=x2和y=2x+1两个函数在[0,1]区域内的积分值。

*/

#include

floatf1(floatx){

returnx*x;

}

floatf2(floatx){

return(2*x+1);

}

floatIntegral(inta,intb,float(*fun)(float));

voidmain(){

cout<<"第一个积分值:

"<

cout<<"第二个积分值:

"<

}

floatIntegral(inta,intb,float(*fun)(float)){

floath,y;

inti;

y=(fun(a)+fun(b))/2;

h=(b-a)/1000.0;

for(i=1;i<1000;i++)y+=fun(h*i);

return(y*h);

}

 

2.编程题(20分)

【编程要求】

1)编写函数intfun(long*x),找出所有满足以下特性的六位整数:

它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。

例如,是836的平方并且是回文数,因此是满足所给条件的六位整数。

将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。

2)编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1