北理上机题.docx
- 文档编号:17308346
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:37
- 大小:188.41KB
北理上机题.docx
《北理上机题.docx》由会员分享,可在线阅读,更多相关《北理上机题.docx(37页珍藏版)》请在冰点文库上搜索。
北理上机题
北理上机题00-10(总22页)
北京理工大学计算机专业研究生复试上机试题(2000-2009)
学习2009-05-0718:
09:
03阅读589评论0字号:
大中小
计算机专业研究生复试上机试题
2000年:
1、输入任意4个字符(如:
abcd),并按反序输出(如:
dcba)
#include
#include
usingnamespacestd;
voidmain()
{
strings;
cin>>s;
for(inti=3;i>=0;i--)
cout<
cout< } 2、设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有: abc+bcc=532。 求满足条件的所有a、b、c的值。 #include usingnamespacestd; voidmain() { inta,b,c; 3、....(ei为完数)G: g1g2g3......(gi为盈数) #include usingnamespacestd; voidmain() { cout<<"E: "; for(inti=2;i<=60;i++) { ints=0; for(intj=1;j { if(i%j==0) { ame>>st[i].age>>st[i].score; cout< } for(i=0;i<4;i++) for(intj=i+1;j<4;j++) if(st[i].score { t=st[i]; st[i]=st[j]; st[j]=t; } cout<<"name"<<"age"<<"score"< for(i=0;i<4;i++) cout< } 2001年 (1): 1、编写程序,计算下列分段函数y=f(x)的值。 y=-x+0<=x<2y=(x-3)(x-3)2<=x<4y=x/4<=x<6 #include usingnamespacestd; voidmain() { intx; cout<<"请输入x(0-6): "; cin>>x; if(x<0&&x>=6) cout<<"输入有误! "; if(x>=0&&x<2) cout<<"y="<<(-x+< elseif(x>=2&&x<4) cout<<"y="<<*(x-3)*(x-3)< elseif(x>=4&&x<6) cout<<"y="< } 2、编写程序,读入一个整数N。 若N为非负数,则计算N到2N之间的整数和;若N为一个负数,则求2N到N之间的整数和。 #include #include<> usingnamespacestd; voidmain() { intN; cout<<"请输入一个整数: "; cin>>N; cout<<((N+2*N)*(abs(N)+1))/2< } 3、设N是一个四位数,它的9倍恰好是其反序数(例如: 1234的反序数是4321),求N的值。 #include usingnamespacestd; voidmain() { for(inti=1000;i<=9999;i++) { inta,b,c,d; a=i/1000; b=i/100-a*10; c=(i/10)%10; d=i%10; if(9*i==d*1000+c*100+b*10+a) cout< } } 4、N个人围成一圈顺序编号,从1号开始按1、2、3顺序报数,报3者退出圈外,其余的人再从1、2、3开始报数,报3的人再退出圈外,依次类推。 请按退出顺序输出每个退出人的原序号。 要求使用环行链表编程。 #include #include<> usingnamespacestd; typedefstructnode { intnum; structnode*next; }LNode; voidmain() { LNode*head,*p,*q; intN; cout<<"输入人数: "; cin>>N; p=(LNode*)(malloc(sizeof(LNode))); p->num=1; head=p; for(inti=1;i { p->next=(LNode*)(malloc(sizeof(LNode))); p=p->next; p->num=i+1; } p->next=head; p=head; cout<<"输出序列为: "< while(p->next! =p) { q=p->next; p=q->next; q->next=p->next; cout< deletep; p=q->next; } cout< deletep; } 2001年 (2) 1、请输入高度h,输入一个高为h,上底边长为h的等腰梯形(例如h=4,图形如下)。 **** ****** ******** ********** #include usingnamespacestd; voidmain() { inth; cout<<"请输入h: "; cin>>h; for(inti=0;i { for(intj=0;j cout<<""; for(intk=0;k cout<<"*"; cout< } } 2、请编写一个程序,从键盘上输入n(n的范围是1~20),求n的阶乘。 #include usingnamespacestd; voidmain() { intn; intsum=1; um>>t[j].name>>t[j].sex>>t[j].age; if(t[j].num==NO) cout< } cout< } 真确算法: #include #include #include<> usingnamespacestd; intmain() { charstr[80]; intst_no; ifstreamfile(""); if(! file) { cout<<"error! "; return0; } cout<<"输入你要查找的学生的学号: "; cin>>st_no; while(! ()) { (str,80); if(st_no==atoi(str)) { cout<<"学号"<<"姓名"<<"性别"<<"年龄"< cout< } } return0; } 3、输入年月日,计算该填是本年的第几天。 例如1990年9月20日是1990年的第263天,2000年5月1日是2000年第122天。 (闰年: 能被400正除,或能被4整除但不能被100整除。 每年1、3、5、7、8、10为大月) #include usingnamespacestd; intmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31}; voidmain() { inty,m,d; intsum=0; cout<<"输人年月日: "; cin>>y>>m>>d; for(inti=1;i { sum=sum+month[i-1]; } if(m>2&&(y%400==0)||(y%4==0&&y%100! =0)) { sum=sum+1; } sum=sum+d; cout< } 2004年 第一题是建立一个角类,在这个类中重载减号运算符,并实现求出角度的正弦值的函数。 #include #include<> usingnamespacestd; doubleconstPI=; classangle { intX; public: voidxsin(); angle(){}; angle(intx){X=x;} angleoperator-(anglec); }; angleangle: : operator-(anglec) { returnangle; } voidangle: : xsin() { doublex=X*PI/180; cout<<"正弦值为: "< } voidmain() { anglea(30),b(60),d; (); (); d=b-a; (); } 第二题是建立一个求一元二次方程解的类(a*x^2+b*x+c=0),输入系数a,b,c的值后打印出这个方程的解来,也比较简单。 需要注意的是系数a不能为零以及方程有无解,单解还是双解的情况。 #include #include usingnamespacestd; classRoot { inta,b,c; public: Root(intaa,intbb,intcc): a(aa),b(bb),c(cc){} Root(){} voidresult(); .+),要求输入该多项式的系数和x的值后打印出这个多项式的值。 这道题本身并不难,但他要求用好的算法(实际上就是递归)。 #include usingnamespacestd; intconstsize=60; intfun(floatnum[],intx,intn,intN) { if(n==0) returnnum[n]; else returnx*fun(num,x,n-1,N)+num[N-n]; } voidmain() { intn,x; floatnum[size]; cout<<"请输入最高项次数: "; cin>>n; cout<<"请输入各项系数: "; for(inti=0;i<=n;i++) cin>>num[i]; cout<<"请输入x: "; cin>>x; cout<<"结果为: "< } 05年: 第一题是给定一个程序,关于字符串的,要求输入并调试,说出此程序的意图。 意图是按字母顺序对两个字符串比较排序。 第二问要求用尽可能少的语句对该程序进行修改,使其能够对两个字符串比较长度排序。 本题满分20。 #include #include usingnamespacestd; voidmain() { stringstr1,str2; cout<<"请输入两个字符串: "; cin>>str1>>str2; if()>()) cout< elseif()==()) cout< else cout< } 第二题是要求编写一个日期类,要求按xxxx-xx-xx的格式输出日期,实现加一天的操作,不考虑闰年问题,所有月份设为30天。 本题黑盒测试时,输入2004年3月20日,得到加一天后时间为2004-3-21,能得一部分分数。 输入2004年3月30日,得到加一天后时间为2004-4-1,能得一部分分数。 输入2004年12月30日,得到加一天后时间为2005-1-1,且有时间越界处理,能得全部分数。 本题满分30。 #include usingnamespacestd; classDate { inty,m,d; public: Date(){} Date(intyear,intmonth,intday): y(year),m(month),d(day){} friendDateoperator++(Date&t); voiddisplay(); }; Dateoperator++(Date&t) { ++; if>30) { =%30; ++; if>12) { =%12; ++; } } returnt; } voidDate: : display() { cout< } voidmain() { intyy,mm,dd; cout<<"请输入日期: "; cin>>yy>>mm>>dd; while(y<0||m<0||m>12||d<0||d>30) { cout<<"非法,请重新输入(年月日): "; cin>>y>>m>>d; } Datet(yy,mm,dd); t++; (); } 第三题要求编写一个复数类,要求有4条。 一是有构造函数,能对复数初始化。 二是对复数c1,c2,c3.....能实现连加运算,令c=c1+c2+c3+.....此处可以重载加法操作符。 三是有函数实现两个复数相加,并按照a+ib的形式输出。 四是能实现对一个复数c=a+ib,定义doublex=c有效,使x的值为实部和虚部之和。 本题满分50。 ” #include usingnamespacestd; classcomplex { inta,b; public: complex(){} complex(intaa,intbb): a(aa),b(bb){} complexoperator+(complexc); voidadd_c(complexx1); doubleadd(); intgeta(){returna;} intgetb(){returnb;} }; complexcomplex: : operator+(complexc) { =+a; =+b; returnc; } voidcomplex: : add_c(complexx1) { cout<<()+a<<"+"<<()+b<<"i"< } doublecomplex: : add() { doublec=a+b; returnc; } voidmain() { complexa1(1,1),a2(2,2),a3(3,3),a4,a5; a4=a1+a2+a3; (a2); doublec=(); cout< } 2006年 1.写一个程序判断字符串中数字的位置(不限制使用面向对象编程) 例如: 输入 a3b4c5 输出 246 #include #include #include<> usingnamespacestd; voidmain() { strings; cout<<"请输入一串字符串: "; cin>>s; for(inti=0;i<();i++) { if(isdigit(s[i])) { cout<<""< } } cout< } 2.写一个类,能接受int型的变量,接收变量后能存储原变量(譬如12345)和其反向变量(54321),最多处理数量为10个,当输入达到10个或者输入变量为0的时候停止。 并且在类销毁前输出存储的所有变量。 例如: 输入: 12345,2234,0 输出: 12345 54321 2234 4322 有错误算法: #include #include usingnamespacestd; classInt { strings; 一个CTriangle类,要求可以接受CTriangle(y,x)形式的构造,创建在坐标系中的直角三角形样子如下 A |\ | \ | \ | \ B----------C 三点的坐标分别是A(0,y)B(0,0)C(x,0) 实现+运算,并且能够处理键盘连续输入若干个(少于十个)三角形,并且连加(相加时候三角形边长长度相加,方向同第一个三角形)。 输入0后结束并输出最后得出的三角形的三个坐标值。 例如: 输入: 1 2 -1 -5 输出: A(0,7),B(0,0),C(2,0) #include usingnamespacestd; classCTriangle { inty; intx; public: CTriangle(intyy=0,intxx=0): y(yy),x(xx){} et(y1,x1); cin>>y1; } intn=i; rint(); } voiddesBrowse(vector { for(inti=()-1;i>=0;i--) v_student[i].print(); } voidmain() { vector studentstnt; charname[N]; intnum; cout<<"请按姓名学号的顺序输入学生信息: 同时按下ctrl+z结束输入! "< while(cin>>name>>num) { (name,num); (stnt); } inti_choice; sort(),(),cmp); (); cout<<"1升序浏览2降序浏览3按姓名查询4退出"< while(cin>>i_choice) { if(i_choice==1) { aceBrowse(v_student); } if(i_choice==2) desBrowse(v_student); if(i_choice==3) { cout<<"请输入您要查询学生的姓名: "; cin>>name; for(inti=0;i<();i++) v_student[i].checkInfo(name); } } } 08年: 1、存储一组姓名,如Apple,Tom,Green,Jack要求能排序、按字母顺序插入、并显示。 #include #include #include #include usingnamespacestd; voidmain() { vector strings; cout<<"请输入一组姓名用ctrl+Z结束! "< while(cin>>s) (s); sort(),()); for(inti=0;i<();i++) cout< cout< } 2、输入文件名及路径创建该文件,并把从键盘输入的内容保存到该文件,最后将该文件的路径、该文件名及文件中的内容输出到屏幕。 #include #include #include usingnamespacestd; intconstSIZE=80; voidgetFileName(chararr[]); voidgetFilePath(chararr[]); intmain() { charc_arr[SIZE]; stringstr; cout<<"pleaseenterfilepathandfilename: "< (c_arr,SIZE); ofstreamofile(c_arr,ios_base: : out); if(! ofile) { cout<<"createrror! "< return0; } cout<<"pleaseinputcontentofthefile(endofcrtl+z): "< while(getline(cin,str)) { ofile< } getFileName(c_arr); getFilePath(c_arr); ifstreamifile(c_arr,ios_base: : in); cout<<"thecontentofthefileis: "< while(! ()) { g
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机