C/C++筆試題(7)

 

1  #include “filename.h”#include <filename.h>的區別?

答:#include “filename.h”表明該文件是用戶提供的頭文件,查找該文件時從當前文件

目錄開始;#include <filename.h>表明這個文件是一個工程或標準頭文件,查找過程會檢

查預定義的目錄。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

2  頭文件的作用是什麼?

答:一、通過頭文件來調用庫功能。在很多場合,源代碼不便(或不準)向用戶公佈,只

要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功

能,而不必關心接口怎麼實現的。編譯器會從庫中提取相應的代碼。

二、頭文件能加強類型安全檢查。如果某個接口被實現或被使用時,其方式與頭文件中的

聲明不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程序員調試、改錯的負擔

<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />3  C++函數中值的傳遞方式有哪幾種?

答:C++函數的三種傳遞方式爲:值傳遞、指針傳遞和引用傳遞。

 

4  內存的分配方式的分配方式有幾種?

答:一、從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的

整個運行期間都存在。例如全局變量。

二、在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執

行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高

,但是分配的內存容量有限。

三、從堆上分配,亦稱動態內存分配。程序在運行的時候用mallocnew申請任意多少的內存,程序員自己負責在何時用freedelete釋放內存。動態內存的生存期由我們決定,使用非常靈活,但問題也最多。

 

交換兩個數,不用第三塊兒內存!請問怎麼實現?

 

現有12個小球,其中只有1個球與其它的球重量不同(即有11個球重量全相同),並且不知道這

個跟其它球重量不同的球是重還是輕(跟其他11個重量相同的球相比而言),那麼從這12個球

中找出這個跟其它球重量不同的球.

 

北電

昨天筆試共5道題目:
1.
英譯漢 ,關於ITUCCITT
2.
漢譯英,關於VMware
3.
兩個有序數組的合併,寫一個完整的程序
4.
填空題,排序二叉樹節點的刪除,5個空
5.
調試題,多線程文件的讀寫,編譯沒有錯誤,請找出至少三個bug.

8.內聯函數在編譯時是否做參數類型檢查?

1,程序設計(可以用自然語言來描述,不編程):C/C++源代碼中,檢查花括弧(是""
"
""{""}")是否匹配,若不匹配,則輸出不匹配花括弧所在的行與列。


2
,巧排數字,將1,2,...,19,2020個數字排成一排,使得相鄰的兩個數字之和爲一個素數,且
首尾兩數字之和也爲一個素數。編程打印出所有的排法。


3
,打印一個N*N的方陣,N爲每邊字符的個數( 3N20 ),要求最外層爲"X",第二層爲"Y",從第三層起每層依次打印數字0123...
例子:當N =5,打印出下面的圖形:

 X X X X X
 X Y Y Y X
 X Y 0 Y X
 X Y Y Y X
 X X X X X 

 

普天C++筆試題

c++最後幾個大題目是
1
,實現雙向鏈表刪除一個節點P,在節點P後插入一個節點,這兩個函數。(北電 重複)
2
,寫一個函數將其中的/t都轉換成4個空格。
3
windows程序的入口是哪裏?寫出windows消息機制的流程。
4
,如何定義和實現一個類的成員函數爲回調函數

虛函數也考了一題,不過不難。
class base{
public:
virtual void play(){
cout<<"base";
}
}
class son: public base{
public:
void play(){cout<<"son";}
}
void g(base & b){
b.play;
}

void main(){
son s;
g(s);
return;
}

我所收集的intel比試題&面試題:

(熟悉大公司的題目,並不僅僅是爲了進這些公司,而是很多國內公司考察內容都很接近而已
.)
2005筆試

1
。高效的內存管理
2
8皇后問題


面試q
2 編譯中的問題:全局變量如int i=5; int*(pf)()=foo; 分別在何時被初始化?設計時候如何具體的實現。
3 OS相關的問題,內存訪問,cache等(包括cache在整個系統中的位置,畫出來,並解釋)
4 解釋例如mov ax,100H 這樣一條指令的cpu, os, memory等都完成了什麼樣的工作
5 Strlen()的C語言實現,不能使用任何變量。
6 編譯中display的一些問題

7 一個hash函數,輸入隨機,現發生衝突,如數據集中在某幾條中,問怎樣處理hash函數保證高效的訪問,怎樣實現?
8 Switch()case…語句翻譯成三元組。
9 一個byte(用C語言實現計數其中1的個數),給出最高效的實現方法。(位域)或者查表最快的;
10 上海有多少個加油站?你是怎樣解決這一問題?
11 C語言參數的入棧順序?爲什麼這麼實現?
12 你的最大的優點和缺點分別是什麼?
13 C語言中字符串的翻轉,最高效率(時間和空間)的實現?

2004
1.
三個float:a,b,c 問值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b


2.
把一個鏈表反向填空  (重複)

4. y1(n)=x(2n), y2(n)=x(n/2),
問:
如果y1爲周期函數,那麼x是否爲周期函數
如果x爲周期函數,那麼y1是否爲周期函數
如果y2爲周期函數,那麼x是否爲周期函數
如果x爲周期函數,那麼y2是否爲周期函數

4.
某個程序在一個嵌入式系統(200MCPU,50MSDRAM)中已經最化了,換到另一個系統
(300M
CPU,50MSDRAM)中運行,還需要優化嗎?

5. x^4+a*x^3+x^2+c*x+d
最少需要作幾次乘法

2.
填程序
把一個計算m^n的程序填充完整
大概的意思是:
有一個全局數組char s[BUFSIZE]
利用這個數組計算,就是每個單元存放計算結果的一位,index小的存放低位,index

的存放高位
3
。有兩個線程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
1有沒有其他方法可以提高程序的性能
2)可不可以不使用信號之類的機制來實現上述的功能
4
優化下面的程序
(0)sum=0
(1)I=1
(2)T1
4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(10)IF I<20 GOTO (2)

