欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C上机题目及答案.doc

    • 资源ID:60122198       资源大小:108KB        全文页数:37页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C上机题目及答案.doc

    第一周上机题1. 以下语句描述了包含数学成绩的学生信息结构体及其数组a:struct student char name20; float math; ;student a10 = "张三", 90,"李四",85,"王五",73;int count=3; / 数组中包含的学生数编写两个函数分别实现在a数组中添加和删除学生信息。要求:1) 原数组已按数学成绩排序(降序),添加和删除学生信息后数组应仍为降序;2)以下数据用于添加:"赵二", 96, "钱六",65,"孙七",803) 注意:添加,删除后count数据要相应变化。#include<iostream.h>#include<string.h>struct 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-结束n"<<"n请选择: "cin>>n;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<<"请输入需增加的学生信息(姓名,成绩): "cin>>stu.name>>stu.math;while(stu.math<ai.math && i<n) i+;/找插入的位置for(;n>i;n-) an=an-1; /腾位置ai=stu; /插入count+;print(a);void dele(student a10)char name20;int i=0,n=count;print(a);cout<<"请输入需删除学生的姓名: "cin>>name;while(strcmp(name,ai.name)!=0 && i<n) i+;/找人if(i>=n) cout<<"查无此人!n"else for(;i<n-1;i+) ai=ai+1; /删除count-;print(a);void print(student a)cout<<"n最新学生信息: n"for(int i=0;i<count;i+)cout<<ai.name<<'t'<<ai.math<<'n'2. 定义描述三维坐标点(x,y,z)的结构体类型变量,完成坐标点的输入和输出,并求两坐标点之间的距离。要求:编写函数求两坐标点之间的距离。#include<iostream.h>#include<math.h>struct pointdouble x,y,z;double distance(point a,point b);void main()point a,b;cout<<"请分别输入两个点的坐标(x,y,z):n"cin>>a.x>>a.y>>a.z;cin>>b.x>>b.y>>b.z;cout<<"a点的坐标:"<<a.x<<','<<a.y<<','<<a.z<<'n'cout<<"b点的坐标:"<<b.x<<','<<b.y<<','<<b.z<<'n'cout<<"a,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名选手的得分按平均分从高到低排序。【测试数据与运行结果】测试数据:程序中给定的初始化测试数据运行结果: 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;#include<iostream.h>struct Pchar name20;double score7,aver;PERSON3;double delmaxmin(double a7)double aver=0,sum=0,max,min;max=min=a0;for(int i=0;i<7;i+)if(ai>max) max=ai;if(ai<min) min=ai;aver+=ai;aver-=max+min;return aver/5;void sort(P p3)int i,j;P a;for(i=0;i<3;i+)for(j=i+1;j<3;j+) /原程序:for(j=0;j<3;j+)if(pi.aver<pj.aver)/原程序: if(pi.aver<pi+1.aver)a=pi,pi=pj,pj=a;void main()int i,j;cout<<"请输入比赛选手的比赛数据:"<<endl;for(i=0;i<3;i+)cin>>PERSONi.name;for(j=0;j<7;j+)cin>>PERSONi.scorej;for(i=0;i<3;i+)PERSONi.aver=delmaxmin(PERSONi.score);sort(PERSON); cout<<"比赛成绩如下"<<endl;for(i=0;i<3;i+)cout<<PERSONi.name<<'t'for(j=0;j<7;j+)cout<<PERSONi.scorej<<'t'cout<<PERSONi.aver<<endl;第二周 上机题1. 查找并输出同时出现在两个一维数组中的整数,每个一维数组中的元素均按升序排列,并且每个数组中的元素没有重复值。函数int coincidence_count ( int *a , int *b; int *c) 按上述要求在a数组和b数组上查找,将找到的数据保存到c所指向的的数组中。a数组中的数据:1,2,4,8,10,12,13,14,16,18b数组中的数据:3,4,7,8,9,10,12,13,16,19#include<iostream.h>int 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);cout<<"n 数组b: " print(b,10);cout<<"n结果显示: n 数组c: " print(c,k);cout<<'n'int coincidence_count ( int*a,int*b,int*c)int *pa=a,*pb=b,*pc=c;while(pa<a+10 && pb<b+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(pd<d+n)cout<<*pd+<<','2. 从键盘任意输入10个整数,用函数void( int *pa , int *pb)编程实现找出最大值和最小值,并通过指针pa ,pb返回它们所在数组中的位置。主函数并通过屏幕输出结果(最大值,最大值在数组中的位置,最小值,最小值在数组中的位置,)。#include<iostream.h>void max_min(int *a,int *pa,int *pb);void main()int a10,max, min;max=min=0;int *pa=a;while(pa<a+10) cin>>*pa+;max_min(a,&max,&min);cout<<"max="<<amax<<"在数组中位置是:"<<max<<endl;cout<<"min="<<amin<<"在数组中位置是:"<<min<<endl;void max_min(int *a,int *pa,int *pb)int max,min;max=min=*(a+0);for(int i=0;i<10;i+,a+)if(*a>max)max=*a,*pa=i;else if(*a<min)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; i<25; i+) pi=i+1;seek( a,n ,&num);cout<<” 最后留在圈子中的人原来的序号是: ”<<num <<endl;*/#include<iostream.h>#define NUM 10#include<iomanip.h>void seek( int*a,int n,int *pn);void main( )int n=3;int num;int aNUM,*p=a;for(int i=0; i<NUM; i+) pi=i+1;for(i=0;i<NUM;i+)cout<<setw(3)<<ai;seek( a,n ,&num);cout<<"n最后留在圈子中的人序号是: "<<num+1 <<endl;void seek( int*a,int n,int *pn)int num=NUM;int k=1;int i;cout<<"n游戏中.n"while(num>1)for(i=0;i<NUM;i+)if(ai=0) continue;if(k+%3=0)ai=0;num-;else *pn=i;for(i=0;i<NUM;i+)if(ai!=0)cout<<setw(3)<<ai;cout<<endl;第三周上机题目题目:1 从一个整型数组中删除所有小于数组元素平均值并且不是素数的那些整数。【编程要求】1) 编写函数int del(int r , int n),计算r数组中前n个整数的平均值,删除数组中所有小于该平均值并且不是素数的那些数,函数返回r数组中剩余整数的个数。2) 编写main函数,声明数组resource并用测试数据初始化,调用del函数处理数组resource中的数据,将resource数组中剩余的整数输出到屏幕。【测试数据与运行结果】数组初始数据为: 17 5 6 18 8 28运行结果: 17 5 18 28#include<iostream.h>#include<math.h>int 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;i<6;i+)cout<<resourcei<<'t'n=del(resource,6);cout<<"n运行结果:"for(i=0;i<n;i+)cout<<resourcei<<'t'cout<<endl;int del(int r , int n)int *p1=r,*p2=r,i=0;float avr=0;while(p1<r+n)avr+=*p1+;avr/=6;p1=r;while(p1<r+n)if(*p1<avr && 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),函数被调用时,a指向的数组中已存储一个字符串,该字符串是一个包含了多个单词的英语句子。函数的功能找出字符数组a中字符串中最长的单词并存入b所指向的数组中,函数返回最长单词在字符串的起迭位置下标。2) 编写main函数,接受键盘输入的一个英文句子。调用find函数找到该句子中最长的单词,将最长单词及其在字符串中的起始位置下标输出到屏幕。#include<iostream.h>#include<string.h>int find(char *a , char *b);void main()char a80,b80;int n;cout<<"请输入的一个英文句子: "cin.getline(a,80);cout<<b<<"n起始下标是: "<<find(a,b)<<endl;int find(char *a , char *b)char *p1,*p2,*p3;p1=p2=p3=a;int max=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 重新排列一维数组元素的顺序,使得左边的所有元素均为偶数并按由大到小的次序存放,右边的所有元素均为奇数并按由小到大的次序存放。【测试数据与运行结果】数组原始数据为: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函数,接受键盘输入数据,调用resort函数完成上述功能,并输出结果。#include<iostream.h>#include<iomanip.h>void resort(int *x, int n);void sort(int *a,int n);void main()int a10=0;cout<<"请输入十个数据:"for(int i=0;i<10;i+)cin>>ai;cout<<"数组原始数据为:"for(i=0;i<10;i+) cout<<setw(4)<<ai;resort(a,10);cout<<"n输出结果:"for(i=0;i<10;i+)cout<<setw(4)<<ai;cout<<endl;void resort(int *x, int n)int a10,*i,*j,*pa=a,*px=x;while(px<x+10) *pa+=*px+;sort(a,10);i=x,j=x+9;for(pa=a;pa<a+10;)if(*pa%2=0) *i+=*pa+;else *j-=*pa+;void sort(int *a,int n)int *i,*j,temp;for(i=a;i<a+n-1;i+)for(j=i+1;j<a+n;j+)if(*i<*j)temp=*i,*i=*j,*j=temp;4 【程序功能】生成一个n阶螺旋方阵,将其存放到一个二维数组中并输出。【测试数据与运行结果】当n为5时,输出如下螺旋方阵:1) 编写函数void rot( int matNN, int n) 生成一个n阶螺旋方阵,并存放到一个二维数组mat中;2) 编写主函数,由主函数调用rot函数完成上述功能,并按行输出结果。#include<iostream.h>#include<iomanip.h>#define N 7void rot( int matNN, int n);void main()int aNN=0,k=1;rot(a,N);int *p=a0;int n=1;for(;p<=&aN-1N-1;p+)cout<<setw(6)<<*p;if(k+%N=0)cout<<endl;void rot( int matNN, int n)int i,j,num=1,x=-N,y=-1,z;int *p1=mat0;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<n;j+,p1+=z)*p1=num+;p1-=z; if(i%2=1)p1-=y; /调整起点位置else p1-=x;第五周上机题目1 编写一个求积分的函数,该函数的原型如下: float Integral(int a, int b, float (*fun)(float); 该函数返回值为积分结果,形参a,b分别为积分上下限,fun是被积函数。要求: 1)积分算法:将积分区域划分为若干个小区间,求出所有小区间中被积函数下的面积之和即为函数在积分区域内的积分值;小区间面积可用梯形近似;2) 用积分函数分别求解y=x2和y=2x+1两个函数在0,1区域内的积分值。*/#include<iostream.h>float 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<<"第二个积分值: "<<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;i<1000;i+)y+=fun(h*i);return (y*h);2 编程题(20分)【编程要求】1) 编写函数int fun(long *x),找出所有满足以下特性的六位整数:它是一个完全平方数(完全平方数是指该数是某个整数的平方);该数同时也是回文数(回文数是指该数等于它的反序数)。例如,是836的平方并且是回文数,因此是满足所给条件的六位整数。将所有满足上述条件的六位整数存入x指向的数组中,函数返回x指向的数组中整数的个数。2) 编写main函数,声明result数组,调用fun函数将所有满足条件的六位整数存入result数组中,将result数组中的数据输出到屏幕。【测试数据与运行结果】 运行结果: #include<iostream.h>#include<math.h>int fun(long *x);void main()long resort10;int n=fun(resort);cout<<"六位整数中完全平方数有: "<<endl;for(int i=0;i<n;i+)cout<<resorti<<endl;int fun(long *x)long n,n1,n2,n3=0;long *px=x;for(n2=n=;n<n+,n2=n,n3=0)n1=sqrt(n);if(n1*n1=n)while(n2>0)n3=n3*10+n2%10;n2/=10;if(n3=n) *px+=n;return px-x;3 改错题【程序功能】对于s数组中保存的五个字符串,删除其中不符合下列组成规则的字符串,输出s数组中剩余的字符串。字符串组成规则:由字母、数字、下划线组成,首字符非数字。【测试数据与运行结果】s数组中五个字符串: a%1,_a12,aaa,$ss,1sss输出: _a12,aaa【含有错误的源程序】#include<iostream.h>#include<string.h> #define M 20#define N 10int isident(char sN,int n)int i,j,k,flag;for(j=0;j<n;j+)flag=0;if(sj0!='_' | -(sj0)=0 )flag=1;elsefor(i=1; sji!='0' i+)if(sji!='_' && !isalpha(sji) && !isdigit(sji)flag=1;if(flag=1) for(k=0;k<n-1;k+) strcpy(sk,sk+1);n-;j-;return n;void main( ) char sM="a%1","_a12","aaa","$ss","1sss" int i,n=5;n=isident(s,n);cout<<"The correct C identifiers is :n"for(i=0; i<n; i+)cout<<si<<endl;1) 根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。2) 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。#include<iostream.h>#include<ctype.h>#include<string.h> #define M 20#define N 10int isident(char sN,int n)int i,j,k,flag;for(j=0;j<n;j+)flag=0;if(sj0!='_' && !isalpha(sj0) )/if(sj0!='_' | -(sj0)=0 )flag=1;elsefor(i=1; sji!='0' i+)if(sji!='_' && !isalpha(sji) && !isdigit(sji)/#include<ctype.h>flag=1;if(flag=1) for(k=j;k<n-1;k+)/for(k=0;k<n-1;k+) strcpy(sk,sk+1);n-;j-;return n;void main( ) char sMN="a%1","_a12","aaa","$ss","1sss" /sMN int i,n=5;n=isident(s,n);cout<<"The correct C identifiers is :n"for(i=0; i<n; i+)cout<<si<<endl;第六周上机题目一、 编程题1. 编写函数int prime_m( int n,int x, long y),在2n范围内查找同时符合以下条件的整数m:2m -1是素数、2m -1的反序数是奇数、2m -1的十进制表示中包含数字1。将2n范围内符合上述条件的所有整数m依次保存到x指向的数组中,将与m对应的整数2m -1依次保存到y指向的数组中。函数返回x数组中保存的整数个数。2. 编写main函数,接收键盘输入的n值,调用prime_m函数找到2n范围内所有符合给定条件的整数m及整数2m -1并将它们分别保存在两个一维数组中.3. 【测试数据与运行结果】测试数据: n=20输出结果: 5 31 7 127 17 #include<iostream.h>#include<math.h>int prime_m( int n,int x, long y);void main()int n1,n,x10,*px=x;long y10,*py=y;cout<<"测试数据: n="cin>>n;n1=prime_m(n,x,y);cout<<"输出结果:n" while(n1->0) cout<<*px+<<'t'<<*py+<<'n'int prime_m(int n,int x,long y)int m,p=0,n1,*px=x;long k=2,*py=y;for(m=2;m<n;m+)k*=2;for(int i=2;i<=sqrt(k-1);i+)/判断k是不是素数if(k-1)%i=0) break;if(i<sqrt(k-1) continue;n1=k-1; /2.判断k的反序数是不是奇数while(n1>10) n1/=10;if(n1%2=0) continue;n1=k-1;/判断k中有无数字1while(n1%10)!=1 && n1>10) n1/=10; if(n1%10!=1) continue;*px+=m,*py+=k-1;return px-x;二、 编程题接收从键盘输入的若干个字符串,为每一个字符串动态申请一块存储区,将字符串复制到该存储区并将存储区的首地址依次保存到指针数组lineptr中,再以字典序输出所有的字符串(输入时以回车<CR>作为字符串之间的分隔符,以空串作为输入结束标记,输入的字符串总数不超过10个)。函数void sort(char *vp , int n)的功能是根据指针数组vp前n个元素指向的字符串,按字典序对指针数组排序。函数void outline(char *vp , int n) 的功能是输出指针数组vp前n个元素指向的字符串。【测试数据与运行结果】输入: 输出(排序后):No<CR> NoWell<CR> PracticeYou <CR> WellPractice<CR> You<CR>(空串)#include<iostream.h>#include<string.h>void sort(char *vp , int n);void outline(char *vp , int n);void main()char *lineptr10,s1100;int i=0;docin.getline(s1,100);lineptri=new charstrlen(s1)+1;strcpy(lineptri+,s1);while(strcmp(s1,"0");sort(lineptr,i-1);outline(lineptr,i-1);void sort(char *vp , int n)int i,j;char *temp;for(i=0;i<n-1;i+)for(j=i+1;j<n;j+)if(strcmp(vpi,vpj)>0)temp=vpi,vpi=vpj,vpj=temp;void outline(char *vp , int n)cout<<"输出:n"for(int i=0;i<n;i+)cout<<vpi<<endl;附加题:一、 编程题建立一条无序链表,并输出这条链表上个节点的值。设计一个函数,将这条链表构成一条新的逆序链表,即将链表头当尾,链表尾当头。输出这条新链表上节点的值。用以下一组数据测试程序的正确性:学号 C+成绩 英语成绩38 98 9045 90 8049 75 6350 86 49二、 改错题【程序功能】为了测试学生对英文单词的掌握程度,以下程序在给出的五个单词

    注意事项

    本文(C上机题目及答案.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开