C++上机题目及答案1.doc
《C++上机题目及答案1.doc》由会员分享,可在线阅读,更多相关《C++上机题目及答案1.doc(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流C+上机题目及答案1.精品文档.第一周上机题1. 以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct student char name20; float math; ;student a10 = 张三, 90,李四,85,王五,73;int count=3; / 数组中包含的学生数编写两个函数分别实现在a数组中添加和删除学生信息。要求:1) 原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;2)以下数据用于添加:赵二, 96, 钱六,65,孙七,803) 注意:添加,删除后count数据要相应变化。#inc
2、lude#includestruct student char name20; float math; int count=3;void add(student a10);void dele(student a10);void print(student a);void main()student a10 = 张三, 90,李四,85,王五,73;int n=0;docout.学生信息处理系统.n 1-删除n 2-增加n 3-结束nn;if(n=1) dele(a);else if(n=2) add(a) ;else cout谢谢使用本系统!n;while(n!=3);void add(stu
3、dent a10)student stu;int i=0,n=count;coutstu.namestu.math;while(stu.mathai.math & ii;n-) an=an-1; /腾位置ai=stu; /插入count+;print(a);void dele(student a10)char name20;int i=0,n=count;print(a);coutname;while(strcmp(name,ai.name)!=0 & i=n) cout查无此人!n;else for(;in-1;i+) ai=ai+1; /删除count-;print(a);void pri
4、nt(student a)coutn最新学生信息: n;for(int i=0;icount;i+)coutai.nametai.mathn;2. 定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。要求:编写函数求两坐标点之间的距离。#include#includestruct pointdouble x,y,z;double distance(point a,point b);void main()point a,b;couta.xa.ya.z;cinb.xb.yb.z;couta点的坐标:a.x,a.y,a.zn;coutb点的坐标:b.x,
5、b.y,b.zn;couta,b两点的距离是:distance(a,b)endl;double distance(point a,point b)double d; 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);return d;3. 某市青年歌手大赛聘请7名评委打分,下列程序协助进行评分统计。函数delmaxmin的功能是对一个选手的得分做以下计算:去掉一个最高分,去掉一个最低分,然后对剩余得分求平均分并保存。函数sort完成对n名选手的得分按平均分从高到低排序。【测试数据与运行结果】测试数据:程序中给
6、定的初始化测试数据运行结果: li: 94 97 98 96 100 99 97 97.40zhang: 96 97 98 98 100 97 96 97.20 zhou: 95 100 99 96 97 96 97 97.00以下语句描述了包含数学成绩的学生信息结构体及其数组a: struct char player_name20; double score7,aver; PERSON3;#includestruct Pchar name20;double score7,aver;PERSON3;double delmaxmin(double a7)double aver=0,sum=0,m
7、ax,min;max=min=a0;for(int i=0;imax) max=ai;if(aimin) min=ai;aver+=ai;aver-=max+min;return aver/5;void sort(P p3)int i,j;P a;for(i=0;i3;i+)for(j=i+1;j3;j+) /原程序:for(j=0;j3;j+)if(pi.averpj.aver)/原程序: if(pi.averpi+1.aver)a=pi,pi=pj,pj=a;void main()int i,j;cout请输入比赛选手的比赛数据:endl;for(i=0;iPERSONi.name;for
8、(j=0;jPERSONi.scorej;for(i=0;i3;i+)PERSONi.aver=delmaxmin(PERSONi.score);sort(PERSON); cout比赛成绩如下endl;for(i=0;i3;i+)coutPERSONi.namet;for(j=0;j7;j+)coutPERSONi.scorejt;coutPERSONi.averendl;25个人围成一个圈,从第1个人开始顺序报号(1,2,3),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。要求:函数void seek( int *a , int n, int *pn) 按上述要求在a数
9、组,找出最后留在圈子中的人原来的序号并返回。主函数是: void main( )int n=3;int num;int a25,*p=a;for(int i=0; i25; i+) pi=i+1;seek( a,n ,&num);cout” 最后留在圈子中的人原来的序号是: ”num endl;#include#define NUM 10#includevoid seek( int*a,int n,int *pn);void main( )int n=3;int num;int aNUM,*p=a;for(int i=0; iNUM; i+) pi=i+1;for(i=0;iNUM;i+)co
10、utsetw(3)ai;seek( a,n ,&num);coutn最后留在圈子中的人序号是: num+1 endl;void seek( int*a,int n,int *pn)int num=NUM;int k=1;int i;cout1)for(i=0;iNUM;i+)if(ai=0) continue;if(k+%3=0)ai=0;num-;else *pn=i;for(i=0;iNUM;i+)if(ai!=0)coutsetw(3)ai;coutendl;1 编程要求1) 编写函数int find(char *a , char *b),函数被调用时,a指向的数组中已存储一个字符串,该
11、字符串是一个包含了多个单词的英语句子。函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。2) 编写main函数,接受键盘输入的一个英文句子。调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。#include#includeint find(char *a , char *b);void main()char a80,b80;int n;cout请输入的一个英文句子: ;cin.getline(a,80);coutbn起始下标是: find(a,b)max)max=p1-p2;p3=p2;p2=p1
12、;strncpy(b,p3,max);*(b+max)=0;return (p3-a);附加题2 重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。【测试数据与运行结果】数组原始数据为:17 15 10 14 16 17 19 18 13 12输出结果:18 16 14 12 10 13 15 17 17 19要求:1) 编写函数void resort(int *x, int n),使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。(可根据编程需要增加函数)2) 编写main
13、函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。#include#includevoid resort(int *x, int n);void sort(int *a,int n);void main()int a10=0;cout请输入十个数据:;for(int i=0;iai;cout数组原始数据为:;for(i=0;i10;i+) coutsetw(4)ai;resort(a,10);coutn输出结果:;for(i=0;i10;i+)coutsetw(4)ai;coutendl;void resort(int *x, int n)int a10,*i,*j,*pa
14、=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+;void sort(int *a,int n)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 编写一个求积分的函数,该函数的原型如下: float Integral(int a, int b, float (*fun)(float); 该函数返回值为积分结果,形参a,b
15、分别为积分上下限,fun是被积函数。要求: 1)积分算法:将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;2) 用积分函数分别求解y=x2和y=2x+1两个函数在0,1区域内的积分值。#includefloat f1(float x)return x*x;float f2(float x)return (2*x+1);float Integral(int a, int b, float (*fun)(float);void main()cout第一个积分值: Integral(0,1,f1)endl;cout第二个积分值:
16、 Integral(0,1,f2)endl;float Integral(int a, int b, float (*fun)(float)float h,y;int i;y=(fun(a)+fun(b)/2;h=(b-a)/1000.0;for(i=1;i1000;i+)y+=fun(h*i);return (y*h);2 编程题(20分)【编程要求】1) 编写函数int fun(long *x),找出所有满足以下特性的六位整数:它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。例如,698896是836的平方并且698896是回文
17、数,因此698896是满足所给条件的六位整数。将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。2) 编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据输出到屏幕。【测试数据与运行结果】 运行结果: 698896#include#includeint fun(long *x);void main()long resort10;int n=fun(resort);cout六位整数中完全平方数有: endl;for(int i=0;in;i+)coutresortiendl;int fun
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 上机 题目 答案
限制150内