写给09年考南理计算机的你【有关复试】
复试成绩占30%,听力30分,笔试150,上机80分,面试和口语一块考察各占20分。个人认为上机是最重要的。笔试小于55分直接刷,小于70分没有公费资格,上机0分直接刷,小于20分没有公费资格。面试小于6分直接刷。(南理“宁缺勿滥”这句话不是唬人的,据说398分的最高分都刷了)听力、口语没有规定,当然是越高越好了。 听力30分(全选择,要带铅笔橡皮) 1)对白0.5分×20 2)段落1分×20 我不知道是不是六级原题(据说去年用的是原题),但感觉比我考的六级听力要简单,倒不是我听得好,是因为它的答案长度小于六级的,呵呵 笔试 数据库 1. 选择2分×20 2. 编程: 1)关系代数语言2分×3 2)SQL语言19分 比较简单,最难的也就是语句嵌套了 3. 数据库设计 1)E/R图 5分 2)根据上图设计数据库关系模式 5分 软件工程 1. 选择2分×15 2. 填空2分×5 3. 名词解释2分×5 4. 简答3分×3 5. 应用题 考察内容就三块: 1)画SC图6分 2)画PAD图5分 3)根据一段15行左右的程序设计语句、路径测试用例5分 本人选考的是软工,个人感觉还是很简单的,我没怎么准备,当然全做出来是没有,但最低标准是达到了。 上机10分×8 1. 从键盘输入一个带有数字的字符串,将其中数字所在的位置输出,并把字符串小写字符变大写再输出。例:输入ab2cd3ef4按回车输出3 6 9 AB2CD3EF4 2. 验证这句话:任何一个大于6的偶数都可以分解为两个素数之和。要求:输入一个大于6的偶数,输出两个素数,其和为输入偶数,程序一直运行,直到键盘输入-1后回车再退出。 3. 找出满足下列性质的三位数,输出并统计其个数:能被11整除,且三个数位上没有两个数相同。例:121不可以。 4. 写一段满足下列条件的程序:输入一个数n和m,把低m位移到高位并输出。例:123456789 3,回车后输出789123456.(不允许用数组实现) 5. 编写程序,输入n(n>=5),打印一个以n为参数的钻石形。(他给出了一个图形,图形元素为星号,我不懂什么叫钻石形,也没从图中总结出规律,没做。至于钻石形,读者自查吧) 6. 用数值迭代法求一个正数的开方,此数由键盘输入,满足前后两次结果数之差小于0.00001。(他给出了迭代公式,我现在的机器不好写,读者自查吧) 7. 从键盘输入一组数,存入一链表中,以-1为链表结束的标志,且-1不作为链表节点。并对其排序,按升序(注:也可能是降序)输出。 8. 对给定的一个数组:a[]={1,35,63,26,85,23,67,81,15,38,80,200},使用系统给定的二分查找函数bsearch()(注:可能是这样写的,不确定)将其排序并输出。此函数要查看系统联机文档,查看其用法。 以上试题不保证没有错漏,毕竟是回忆版的,但大致意思是对的。上机环境为vc或tc可选,本人选的vc,感觉还是vc较好吧,tc毕竟“老古董”了。 从上述试题可以看出南理上机其实不是很难,但考察的较全面。1是考底层地址字符处理,2、3、4都是常规的数字游戏,5考打印控制,6数值分析(最简单的迭代法),7数据结构(链表也是最简单的),8数据结构(但重点恐怕是让我们学会查联机文档啦)。当然,考满分也是不容易的,呵呵
下面是07年一个学长(谢谢这位好心人!)写的上机题目: 计算机07复试上机 今年上机分数集中在40~60之间,据说有两个0分,我写完七个57分 第三题闰年条件写得不对,自己改吧 第七题写的不够简单,当时只想出结果就行了,自己可以优化一下 今年编程源码可以保存在优盘或软盘,以前是软盘,优盘复试时候还,软盘不还 另外上机时间2小时,在编程时候先用记事本写上 #include<iostream.h> #include<iomanip.h> #include<math.h> void main(){} 直接往里面贴就省时间了 我Q285605960,备注:本校跨专业考计算机,有什么需要可以找我 下面的题目是我根据源码回忆的,可能不太准确,基本上是这样,主要是看看难度 1题目写出递归方程 2//找出这样的数:本身是三位的完全平方数n(100<=n<1000),而且有有两位上的数字相同,如484 3//输入年份和月份,计算该年初到该年这个月底的总天数(注意闰年) 4//用牛顿迭代法求某正数n的平方根 5/求亲密数a,b(均为正整数):a的所有因子(含1不含a本身)之和为b,若b的所有因子(含1不含b本身)之和为a,则a,b为亲密数,求满足a<b的亲密数,键盘输入范围m,n(10<m<n<10000) 6//给定数组,求连续三元素之和,输出和最大的第一个元素的下标 7//键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出 8键盘输入算数表达式(字符串的),求计算结果.(这题没来得及) //以下是源码,我写的 1题目写出递归方程#include<iostream.h> #include<iomanip.h> float fun(float x,int n){ if(0==n){ return 1; }else if(1==n){ return x; }else{ return ((2*n-1)*x-fun(x,n-1)-(n-1)*fun(x,n-2)/n); } } void main(){ int n; float p,x; cout<<fun(2,0)<<endl; cout<<fun(2,1)<<endl; cout<<fun(2,3)<<endl; }//main 2//找出这样的数:本身是三位的完全平方数n(100<=n<1000),而且有有两位上的数字相同,如484 #include<iostream.h> #include<iomanip.h> #include<math.h> int fun1(int n){ int temp; temp=(int)sqrt(n); if(n==temp*temp){ return 1; }else{ return 0; } } int fun2(int n){ int a[3],i; for(i=0;i<3;i++){ a=n%10; n/=10; } if(a[0]== a[1] || a[1]== a[2] || a[0]== a[2]) return 1; else return 0; } void main(){ int n; for(n=100;n<1000;n++){ if(fun1(n) && fun2(n)){ cout<<"n="<<n<<endl; } } }//main 3//输入年份和月份,计算该年初到该年这个月底的总天数(注意闰年) #include<iostream.h> #include<iomanip.h> #include<math.h> int leapyear(int year){ if(year%4==0 || year%400==0){ return 1; }else return 0; } void main(){ int year,month; int num=0,feb=0; cout<<"请输入年份n和月份m"<<endl; cin>>year>>month; if(leapyear(year)) feb=29; else feb=28; switch(month){ case 1: num=num+31; break; case 2: num=num+31+feb; break; case 3: num=num+31+feb+31;break; case 4: num=num+31+feb+31+30;break; case 5: num=num+31+feb+31+30+31;break; case 6: num=num+31+feb+31+30+31+30;break; case 7: num=num+31+feb+31+30+31+30+31;break; case 8: num=num+31+feb+31+30+31+30+31+31;break; case 9: num=num+31+feb+31+30+31+30+31+31+30;break; case 10: num=num+31+feb+31+30+31+30+31+31+30+31;break; case 11: num=num+31+feb+31+30+31+30+31+31+30+31+30;break; case 12: num=num+31+feb+31+30+31+30+31+31+30+31+30+31;break; }//switch(month) cout<<"天数="<<num<<endl; }//main 4//用牛顿迭代法求某正数n的平方根 //迭代公式:x2=(x1+n/x1)/2,当x2-x1绝对值小于0.00001停止迭代 #include<iostream.h> #include<iomanip.h> #include<math.h> float fun(float n){ float x1=1,x2=1; do{ x1=x2; x2=(x1+n/x1)/2.0f; }while(fabs(x2-x1)>0.00001); return x2; } void main(){ cout<<fun(3)<<endl; cout<<fun(9)<<endl; }//main 5/求亲密数a,b(均为正整数):a的所有因子(含1不含a本身)之和为b,若b的所有因子(含1不含b本身)之和为a,则a,b为亲密数,求满足a<b的亲密数,键盘输入范围m,n(10<m<n<10000) #include<iostream.h> #include<iomanip.h> #include<math.h> int fun(int n){ int i,sum=0; for(i=1;i<n;i++){ if(n%i==0) sum+=i; } return sum; } void main(){ int m,n,a,b,temp,temp2; cout<<"请输入范围m n : (10<m<n<10000)"<<endl; cin>>m>>n; for(a=m;a<=n;a++){ b=fun(a); if(a==fun(b) && a<b) cout<<"亲密数:a="<<a<<" b="<<b<<endl; } }//main 6//给定数组,求连续三元素之和,输出和最大的第一个元素的下标 //a[0]+a[1]+a[2],a[1]+a[2]+a[3]...a[n-1]+a[0]+a[1] #include<iostream.h> #include<iomanip.h> #include<math.h> void main(){ int a[10]={12,34,3,89,76,24,10,67,33,17}; int i,max=0,sum2=0,index=0; max=a[0]+a[1]+a[2]; for(i=1;i<10;i++){ sum2=a+a[(i+1)%10]+a[(i+2)%10]; if(sum2>max){ index=i; max=sum2; } } cout<<"最大一组开始下标="<<index<<endl; }//main 7//键盘输入正整数序列-1结尾,以此按升序建立双向循环链表,并降序输出 //第七题写的不够简单,当时只想出结果就行了,自己可以优化一下 #include<iostream.h> #include<iomanip.h> #include<math.h> struct Node{ int data; Node * per; Node * next; }; void main(){ int a[1000],num=-1,i,j,temp; Node * head , * cur,*fir; cout<<"输入正整数序列,空格分隔,以-1结尾"<<endl; do{ num++; cin>>a[num]; }while(-1!=a[num]); for(i=0;i<num-1;i++){ for(j=i+1;j<num;j++){ if(a>a[j]){ temp=a; a=a[j]; a[j]=temp; } } } head=cur= fir=new Node; cur->per =NULL; cur->next =NULL; cur->data=a[0]; for(i=1;i<num;i++){ cur=new Node; cur->data=a; fir->next=cur; cur->per=fir; cur->next =NULL; fir=cur; } head->per=fir; for(; fir!=head ; ){ cout<<fir->data<<setw(5); fir=fir->per; } cout<<head->data<<endl; }//main
|
|
|
|
板凳 大 中 小 发表于 2008-4-18 14:04 只看该作者
下面是另一个更早年代的南理上机题: 1.输入一个整数如2,输入项数如4,计算下式的值:2+22+222+2222 (如输入的是3和2则需要计算的是3+33) #include<iostream> #include<math.h> using namespace std; void main() { double a,n; double temp=0; int sum=0; cin>>a>>n; for(double i=0;i<n;i++) { temp+=a*pow(10,i); } cout<<temp<<endl;//temp得到最大的那位数,如输入a=2,n=4则temp=2222 int x; x=temp/10;sum=temp; for(int j=1;j<=n;j++) { sum=sum+x; x=x/10; } cout<<sum; } ×2.计算e的值e(给定e的表达式,精确度10^-6) 3.一篮鸡蛋数目除2余1,除3余2,除4余3,除5余4问有多少个(59) #include<iostream> using namespace std; void main() { int i=0; while(!((i%2==1)&&(i%3==2)&&(i%4==3)&&(i%5==4))) { i++; } cout<<i; } 4将一个整数转换为16进制输出,(不得使用系统函数) #include<iostream> using namespace std; void tran(int num) { int a[8]; int i=0; for(i=0;i<8;i++) { a=num%16; num/=16; if(num==0) break; } for(;i>=0;i--) { switch(a) { case 10: { cout<<'A'; break; } case 11: { cout<<'B'; break; } case 12: { cout<<'C'; break; } case 13: { cout<<'D'; break; } case 14: { cout<<'E'; break; } case 15: { cout<<'F'; break; } default: { cout<<a; break; } } } } void main() { int num; cin>>num; tran(num); }
5打印100-999间的回文数(正读反读相同,如101 111 121 131 ……) #include<iostream> using namespace std; void main() { int i=100; int f,l; for(;i<=999;i++) { f=i/100; l=i%10; if(f==l) cout<<i<<'\t'; } } 6打印九九表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 …………………………………………………………………… …………………………………………………………………… #include<iostream> using namespace std; void main() { int j=1; for(int i=1;i<=9;i++) { for(;j<=i;j++) { cout<<i<<'*'<<j<<'='<<i*j<<'\t'; } j=1; cout<<endl; } } 7一个数的个位是8(如128),将8移到首位(变成812)后将是原来的4倍,编程求这个数(128205)(最小值) #include<iostream> #include<math.h> using namespace std; int pow1(int x)/*定义int型pow乘方函数*/ { int r=1; if(x==0) return(r); else { while(x>0) { r=r*10; x--; } return(r); } } void main() { int i,sum=0,j,n=0,temp,f,l; n=temp=128; while(sum!=temp*4) { temp=n; i=0; f=n%10; j=n; while(j>10)//计算数字的位数 { j=j/10; i++; } l=n/10; sum=f*pow1(i)+l; n++; } cout<<temp<<' '<<sum<<endl; }
8.A,B,C,D,E,F,G分别代表1000,500,100,50,10,5,1,给定一个字符串如ABC,求出它的值(ABC=1000+500+100) #include<iostream> using namespace std; void main() { char a[20]; int b[20]; int i=0,sum=0; char ch='A'; while(ch!='.') { cin>>ch; a=ch; i++; } i=0; while(a!='.') { switch(a) { case 'A': { b=1000; i++; break; } case 'B': { b=500; i++; break; } case 'C': { b=100; i++; break; } case 'D': { b=50; i++; break; } case 'E': { b=10; i++; break; } case 'F': { b=5; i++; break; } case 'G': { b=1; i++; break; } default: { cout<<"包含一个非法字符"<<a<<"将以0计算"<<endl; b=0; i++; break; } } } i--; for(;i>=0;i--) sum+=b; cout<<sum<<endl; }
|
|