C上机题目及答案.doc
《C上机题目及答案.doc》由会员分享,可在线阅读,更多相关《C上机题目及答案.doc(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一周上机题1. 以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct student char name20; float math; ;student a10 = 张三, 90,李四,85,王五,73;int count=3; / 数组中包含的学生数编写两个函数分别实现在a数组中添加和删除学生信息。要求:1) 原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;2)以下数据用于添加:赵二, 96, 钱六,65,孙七,803) 注意:添加,删除后count数据要相应变化。#include#includestruct student char name20; fl
2、oat 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(student a10)student stu;int i=0,n=count;cout
3、stu.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 print(student a)coutn最新学生信息: n;for(int i=0;i
4、count;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,b.y,b.zn;couta,b两点的距离是:distance(a,b)endl;
5、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名选手的得分按平均分从高到低排序。【测试数据与运行结果】测试数据:程序中给定的初始化测试数据运行结果: li: 94 97 98 96 100 99 97
6、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,max,min;max=min=a0;for(int i=0;imax) max=a
7、i;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(j=0;jPERSONi.scorej;for(i=0;i3;i+)PERSON
8、i.aver=delmaxmin(PERSONi.score);sort(PERSON); cout比赛成绩如下endl;for(i=0;i3;i+)coutPERSONi.namet;for(j=0;j7;j+)coutPERSONi.scorejt;coutPERSONi.averendl;第二周 上机题1. 查找并输出同时出现在两个一维数组中的整数,每个一维数组中的元素均按升序排列,并且每个数组中的元素没有重复值。函数int coincidence_count ( int *a , int *b; int *c) 按上述要求在a数组和b数组上查找,将找到的数据保存到c所指向的的数组中。a
9、数组中的数据:1,2,4,8,10,12,13,14,16,18b数组中的数据:3,4,7,8,9,10,12,13,16,19#includeint coincidence_count(int *a,int*b,int *c);void print(int *d,int n);void main()int a=1,2,4,8,10,12,13,14,16,18;int b=3,4,7,8,9,10,12,13,16,19,c10;int k=coincidence_count(a,b,c);cout原始数据:n 数组a: ; print(a,10);coutn 数组b: ; print(b,
10、10);coutn结果显示: n 数组c: ; print(c,k);coutn;int coincidence_count ( int*a,int*b,int*c)int *pa=a,*pb=b,*pc=c;while(paa+10 & pbb+10)if(*pa*pb)pa+;else if(*pb*pa) pb+;else *pc+=*pa+;return (pc-c);void print(int *d,int n)int *pd=d;while(pdd+n)cout*pd+,;2. 从键盘任意输入10个整数,用函数void( int *pa , int *pb)编程实现找出最大值和最
11、小值,并通过指针pa ,pb返回它们所在数组中的位置。主函数并通过屏幕输出结果(最大值,最大值在数组中的位置,最小值,最小值在数组中的位置,)。#includevoid max_min(int *a,int *pa,int *pb);void main()int a10,max, min;max=min=0;int *pa=a;while(pa*pa+;max_min(a,&max,&min);coutmax=amax在数组中位置是:maxendl;coutmin=amin在数组中位置是:minendl;void max_min(int *a,int *pa,int *pb)int max,m
12、in;max=min=*(a+0);for(int i=0;imax)max=*a,*pa=i;else if(*amin)min=*a,*pb=i;附加题:3. 25个人围成一个圈,从第1个人开始顺序报号(1,2,3),凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。要求:函数void seek( int *a , int n, int *pn) 按上述要求在a数组,找出最后留在圈子中的人原来的序号并返回。主函数是: void main( )int n=3;int num;int a25,*p=a;for(int i=0; i25; i+) pi=i+1;seek( a,n
13、 ,&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+)coutsetw(3)ai;seek( a,n ,&num);coutn最后留在圈子中的人序号是: num+1 endl;void seek( int*a,int n,int *pn)int num=NUM;int
14、 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 del(int r , int n),计算r数组中前n个整数的平均值,删除数组中所有小于该平均值并且不是素数的那些数,函数返回r数组中剩余整数的个数。2) 编写main函数,声明数组resource并用测试数据初始化
15、,调用del函数处理数组resource中的数据,将resource数组中剩余的整数输出到屏幕。【测试数据与运行结果】数组初始数据为: 17 5 6 18 8 28运行结果: 17 5 18 28#include#includeint del(int r , int n);int sh(int n);void main()int resource=17,5,6,18,8,28,n;cout数组初始数据为:;for(int i=0;i6;i+)coutresourceit;n=del(resource,6);coutn运行结果:;for(i=0;in;i+)coutresourceit;cout
16、endl;int del(int r , int n)int *p1=r,*p2=r,i=0;float avr=0;while(p1r+n)avr+=*p1+;avr/=6;p1=r;while(p1r+n)if(*p1avr & sh(*p1)=0) p1+;continue;*p2+=*p1+ ;return (p2-r);int sh(int n)int j;j=sqrt(n);for(int i=2;i=j;i+)if(n%i=0) break;if(i(j+1) return 0;return 1;2 编程要求1) 编写函数int find(char *a , char *b),函
17、数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。函数的功能找出字符数组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)ma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 题目 答案
限制150内