您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > C++上机题目及答案1
1第一周上机题1.以下语句描述了包含数学成绩的学生信息结构体及其数组a:structstudent{charname[20];floatmath;};studenta[10]={{张三,90},{李四,85},{王五,73}};intcount=3;//数组中包含的学生数编写两个函数分别实现在a数组中添加和删除学生信息。要求:1)原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;2)以下数据用于添加:{赵二,96},{钱六,65},{孙七,80}3)注意:添加,删除后count数据要相应变化。#includeiostream.h#includestring.hstructstudent{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请选择:;cinn;if(n==1)dele(a);elseif(n==2)add(a);elsecout谢谢使用本系统!\n;}while(n!=3);}2voidadd(studenta[10]){studentstu;inti=0,n=count;cout请输入需增加的学生信息(姓名,成绩):;cinstu.namestu.math;while(stu.matha[i].math&&in)i++;//找插入的位置for(;ni;n--)a[n]=a[n-1];//腾位置a[i]=stu;//插入count++;print(a);}voiddele(studenta[10]){charname[20];inti=0,n=count;print(a);cout请输入需删除学生的姓名:;cinname;while(strcmp(name,a[i].name)!=0&&in)i++;//找人if(i=n)cout查无此人!\n;else{for(;in-1;i++)a[i]=a[i+1];//删除count--;print(a);}}voidprint(studenta[]){cout\n最新学生信息:\n;for(inti=0;icount;i++)couta[i].name'\t'a[i].math'\n';}2.定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。要求:编写函数求两坐标点之间的距离。#includeiostream.h#includemath.hstructpoint{doublex,y,z;};3doubledistance(pointa,pointb);voidmain(){pointa,b;cout请分别输入两个点的坐标(x,y,z):\n;cina.xa.ya.z;cinb.xb.yb.z;couta点的坐标:a.x','a.y','a.z'\n';coutb点的坐标:b.x','b.y','b.z'\n';couta,b两点的距离是:distance(a,b)endl;}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.40zhang:96979898100979697.20zhou:95100999697969797.00以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct{charplayer_name[20];doublescore[7],aver;}PERSON[3];#includeiostream.hstructP{charname[20];doublescore[7],aver;}PERSON[3];doubledelmaxmin(doublea[7]){doubleaver=0,sum=0,max,min;max=min=a[0];for(inti=0;i7;i++){if(a[i]max)max=a[i];4if(a[i]min)min=a[i];aver+=a[i];}aver-=max+min;returnaver/5;}voidsort(Pp[3]){inti,j;Pa;for(i=0;i3;i++)for(j=i+1;j3;j++)//原程序:for(j=0;j3;j++)if(p[i].averp[j].aver)///原程序:if(p[i].averp[i+1].aver)a=p[i],p[i]=p[j],p[j]=a;}voidmain(){inti,j;cout请输入比赛选手的比赛数据:endl;for(i=0;i3;i++){cinPERSON[i].name;for(j=0;j7;j++)cinPERSON[i].score[j];}for(i=0;i3;i++)PERSON[i].aver=delmaxmin(PERSON[i].score);sort(PERSON);cout比赛成绩如下endl;for(i=0;i3;i++){coutPERSON[i].name'\t';for(j=0;j7;j++)coutPERSON[i].score[j]'\t';coutPERSON[i].averendl;}}25个人围成一个圈,从第1个人开始顺序报号(1,2,3……),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。要求:函数voidseek(int*a,intn,int*pn)按上述要求在a数组,找出最后留在圈子中的人原5来的序号并返回。主函数是:voidmain(){intn=3;intnum;inta[25],*p=a;for(inti=0;i25;i++)p[i]=i+1;seek(a,n,&num);cout”最后留在圈子中的人原来的序号是:”numendl;}*/#includeiostream.h#defineNUM10#includeiomanip.hvoidseek(int*a,intn,int*pn);voidmain(){intn=3;intnum;inta[NUM],*p=a;for(inti=0;iNUM;i++)p[i]=i+1;for(i=0;iNUM;i++)coutsetw(3)a[i];seek(a,n,&num);cout\n最后留在圈子中的人序号是:num+1endl;}voidseek(int*a,intn,int*pn){intnum=NUM;intk=1;inti;cout\n游戏中.......\n;while(num1){for(i=0;iNUM;i++){if(a[i]==0)continue;if(k++%3==0){a[i]=0;num--;}else*pn=i;}for(i=0;iNUM;i++)if(a[i]!=0)coutsetw(3)a[i];coutendl;}}1.编程要求1)编写函数intfind(char*a,char*b),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。函数的6功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。2)编写main函数,接受键盘输入的一个英文句子。调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。#includeiostream.h#includestring.hintfind(char*a,char*b);voidmain(){chara[80],b[80];intn;cout请输入的一个英文句子:;cin.getline(a,80);coutb\n起始下标是:find(a,b)endl;}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-p2max){max=p1-p2;p3=p2;}p2=p1;}strncpy(b,p3,max);*(b+max)='\0';return(p3-a);7}附加题2.重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。【测试数据与运行结果】数组原始数据为:17151014161719181312输出结果:18161412101315171719要求:1)编写函数voidresort(int*x,intn),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。(可根据编程需要增加函数)2)编写main函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。#includeiostream.h#includeiomanip.hvoidresort(int*x,intn);voidsort(int*a,intn);voidmain(){inta[10]={0};cout请输入十个数据:;for(inti=0;i10;i++)cina[i];cout数组原始数据为:;for(i=0;i10;i++)coutsetw(4)a[i];resort(a,10);cout\n输出结果:;for(i=0;i10;i++)coutsetw(4)a[i];coutendl;}voidresort(int*x,intn){8inta[10],*i,*j,*pa=a,*px=x;while(pxx+10)*pa++=*px++;sort(a,10);i=x,j=x+9;for(pa=a;paa+10;){if(*pa%2==0)*i++=*pa++;else*j--=*pa++;}}voidsort(int*a,intn){int*i,*j,temp;for(i=a;ia+n-1;i++)for(j=i+1;ja+n;j++)if(*i*j)temp=*i,*i=*j,*j=temp;}1.编写一个求积分的函数,该函数的原型如下:floatIntegral(inta,intb,float(*fun)(float));该函数返回值为积分结果,形参a,b分别为积分上下限,fun是被积函数。要求:1)积分算法:将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;2)用积分函数分别求解y=x2和y=2x+1两个函数在[0,1]区域内的
本文标题:C++上机题目及答案1
链接地址:https://www.777doc.com/doc-4220475 .html