2003
年的

1
:概率題。x,y爲隨機變量,聯合概率密度 f(x,y) = intig(0,1)*dx*intig(0,x)*k*d
y
k爲常數,求
k=? E(xy)=?
注:intig(a,b)ab的定積分。


2
:概率題。A,B爲隨機事件,以下哪個正確
A. P(A U B)*p(AB) <= P(A)P(B)
B. P(A U B)*p(AB) >= P(A)P(B)
C. P(A U B)*p(AB) <= P(A) + P(B)
D. P(A U B)*p(AB) >= P(A) + P(B)

3:
信道帶寬200kHz,信噪比10dB,求信道波特率=?

4
:以下代碼運行結果是什麼

int main()
{
int a,b,c,abc = 0;
a=b=c=40;
if(c)
{
int abc;
abc = a*b+c;
}
printf("%d,%d", abc, c);
return 0;
}

5
:給出了從紐約出發和到達落山雞的各種航班信息,寫出找到一條從紐約到落山雞的最
短距離的航班組合的代碼。

6
:從計算機圖形上截取某個物體邊緣的若干個座標,求這個物體面積,並跟判斷是方形
還是圓形,爲啥。(座標不記得,大概是個圓)
2005年騰訊招聘
選擇題(60) 
  c/c++ os linux 
方面的基礎知識 cSizeof函數有好幾個

程序填空
(40) 
1.(20) 4
x5 
  
不使用額外空間, A,B兩鏈表的元素交叉歸併
 
2.(20) 4
x5 
MFC  
將樹序列化 轉存在數組或 鏈表中!

 

1.請定義一個宏,比較兩個數ab的大小,不能使用大於、小於、if語句

// 這樣轉向定義應該不算違規吧!

#include <iostream>

using namespace std;

 

#define Cmp(x,y) compare(x,y)

 

int compare( int a, int b)

{

     a^=(1<<31); b^=(1<<31);

     int i=31;

    while ((i^-1) && !((a&(1<<i))^(b&(1<<i))))     i--;

     return (i^-1)?(((a>>i)&1)?1:-1):0;

}

 

int _tmain()

{

     int c;

     c = Cmp(5,4);

     cout<<c<<endl;

     return 0;

}

(一葉落而知天下秋) 的答案:

#define   COMPARE(a,b)   ((a)-(b)) ? b:a

2.如何輸出源文件的標題和目前執行行的行數

cout   <<   "Filename   "   <<   __FILE__   <<   "   Line   "   <<   __LINE__   <<   endl;

3.兩個數相乘,小數點後位數沒有限制,請寫一個高精度算法

  算法提示:

          輸入 string a, string b 計算string c=a*b; 返回 c;

1    紀錄小數點在a,b中的位置l1,l2 則需要小數點後移動位置數爲l=length(a)+length(b)-l1-l2-2;

2    去掉a,b中的小數點,(a,b小數點後移,使a,b變爲整數)

3    計算c=a*b; (同整數的大數相乘算法)

