分享

写给09年考南理计算机的你【有关复试】

 霜影 2010-02-27

写给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
本帖最近评分记录
  • ilmysf 威望 +30 2009-3-8 10:59
下面是另一个更早年代的南理上机题:
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;
            
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多