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 內存的分配方式的分配方式有幾種?
答:一、從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的
整個運行期間都存在。例如全局變量。
二、在棧上創建。在執行函數時,函數內局部變量的存儲單元都可以在棧上創建,函數執
行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高
,但是分配的內存容量有限。
三、從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自己負責在何時用free或delete釋放內存。動態內存的生存期由我們決定,使用非常靈活,但問題也最多。
交換兩個數,不用第三塊兒內存!請問怎麼實現?
現有12個小球,其中只有1個球與其它的球重量不同(即有11個球重量全相同),並且不知道這
個跟其它球重量不同的球是重還是輕(跟其他11個重量相同的球相比而言),那麼從這12個球
中找出這個跟其它球重量不同的球.
北電
昨天筆試共5道題目:
1.英譯漢 ,關於ITU和CCITT的
2.漢譯英,關於VMware的
3.兩個有序數組的合併,寫一個完整的程序
4.填空題,排序二叉樹節點的刪除,5個空
5.調試題,多線程文件的讀寫,編譯沒有錯誤,請找出至少三個bug.
8.內聯函數在編譯時是否做參數類型檢查?
1,程序設計(可以用自然語言來描述,不編程):C/C++源代碼中,檢查花括弧(是"("與
")","{"與"}")是否匹配,若不匹配,則輸出不匹配花括弧所在的行與列。
2,巧排數字,將1,2,...,19,20這20個數字排成一排,使得相鄰的兩個數字之和爲一個素數,且
首尾兩數字之和也爲一個素數。編程打印出所有的排法。
3,打印一個N*N的方陣,N爲每邊字符的個數( 3〈N〈20 ),要求最外層爲"X",第二層爲"Y",從第三層起每層依次打印數字0,1,2,3,...
例子:當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. 某個程序在一個嵌入式系統(200M的CPU,50M的SDRAM)中已經最化了,換到另一個系統
(300M的CPU,50M的SDRAM)中運行,還需要優化嗎?
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)爲a到b的定積分。
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 方面的基礎知識 c的Sizeof函數有好幾個!
程序填空(40)
1.(20) 4空x5
不使用額外空間,將 A,B兩鏈表的元素交叉歸併
2.(20) 4空x5
MFC 將樹序列化 轉存在數組或 鏈表中!
1.請定義一個宏,比較兩個數a、b的大小,不能使用大於、小於、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