4    輸出c,(注意在輸出倒數第l個數時,輸出一個小數點。若是輸出的數少於l個,就補0

du51(鬱郁思揚)的答案:


變爲整數求就行了.輸入的時候記一下,小數點位置..輸出再做點文章就行了.
下面的是大整數的運算
.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
   int data;
   Node *next;
};
void output(Node *head)
{
   if(!head->next&&!head->data)return;
   output(head->next);
   cout<<head->data;
}
void Mul(char *a,char *b,int pos)        
{
   char *ap=a,*bp=b;
   Node *head=0;
   head=new Node;head->data=0,head->next=0;   //

   Node *p,*q=head,*p1;
   int temp=0,temp1,bbit;
   while(*bp)                //
若乘數不爲空 ,繼續.
   {
       p=q->next;p1=q;
       bbit=*bp-48;          //
把當前位轉爲整型

       while(*ap||temp)            //
若被乘數不空,繼續
       {
           if(!p)            //
若要操作的結點爲空,申請之
           {
               p=new Node;
               p->data=0;
               p->next=0;
               p1->next=p;
           }
           if(*ap==0)temp1=temp;
           else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
           p1->data=temp1%10;    //
留當前位
           temp=temp1/10;    //
進位以int的形式留下.
           p1=p;p=p->next;                 //
被乘數到下一位

       }
       ap=a;bp++;q=q->next;                //q
進下一位
   }
   p=head;
   output(p);                   //
顯示
   cout<<endl;
   while(head)                 //
釋放空間
   {
           p=head->next;
           delete head;
           head=p;
   }
}
int main()
{
   cout<<"
請輸入兩個數"<<endl;
   char test1[MAX],test2[MAX];
   cin.getline(test1,MAX,'/n');
   cin.getline(test2,MAX,'/n');
   Mul(strrev(test1),strrev(test2));
   system("PAUSE");
   return 0;
}
上面大整數已經寫了.你加幾個東西就行了
.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
   int data;
   Node *next;
};
void output(Node *head,int pos)
{
   if(!head->next&&!head->data)return;
   output(head->next,pos-1);
   cout<<head->data;
   if(!pos)cout<<".";
}
void Mul(char *a,char *b,int pos)        
{
   char *ap=a,*bp=b;
   Node *head=0;
   head=new Node;head->data=0,head->next=0;   //

   Node *p,*q=head,*p1;
   int temp=0,temp1,bbit;
   while(*bp)                //
若乘數不爲空 ,繼續.
   {
       p=q->next;p1=q;
       bbit=*bp-48;          //
把當前位轉爲整型

       while(*ap||temp)            //
若被乘數不空,繼續
       {
           if(!p)            //
若要操作的結點爲空,申請之
           {
               p=new Node;
               p->data=0;
               p->next=0;
               p1->next=p;
           }
           if(*ap==0)temp1=temp;
           else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
           p1->data=temp1%10;    //
留當前位
           temp=temp1/10;    //
進位以int的形式留下.
           p1=p;p=p->next;                 //
被乘數到下一位

       }
       ap=a;bp++;q=q->next;                //q
進下一位
   }
   p=head;
   output(p,pos);                   //
顯示
   cout<<endl;
   while(head)                 //
釋放空間
   {
           p=head->next;
           delete head;
           head=p;
   }
}
int main()
{
   cout<<"
請輸入兩個數"<<endl;
   char test1[MAX],test2[MAX],*p;
   int pos=0;
   cin.getline(test1,MAX,'/n');
   cin.getline(test2,MAX,'/n');
   if(p=strchr(test1,'.'))
   {
       pos+=strlen(test1)-(p-test1)-1;
       do
       {
           p++;
           *(p-1)=*p;
       }while(*p);
   }       
   if(p=strchr(test2,'.'))
   {
       pos+=strlen(test2)-(p-test2)-1;
       do
       {
           p++;
           *(p-1)=*p;
       }while(*p);
   }   
   Mul(strrev(test1),strrev(test2),pos);
   system("PAUSE");
   return 0;
}

4.寫一個病毒

cout<<"一個病毒"<<endl;

(開玩笑的,沒搞過,^_^)

 

5.讓你在100000000個浮點數中找出最大的10000個,要求時間複雜度優。

//本算法使用快排,O(n*lg(n)) 

//最低可以找到線性算法,使用預先區域統計劃分!類試於構造Quad Trees! 寫起來代碼會長些!

 

#include <stdio.h>

#include <stdlib.h>

 

#define Max 100000000

int a[Max+10];

 

int cmp( const void *a, const void *b)

{

     int *x = ( int *) a;

     int *y = ( int *) b;

     return *x-*y;

}

 

int main()

{

     int n=0;

     while (scanf("%d",&a[n])==1)     n++;

     qsort(a,n,4,cmp);

     for ( int i=0;i<3;i++)     printf("%d",a[ i ]);

     return 1;

}

5 、有 A B C D 四個人,要在夜裏過一座橋。他們通過這座橋分別需要耗時 1 2 5 10 分鐘,只有一支手電,並且同時最多隻能兩個人一起過橋。請問,如何安排,能夠在 17 分鐘內這四個人都過橋?

Solution:關鍵是時間最長的兩個人必須同時過橋

The First Time       A(1) B(2) 過橋, A(1) 返回 Cost 1+2
The Second Time
   C(5) D(10) 過橋, B(2) 返回 Cost
10+2
The Third Time     A(1)
B(2) 過橋 Cost
2

Total Time Cost
   (1+2)+(10+2)+2=17 minutes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章