寫給09年考南理計算機的你【有關復試】
復試成績占30%,聽力30分,筆試150,上機80分,面試和口語一塊考察各占20分。個人認為上機是最重要的。筆試小于55分直接刷,小于70分沒有公費資格,上機0分直接刷,小于20分沒有公費資格。面試小于6分直接刷。(南理“寧缺勿濫”這句話不是唬人的,據(jù)說398分的最高分都刷了)聽力、口語沒有規(guī)定,當然是越高越好了。
聽力30分(全選擇,要帶鉛筆橡皮)
1)對白0.5分×20
2)段落1分×20
我不知道是不是六級原題(據(jù)說去年用的是原題),但感覺比我考的六級聽力要簡單,倒不是我聽得好,是因為它的答案長度小于六級的,呵呵
筆試
數(shù)據(jù)庫
1. 選擇2分×20
2. 編程:
1)關系代數(shù)語言2分×3
2)SQL語言19分 比較簡單,最難的也就是語句嵌套了
3. 數(shù)據(jù)庫設計
1)E/R圖 5分
2)根據(jù)上圖設計數(shù)據(jù)庫關系模式 5分
軟件工程
1. 選擇2分×15
2. 填空2分×5
3. 名詞解釋2分×5
4. 簡答3分×3
5. 應用題
考察內(nèi)容就三塊:
1)畫SC圖6分
2)畫PAD圖5分
3)根據(jù)一段15行左右的程序設計語句、路徑測試用例5分
本人選考的是軟工,個人感覺還是很簡單的,我沒怎么準備,當然全做出來是沒有,但最低標準是達到了。
上機10分×8
1. 從鍵盤輸入一個帶有數(shù)字的字符串,將其中數(shù)字所在的位置輸出,并把字符串小寫字符變大寫再輸出。例:輸入ab2cd3ef4按回車輸出3 6 9 AB2CD3EF4
2. 驗證這句話:任何一個大于6的偶數(shù)都可以分解為兩個素數(shù)之和。要求:輸入一個大于6的偶數(shù),輸出兩個素數(shù),其和為輸入偶數(shù),程序一直運行,直到鍵盤輸入-1后回車再退出。
3. 找出滿足下列性質(zhì)的三位數(shù),輸出并統(tǒng)計其個數(shù):能被11整除,且三個數(shù)位上沒有兩個數(shù)相同。例:121不可以。
4. 寫一段滿足下列條件的程序:輸入一個數(shù)n和m,把低m位移到高位并輸出。例:123456789 3,回車后輸出789123456.(不允許用數(shù)組實現(xiàn))
5. 編寫程序,輸入n(n>=5),打印一個以n為參數(shù)的鉆石形。(他給出了一個圖形,圖形元素為星號,我不懂什么叫鉆石形,也沒從圖中總結出規(guī)律,沒做。至于鉆石形,讀者自查吧)
6. 用數(shù)值迭代法求一個正數(shù)的開方,此數(shù)由鍵盤輸入,滿足前后兩次結果數(shù)之差小于0.00001。(他給出了迭代公式,我現(xiàn)在的機器不好寫,讀者自查吧)
7. 從鍵盤輸入一組數(shù),存入一鏈表中,以-1為鏈表結束的標志,且-1不作為鏈表節(jié)點。并對其排序,按升序(注:也可能是降序)輸出。
8. 對給定的一個數(shù)組:a[]={1,35,63,26,85,23,67,81,15,38,80,200},使用系統(tǒng)給定的二分查找函數(shù)bsearch()(注:可能是這樣寫的,不確定)將其排序并輸出。此函數(shù)要查看系統(tǒng)聯(lián)機文檔,查看其用法。
以上試題不保證沒有錯漏,畢竟是回憶版的,但大致意思是對的。上機環(huán)境為vc或tc可選,本人選的vc,感覺還是vc較好吧,tc畢竟“老古董”了。
從上述試題可以看出南理上機其實不是很難,但考察的較全面。1是考底層地址字符處理,2、3、4都是常規(guī)的數(shù)字游戲,5考打印控制,6數(shù)值分析(最簡單的迭代法),7數(shù)據(jù)結構(鏈表也是最簡單的),8數(shù)據(jù)結構(但重點恐怕是讓我們學會查聯(lián)機文檔啦)。當然,考滿分也是不容易的,呵呵
下面是07年一個學長(謝謝這位好心人?。懙纳蠙C題目: 計算機07復試上機 今年上機分數(shù)集中在40~60之間,據(jù)說有兩個0分,我寫完七個57分 第三題閏年條件寫得不對,自己改吧 第七題寫的不夠簡單,當時只想出結果就行了,自己可以優(yōu)化一下 今年編程源碼可以保存在優(yōu)盤或軟盤,以前是軟盤,優(yōu)盤復試時候還,軟盤不還 另外上機時間2小時,在編程時候先用記事本寫上 #include<iostream.h> #include<iomanip.h> #include<math.h> void main(){} 直接往里面貼就省時間了 我Q285605960,備注:本??鐚I(yè)考計算機,有什么需要可以找我 下面的題目是我根據(jù)源碼回憶的,可能不太準確,基本上是這樣,主要是看看難度 1題目寫出遞歸方程 2//找出這樣的數(shù):本身是三位的完全平方數(shù)n(100<=n<1000),而且有有兩位上的數(shù)字相同,如484 3//輸入年份和月份,計算該年初到該年這個月底的總天數(shù)(注意閏年) 4//用牛頓迭代法求某正數(shù)n的平方根 5/求親密數(shù)a,b(均為正整數(shù)):a的所有因子(含1不含a本身)之和為b,若b的所有因子(含1不含b本身)之和為a,則a,b為親密數(shù),求滿足a<b的親密數(shù),鍵盤輸入范圍m,n(10<m<n<10000) 6//給定數(shù)組,求連續(xù)三元素之和,輸出和最大的第一個元素的下標 7//鍵盤輸入正整數(shù)序列-1結尾,以此按升序建立雙向循環(huán)鏈表,并降序輸出 8鍵盤輸入算數(shù)表達式(字符串的),求計算結果.(這題沒來得及) //以下是源碼,我寫的 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//找出這樣的數(shù):本身是三位的完全平方數(shù)n(100<=n<1000),而且有有兩位上的數(shù)字相同,如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//輸入年份和月份,計算該年初到該年這個月底的總天數(shù)(注意閏年) #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<<"天數(shù)="<<num<<endl; }//main 4//用牛頓迭代法求某正數(shù)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/求親密數(shù)a,b(均為正整數(shù)):a的所有因子(含1不含a本身)之和為b,若b的所有因子(含1不含b本身)之和為a,則a,b為親密數(shù),求滿足a<b的親密數(shù),鍵盤輸入范圍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<<"親密數(shù):a="<<a<<" b="<<b<<endl; } }//main 6//給定數(shù)組,求連續(xù)三元素之和,輸出和最大的第一個元素的下標 //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//鍵盤輸入正整數(shù)序列-1結尾,以此按升序建立雙向循環(huán)鏈表,并降序輸出 //第七題寫的不夠簡單,當時只想出結果就行了,自己可以優(yōu)化一下 #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<<"輸入正整數(shù)序列,空格分隔,以-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 |
| |
| 板凳 大 中 小 發(fā)表于 2008-4-18 14:04 只看該作者 下面是另一個更早年代的南理上機題: 1.輸入一個整數(shù)如2,輸入項數(shù)如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得到最大的那位數(shù),如輸入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.一籃雞蛋數(shù)目除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將一個整數(shù)轉(zhuǎn)換為16進制輸出,(不得使用系統(tǒng)函數(shù)) #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間的回文數(shù)(正讀反讀相同,如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一個數(shù)的個位是8(如128),將8移到首位(變成812)后將是原來的4倍,編程求這個數(shù)(128205)(最小值) #include<iostream> #include<math.h> using namespace std; int pow1(int x)/*定義int型pow乘方函數(shù)*/ { 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)//計算數(shù)字的位數(shù) { 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; }
|