一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C 面試題

 yiherainbow 2007-10-13

1  #i nclude “filename.h”和#i nclude <filename.h>的區(qū)別?
   答:對于#i nclude <filename.h>編譯器從標(biāo)準(zhǔn)庫開始搜索filename.h
    對于#i nclude “filename.h”編譯器從用戶工作路徑開始搜索filename.h
2  頭文件的作用是什么?
答:一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需
要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關(guān)心接口怎么實現(xiàn)的。編譯器會從庫中提取相應(yīng)的代碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)
則能大大減輕程序員調(diào)試、改錯的負(fù)擔(dān)。
3  C++函數(shù)中值的傳遞方式有哪幾種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。
4  內(nèi)存的分配方式的分配方式有幾種?
答:一、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量。
二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)
存分配運
算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free
或delete釋放
內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。


5  實現(xiàn)雙向鏈表刪除一個節(jié)點P,在節(jié)點P后插入一個節(jié)點,寫出這兩個函數(shù);
答:雙向鏈表刪除一個節(jié)點P
template<class type> void list<type>::delnode(int p)
{
 int k=1;
 listnode<type> *ptr,*t;
 ptr=first;

 while(ptr->next!=NULL&&k!=p)
 {
  ptr=ptr->next;
     k++;
 }
    t=ptr->next;
 cout<<"你已經(jīng)將數(shù)據(jù)項 "<<t->data<<"刪除"<<endl;
 
 ptr->next=ptr->next->next;
 length--;
 delete t;
}

在節(jié)點P后插入一個節(jié)點:
template<class type> bool list<type>::insert(type t,int p)
{
 listnode<type> *ptr;
 ptr=first;

 int k=1;
 while(ptr!=NULL&&k<p)
 {
  ptr=ptr->next;
  k++;
 }
 if(ptr==NULL&&k!=p)
  return false;
 else
 {
   listnode<type> *tp;
   tp=new listnode<type>;
   tp->data=t;
   tp->next=ptr->next;
   ptr->next=tp;
   length++;
  
   return true;
 }
}


6  寫一個函數(shù),將其中的\t都轉(zhuǎn)換成4個空格。
   void change(char* pstr)
   {
      while(*pstr++ != '\0')
      {
         if (*pstr == '\t')
           
           
      }
    }

7  Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程.

8  如何定義和實現(xiàn)一個類的成員函數(shù)為回調(diào)函數(shù)?

9  C++里面是不是所有的動作都是main()引起的?如果不是,請舉例.
答:在運行c++程序時,通常從main()函數(shù)開始執(zhí)行。因此如果沒有main(),程序?qū)⒉煌暾?,編譯器將指出未定義main()函數(shù)。
   例外情況:如, 在windows編程中,可以編寫一個動態(tài)連接庫(dll)模塊,這是其他windows程序可以使用的代碼。由于
   DLL模塊不是獨立的程序,因此不需要main().用于專用環(huán)境的程序--如機(jī)器人中的控制器芯片--可能不需要main().但常規(guī)的
   獨立程序都需要main().

10 C++里面如何聲明const void f(void)函數(shù)為C程序中的庫函數(shù)?
11 下列哪兩個是等同的

int b;

A const int* a = &b;

B const* int a = &b;

C const int* const a = &b;

D int const* const a = &b;

12 內(nèi)聯(lián)函數(shù)在編譯時是否做參數(shù)類型檢查


13 三個float:a,b,c
問值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b
14 把一個鏈表反向填空
  void reverse(test* head)
  {
     test* pe = head;
     test* ps = head->next;
     while(ps)
     {  
        pe->next = ps->next;
        ps->next = head;
        head = ps;
        ps = pe->next;
     }
   }
       

15 設(shè)計一個重采樣系統(tǒng),說明如何anti-alias

16 某個程序在一個嵌入式系統(tǒng)(200M的CPU,50M的SDRAM)中已經(jīng)最化了,換到另一個系統(tǒng)(300M的CPU,50M的SDRAM)中運行,還需要優(yōu)化嗎?

17. 下面哪種排序法對12354最快
a quick sort
b.buble sort
c.merge sort

18. 哪種結(jié)構(gòu),平均來講,獲取一個值最快
a. binary tree
b. hash table
c. stack


19 請問C++的類和C里面的struct有什么區(qū)別?
答:c++的類的成員默認(rèn)情況下是私有的,c的struct的成員默認(rèn)情況下是公共的.

20 請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
答:析構(gòu)函數(shù)的作用是當(dāng)對象生命期結(jié)束時釋放對象所占用的資源。 析構(gòu)函數(shù)用法:析構(gòu)函數(shù)是特殊的類成員函數(shù)
它的名字和類名相同,沒有返回值,沒有參數(shù)不能隨意調(diào)用也沒有重載。只是在類對象生命期結(jié)束時有系統(tǒng)自動調(diào)用。
   虛函數(shù)用在繼承中,當(dāng)在派生類中需要重新定義基類的函數(shù)時需要在基類中將該函數(shù)聲明為虛函數(shù),作用為使程序支持動態(tài)聯(lián)遍。


21 全局變量和局部變量有什么區(qū)別?是怎么實現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
 答:一些變量整個程序中都是可見的,它們稱為全局變量,一些變量在函數(shù)內(nèi)部定義且只在函數(shù)中可知,則稱為局部變量。
全局變量由編譯器建立且存放在內(nèi)存的全局?jǐn)?shù)據(jù)區(qū),局部變量存放在棧區(qū)

22 一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識。

23 8086是多少尉的系統(tǒng)?在數(shù)據(jù)總線上是怎么實現(xiàn)的?

24 多態(tài)。overload 和 override的區(qū)別。
答:重載在相同范圍(同一個類中),函數(shù)名字相同,參數(shù)不同,virtual關(guān)鍵字可有可無。
 覆蓋是指派生類函數(shù)覆蓋基類函數(shù),不同的范圍,函數(shù)名字相同,參數(shù)相同,基類函數(shù)必須有virtual關(guān)鍵字。

<<Sony筆試題>>
25.完成下列程序

*

*.*.

*..*..*..

*...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*.......

#i nclude<iostream>
using namespace std;

const int n = 8;

main()
{
   int i;
   int j;
   int k;

   for(i = n; i >= 1; i--)
   {
      for(j = 0; j < n-i+1; j++)
      {
         cout<<"*";
         for(k=1; k < n-i+1; k++)
         {
            cout<<".";
         }
      }
      cout<<endl;
   }
   system("pause");
}


26 完成程序,實現(xiàn)對數(shù)組的降序排序

#i nclude <iostream>
using namespace std;

void sort(int* arr, int n);

int main()

{
   int array[]={45,56,76,234,1,34,23,2,3};
   sort(array, 9);
   for(int i = 0; i <= 8; i++)//曾經(jīng)在這兒出界
      cout<<array[i]<<" ";
   cout<<endl;
   system("pause");
}

void sort(int* arr, int n)
{
   int temp;
   for(int i = 1; i < 9; i++)
   {
      for(int k = 0; k < 9 - i; k++)//曾經(jīng)在這兒出界
      {
         if(arr[k] < arr[k + 1])
            {
               temp = arr[k];
               arr[k] = arr[k + 1];
               arr[k + 1] = temp;
            } 
      }
   }
}


27 費波那其數(shù)列,1,1,2,3,5……編寫程序求第十項。可以用遞歸,也可以用其他方法,但要說明你選擇的理由。
非遞歸
#i nclude <iostream>
using namespace std;

int Pheponatch(int n);

main()
{
   int Ph = Pheponatch(10);
   cout<<Ph<<endl;
   system("pause");
  
}

int Pheponatch(int n)
{
   int elem;
   int n1 = 1;
   int n2 = 1;
   if(n == 1 || n ==2)
          return 1;
   else
   {
      for(int i = 3; i <= n; i++)
      {
         elem = n1 + n2;
         n1 = n2;
         n2 = elem;
      }
      return elem;
  }
}  

遞歸
#i nclude <iostream>
using namespace std;

int Pheponatch(int n);

main()
{
   int n;
   cin>>n;
   int ph = Pheponatch(n);
   cout<<ph<<endl;
   system("pause");
  
}

int Pheponatch(int n)
{  
    if(n <= 0)
       exit(-1);
    else
       if(n == 1 || n ==2)
          return 1;
    else
       return Pheponatch(n - 1) + Pheponatch(n - 2);
}  

28 下列程序運行時會崩潰,請找出錯誤并改正,并且說明原因。

#i nclude <stdio.h>

#i nclude <malloc.h>

typedef struct{

   TNode* left;

   TNode* right;

   int value;

} TNode;

TNode* root=NULL;

void append(int N);

int main()

{

   append(63);

   append(45);

   append(32);

   append(77);

   append(96);

   append(21);

   append(17); // Again, 數(shù)字任意給出

}

void append(int N)

{

 TNode* NewNode=(TNode *)malloc(sizeof(TNode));

 NewNode->value=N;

 if(root==NULL)

 {

   root=NewNode;

   return;

 }

 else

 {

   TNode* temp;

   temp=root;

   while((N>=temp.value && temp.left!=NULL) || (N<temp. value && temp. right!=NULL

))

   {

      while(N>=temp.value && temp.left!=NULL)

                 temp=temp.left;

      while(N<temp.value && temp.right!=NULL)

                 temp=temp.right;

   }

   if(N>=temp.value)

          temp.left=NewNode;

   else

          temp.right=NewNode;

   return;       

 }

}


29. A class B network on the internet has a subnet mask of 255.255.240.0, what is the maximum number of hosts per subnet       .

a. 240                  b. 255                  c. 4094                d. 65534

30. What is the difference: between o(log n) and o(log n^2), where both logarithems have base 2       .

a. o(log n^2) is bigger                  b. o(log n) is bigger

c. no difference
31. For a class what would happen if we call a class’s constructor from with the same class’s constructor       .

a. compilation error             b. linking error

c. stack overflow                          d. none of the above

32. “new” in c++ is a:       .

a. library function like malloc in c

b. key word                                    c. operator

d. none of the above

33. Which of the following information is not contained in an inode       .

a. file owner                                   b. file size

c. file name                                     d. disk address

34. What’s the number of comparisons in the worst case to merge two sorted lists containing n elements each       .

a. 2n           b.2n-1                 c.2n+1                d.2n-2

35. Time complexity of n algorithm T(n), where n is the input size ,is T(n)=T(n-1)+1/n if n>1 otherwise 1 the order of
 this algorithm is       .

a. log (n)   b. n                     c. n^2                  d. n^n

36. The number of 1’s in the binary representation of 3*4096+ 15*256+5*16+3 are       .

a. 8                      b. 9                      c. 10           d. 12


37.設(shè)計函數(shù) int atoi(char *s)。

38.int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?

39.解釋局部變量、全局變量和靜態(tài)變量的含義。

40.解釋堆和棧的區(qū)別。
 棧區(qū)(stack)—   由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。
堆:一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于
鏈表.

41.論述含參數(shù)的宏與函數(shù)的優(yōu)缺點。


42. 以下三條輸出語句分別輸出什么?[C易]
char str1[]       = "abc";
char str2[]       = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5  = "abc";
const char* str6  = "abc";
cout << boolalpha << ( str1==str2 ) << endl; // 輸出什么?
cout << boolalpha << ( str3==str4 ) << endl; // 輸出什么?
cout << boolalpha << ( str5==str6 ) << endl; // 輸出什么?

43. 非C++內(nèi)建型別 A 和 B,在哪幾種情況下B能隱式轉(zhuǎn)化為A?[C++中等]
答:
a. class B : public A { ……} // B公有繼承自A,可以是間接繼承的
b. class B { operator A( ); } // B實現(xiàn)了隱式轉(zhuǎn)化為A的轉(zhuǎn)化
c. class A { A( const B& ); } // A實現(xiàn)了non-explicit的參數(shù)為B(可以有其他帶默認(rèn)值的參數(shù))構(gòu)造函數(shù)
d. A& operator= ( const A& ); // 賦值操作,雖不是正宗的隱式類型轉(zhuǎn)換,但也可以勉強(qiáng)算一個

44. 以下代碼中的兩個sizeof用法有問題嗎?[C易]
void UpperCase( char str[] ) // 將 str 中的小寫字母轉(zhuǎn)換成大寫字母
{
    for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
        if( 'a'<=str[i] && str[i]<='z' )
            str[i] -= ('a'-'A' );
}
char str[] = "aBcDe";
cout << "str字符長度為: " << sizeof(str)/sizeof(str[0]) << endl;
UpperCase( str );
cout << str << endl;

45. 以下代碼有什么問題?[C難]
void char2Hex( char c ) // 將字符以16進(jìn)制表示
{
    char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
    char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
    cout << ch << cl << ' ';
}
char str[] = "I love 中國";
for( size_t i=0; i<strlen(str); ++i )
    char2Hex( str[i] );
cout << endl;

46. 以下代碼有什么問題?[C++易]
struct Test
{
    Test( int ) {}
    Test() {}
    void fun() {}
};
void main( void )
{
    Test a(1);
    a.fun();
    Test b();
    b.fun();
}
***  Test b();//定義了一個函數(shù)

47. 以下代碼有什么問題?[C++易]
cout << (true?1:"1") << endl;

8. 以下代碼能夠編譯通過嗎,為什么?[C++易]
unsigned int const size1 = 2;
char str1[ size1 ];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[ size2 ];

48. 以下代碼中的輸出語句輸出0嗎,為什么?[C++易]
struct CLS
{
    int m_i;
    CLS( int i ) : m_i(i) {}
    CLS()
    {
        CLS(0);
    }
};
CLS obj;
cout << obj.m_i << endl;

49. C++中的空類,默認(rèn)產(chǎn)生哪些類成員函數(shù)?[C++易]
答:
class Empty
{
public:
    Empty();                          // 缺省構(gòu)造函數(shù)
    Empty( const Empty& );            // 拷貝構(gòu)造函數(shù)
    ~Empty();                         // 析構(gòu)函數(shù)
    Empty& operator=( const Empty& ); // 賦值運算符
    Empty* operator&();               // 取址運算符
    const Empty* operator&() const;   // 取址運算符 const
};

50. 以下兩條輸出語句分別輸出什么?[C++難]
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 輸出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 輸出什么?

51. 以下反向遍歷array數(shù)組的方法有什么錯誤?[STL易]
vector array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 3 );
for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍歷array數(shù)組
{
    cout << array[i] << endl;
}

52. 以下代碼有什么問題?[STL易]
typedef vector IntArray;
IntArray array;
array.push_back( 1 );
array.push_back( 2 );
array.push_back( 2 );
array.push_back( 3 );
// 刪除array數(shù)組中所有的2
for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor )
{
    if( 2 == *itor ) array.erase( itor );
}

53. 寫一個函數(shù),完成內(nèi)存之間的拷貝。[考慮問題是否全面]
答:
void* mymemcpy( void *dest, const void *src, size_t count )
{
    char* pdest = static_cast<char*>( dest );
    const char* psrc = static_cast<const char*>( src );
    if( pdest>psrc && pdest<psrc+cout ) 能考慮到這種情況就行了
    {
        for( size_t i=count-1; i!=-1; --i )
                pdest[i] = psrc[i];
    }
    else
    {
        for( size_t i=0; i<count; ++i )
            pdest[i] = psrc[i];
    }
    return dest;
}
int main( void )
{
    char str[] = "0123456789";
    mymemcpy( str+1, str+0, 9 );
    cout << str << endl;

    system( "Pause" );
    return 0;
}


54 線程與進(jìn)程的區(qū)別

55:請你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?

56:請你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個層上面,主要有什么作用? TCP與UDP呢?
  IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實現(xiàn)了Internet中自動路由的功能,即尋徑的功能,TCP協(xié)議是一個傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠傳輸?shù)奶匦?,向上提供一個可靠的點到點的傳輸,UDP提供的是一種無連接的服務(wù),主要考慮到很多應(yīng)用不需要可靠的連接,但需要快速的傳輸


57:請問交換機(jī)和路由器分別的實現(xiàn)原理是什么?分別在哪個層次上面實現(xiàn)的?
   交換機(jī)用在局域網(wǎng)中,交換機(jī)通過紀(jì)錄局域網(wǎng)內(nèi)各節(jié)點機(jī)器的MAC地質(zhì)(物理地址)就可以實現(xiàn)傳遞報文,無需看報文中的IP地質(zhì)。路由器識別不同網(wǎng)絡(luò)的方法是通過識別不同網(wǎng)絡(luò)的網(wǎng)絡(luò)ID號(IP地址的高端部分)進(jìn)行的,所以為了保證路由成功,每個網(wǎng)絡(luò)都必須有一個唯一的網(wǎng)絡(luò)編號。路由器通過察看報文中IP地址,來決定路徑,向那個子網(wǎng)(下一跳)路由,也就是說交換機(jī)工作在數(shù)據(jù)鏈路層看MAC地址,路由器工作在網(wǎng)際層看IP地質(zhì)
但是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交換機(jī)的功能有由路由器的功能(交換試路由器)使得兩者界限越來越模糊。

58:請問C++的類和C里面的struct有什么區(qū)別?

59:請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?

60:全局變量和局部變量有什么區(qū)別?實怎么實現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
   全局變量是整個程序都可訪問的變量,誰都可以訪問,生存期在整個程序從運行到結(jié)束(在程序結(jié)束時所占內(nèi)存釋放),而局部變量存在于模塊(子程序,函數(shù))中,只有所在模塊可以訪問,其他模塊不可直接訪問,模塊結(jié)束(函數(shù)調(diào)用完畢),局部變量消失,所占據(jù)的內(nèi)存釋放。
全局變量分配在全局?jǐn)?shù)據(jù)段并且在程序開始運行的時候被加載. 局部變量則分配在堆棧里面。


61:一些寄存器的題目,主要是尋址和內(nèi)存管理等一些知識。

 

2、交換機(jī)用在局域網(wǎng)中,交換機(jī)通過紀(jì)錄局域網(wǎng)內(nèi)各節(jié)點機(jī)器的MAC地質(zhì)(物理地址)就可以實現(xiàn)傳遞報文,無需看報文中的IP地質(zhì)。路由器識別不同網(wǎng)絡(luò)的方法是通過識別不同網(wǎng)絡(luò)的網(wǎng)絡(luò)ID號(IP地址的高端部分)進(jìn)行的,所以為了保證路由成功,每個網(wǎng)絡(luò)都必須有一個唯一的網(wǎng)絡(luò)編號。路由器通過察看報文中IP地址,來決定路徑,向那個子網(wǎng)(下一跳)路由,也就是說交換機(jī)工作在數(shù)據(jù)鏈路層看MAC地址,路由器工作在網(wǎng)際層看IP地質(zhì)
但是由于現(xiàn)在網(wǎng)絡(luò)設(shè)備的發(fā)展,很多設(shè)備既有交換機(jī)的功能有由路由器的功能(交換試路由器)使得兩者界限越來越模糊。
3、IP協(xié)議是網(wǎng)絡(luò)層的協(xié)議,它實現(xiàn)了Internet中自動路由的功能,即尋徑的功能,TCP協(xié)議是一個傳輸性的協(xié)議它向下屏蔽了IP協(xié)議不可靠傳輸?shù)奶匦?,向上提供一個可靠的點到點的傳輸,UDP提供的是一種無連接的服務(wù),主要考慮到很多應(yīng)用不需要可靠的連接,但需要快速的傳輸
4、
 Test b();//定義了一個函數(shù)


62:8086是多少位的系統(tǒng)?在數(shù)據(jù)總線上是怎么實現(xiàn)的?

<<IBM>>
63.怎樣用最快的方法判斷鏈表是否有環(huán)?

64.c++中引用和指針有什么不同?指針加上什么限制等于引用?
答:1 引用被創(chuàng)建的時候必須被初始化,而指針不是必需的。2 引用在創(chuàng)建后就不能改變引用的關(guān)系,而指針在初始化后可以隨時指向
其它的變量或?qū)ο蟆? 沒有NULL引用,引用必須與合法的存儲單元關(guān)聯(lián),而指針可以是NULL。

65.做的項目,遇到的困難,怎樣解決?

69.操作符重載
class CMyObject:pulic CObject
{
Public:
CMyObject();
CMyObject &operator=(const CMyObject &my);
private:
CString strName;
int nId:
};
請重載賦值操作符


70.鏈表
Struct structList
{
int value;
structList *pHead;
}
Struct LinkedList *pMyList;
請編寫刪除鏈表的頭、尾和第n個節(jié)點的程序


71.用Socket API制作一個聊天程序,通訊協(xié)議使用tcp/ip。要求有簡單界面即可,支持多人聊天。

72.如果有過工作經(jīng)驗,請說明在先前公司的工作以及離職原因(如無,請說明畢業(yè)后的個人展望)


***************************************************************************
73 對于C++中類(class) 與結(jié)構(gòu)(struct)的描述正確的為:
  A,類中的成員默認(rèn)是private的,當(dāng)是可以聲明為public,private 和protected,結(jié)構(gòu)中定義的成員默認(rèn)的都是public;
  B,結(jié)構(gòu)中不允許定義成員函數(shù),當(dāng)是類中可以定義成員函數(shù);
  C,結(jié)構(gòu)實例使用malloc() 動態(tài)創(chuàng)建,類對象使用new 操作符動態(tài)分配內(nèi)存;
  D,結(jié)構(gòu)和類對象都必須使用new 創(chuàng)建;
  E,結(jié)構(gòu)中不可以定義虛函數(shù),當(dāng)是類中可以定義虛函數(shù).
  F,結(jié)構(gòu)不可以存在繼承關(guān)系,當(dāng)是類可以存在繼承關(guān)系.
答:A,D,F

74,兩個互相獨立的類:ClassA 和 ClassB,都各自定義了非靜態(tài)的公有成員函數(shù) PublicFunc() 和非靜態(tài)的私有成員函數(shù) PrivateFunc();
   現(xiàn)在要在ClassA 中增加定義一個成員函數(shù)ClassA::AdditionalPunction(ClassA a,ClassB b);則可以在AdditionalPunction(ClassA x,ClassB y)的實現(xiàn)部分(函數(shù)功能體內(nèi)部)
    出現(xiàn)的合法的表達(dá)是最全的是:
    A,x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();
    B,x.PrivateFunc();x.PublicFunc();y.PublicFunc();
    C,x.PrivateFunc();y.PrivateFunc();y.PublicFunc();
    D,x.PublicFunc();y.PublicFunc();
答:B
75,C++程序下列說法正確的有:
  A,對調(diào)用的虛函數(shù)和模板類都進(jìn)行遲后編譯.
  B,基類與子類中函數(shù)如果要構(gòu)成虛函數(shù),除了要求在基類中用virtual 聲名,而且必須名字相同且參數(shù)類型相同返回類型相同
  C,重載的類成員函數(shù)都必須要:或者返回類型不同,或者參數(shù)數(shù)目不同,或者參數(shù)序列的類型不同.
  D,靜態(tài)成員函數(shù)和內(nèi)聯(lián)函數(shù)不能是虛函數(shù),友員函數(shù)和構(gòu)造函數(shù)也不能是虛函數(shù),但是析構(gòu)函數(shù)可以是虛函數(shù).
答:A
***************************************************************************


76,C++中的類與結(jié)構(gòu)的區(qū)別?

77,構(gòu)造函數(shù)和析構(gòu)函數(shù)是否可以被重載,為什么?
答:構(gòu)造函數(shù)可以被重載,析構(gòu)函數(shù)不可以被重載。因為構(gòu)造函數(shù)可以有多個且可以帶參數(shù),而析構(gòu)函數(shù)只能有一個,且不能帶參數(shù)。

78,一個類的構(gòu)造函數(shù)和析構(gòu)函數(shù)什么時候被調(diào)用,是否需要手工調(diào)用?
答:構(gòu)造函數(shù)在創(chuàng)建類對象的時候被自動調(diào)用,析構(gòu)函數(shù)在類對象生命期結(jié)束時,由系統(tǒng)自動調(diào)用。

1  #i nclude “filename.h”和#i nclude <filename.h>的區(qū)別?
答:#i nclude “filename.h”表明該文件是用戶提供的頭文件,查找該文件時從當(dāng)前文件目錄開始;#i nclude <filename.h>表明這個文件是一個工程或標(biāo)準(zhǔn)頭文件,查找過程會檢查預(yù)定義的目錄。

2  頭文件的作用是什么?
答:一、通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫功能,而不必關(guān)心接口怎么實現(xiàn)的。編譯器會從庫中提取相應(yīng)的代碼。
二、頭文件能加強(qiáng)類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調(diào)試、改錯的負(fù)擔(dān)。

3  C++函數(shù)中值的傳遞方式有哪幾種?
答:C++函數(shù)的三種傳遞方式為:值傳遞、指針傳遞和引用傳遞。

4  內(nèi)存的分配方式的分配方式有幾種?
答:一、從靜態(tài)存儲區(qū)域分配。內(nèi)存在程序編譯的時候就已經(jīng)分配好,這塊內(nèi)存在程序的整個運行期間都存在。例如全局變量。
二、在棧上創(chuàng)建。在執(zhí)行函數(shù)時,函數(shù)內(nèi)局部變量的存儲單元都可以在棧上創(chuàng)建,函數(shù)執(zhí)行結(jié)束時這些存儲單元自動被釋放。棧內(nèi)存分配運算內(nèi)置于處理器的指令集中,效率很高,但是分配的內(nèi)存容量有限。
三、從堆上分配,亦稱動態(tài)內(nèi)存分配。程序在運行的時候用malloc或new申請任意多少的內(nèi)存,程序員自己負(fù)責(zé)在何時用free或delete釋放內(nèi)存。動態(tài)內(nèi)存的生存期由我們決定,使用非常靈活,但問題也最多。

5  實現(xiàn)雙向鏈表刪除一個節(jié)點P,在節(jié)點P后插入一個節(jié)點,寫出這兩個函數(shù);
答:雙向鏈表刪除一個節(jié)點P
template<class type> void list<type>::delnode(int p)
{
 int k=1;
 listnode<type> *ptr,*t;
 ptr=first;

 while(ptr->next!=NULL&&k!=p)
 {
  ptr=ptr->next;
     k++;
 }
    t=ptr->next;
 cout<<"你已經(jīng)將數(shù)據(jù)項 "<<t->data<<"刪除"<<endl;
 
 ptr->next=ptr->next->next;
 length--;
 delete t;
}

在節(jié)點P后插入一個節(jié)點:
template<class type> bool list<type>::insert(type t,int p)
{
 listnode<type> *ptr;
 ptr=first;

 int k=1;
 while(ptr!=NULL&&k<p)
 {
  ptr=ptr->next;
  k++;
 }
 if(ptr==NULL&&k!=p)
  return false;
 else
 {
   listnode<type> *tp;
   tp=new listnode<type>;
   tp->data=t;
   tp->next=ptr->next;
   ptr->next=tp;
   length++;
  
   return true;
 }
}

//上海貝爾的面試題43分即可進(jìn)入復(fù)試
一、請?zhí)顚態(tài)OOL , float, 指針變量 與“零值”比較的 if 語句。(10分)
提示:這里“零值”可以是0, 0.0 , FALSE或者“空指針”。例如 int 變量 n 與“零值”比較的 if 語句為:
    if ( n == 0 )
    if ( n != 0 )
以此類推。
 請寫出 BOOL  flag 與“零值”比較的 if 語句:
請寫出 float  x 與“零值”比較的 if 語句:
請寫出 char  *p 與“零值”比較的 if 語句:
 二、以下為Windows NT下的32位C++程序,請計算sizeof的值(10分)
 char  str[] = “Hello” ;
char   *p = str ;
int     n = 10;
請計算
sizeof (str ) =                
sizeof ( p ) =               
sizeof ( n ) =void Func ( char str[100])
{
請計算
 sizeof( str ) =  
}
void *p = malloc( 100 );
請計算
sizeof ( p ) =
、簡答題(25分)
 1、頭文件中的 ifndef/define/endif 干什么用?
2、#i nclude  <filename.h>   和  #i nclude  “filename.h” 有什么區(qū)別?
3、const 有什么用途?(請至少說明兩種)
4、在C++ 程序中調(diào)用被 C編譯器編譯后的函數(shù),為什么要加 extern “C”聲明?
 5、請簡述以下兩個for循環(huán)的優(yōu)缺點
// 第一個
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}// 第二個
if (condition)
{
for (i=0; i<N; i++)
    DoSomething();
}
else
{
    for (i=0; i<N; i++)
    DoOtherthing();
優(yōu)點:N次中,每次都要對condition進(jìn)行判斷
 缺點: 優(yōu)點:一次判斷condition后,對something或Otherthing執(zhí)行N次
 缺點:
 
四、有關(guān)內(nèi)存的思考題(20分)
 
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
 
請問運行Test函數(shù)會有什么樣的結(jié)果?

char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
 
請問運行Test函數(shù)會有什么樣的結(jié)果?


Void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
請問運行Test函數(shù)會有什么樣的結(jié)果?

void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);   
if(str != NULL)
{
  strcpy(str, “world”);
printf(str);
}
}
請問運行Test函數(shù)會有什么樣的結(jié)果?


 
 五、編寫strcpy函數(shù)(10分)
已知strcpy函數(shù)的原型是
char *strcpy(char *strDest, const char *strSrc);
其中strDest是目的字符串,strSrc是源字符串。
 
(1)不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù) strcpy
char *strcpy(char *strDest,const char *strSrc){
          int n=0;
          while(strSrc[n]!=NULL){
               n++:
          }
          *srtDest=new char[n];
          for(int i=0;i<n;i++) {
    strDest=strSrc[i];
              i++;
}
return *strDest;
}      
(2)strcpy能把strSrc的內(nèi)容復(fù)制到strDest,為什么還要char * 類型的返回值?
      因為該函數(shù)的還可以把復(fù)制的字符串首地址指針給其他的指針,而且這種需要也是有用的。
六、編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)
已知類String的原型為:
class String
{
  public:
String(const char *str = NULL);// 普通構(gòu)造函數(shù)
String(const String &other);    // 拷貝構(gòu)造函數(shù)
~ String(void);    // 析構(gòu)函數(shù)
String & operate =(const String &other);// 賦值函數(shù)
  private:
char  *m_data;// 用于保存字符串
};
請編寫String的上述4個函數(shù)。


//答案一并給出
一、請?zhí)顚態(tài)OOL , float, 指針變量 與“零值”比較的 if 語句。(10分)
 
請寫出 BOOL  flag 與“零值”比較的 if 語句。(3分)
標(biāo)準(zhǔn)答案:
    if ( flag )
    if ( !flag )如下寫法均屬不良風(fēng)格,不得分。
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE) 
    if (flag == 0)
請寫出 float  x 與“零值”比較的 if 語句。(4分)
標(biāo)準(zhǔn)答案示例:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可將浮點變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”此類形式。
   
如下是錯誤的寫法,不得分。
if (x == 0.0)
if (x != 0.0)

請寫出 char  *p 與“零值”比較的 if 語句。(3分)
標(biāo)準(zhǔn)答案:
    if (p == NULL)
    if (p != NULL)如下寫法均屬不良風(fēng)格,不得分。
if (p == 0)
if (p != 0)
if (p) 
    if (!)
 
二、以下為Windows NT下的32位C++程序,請計算sizeof的值(10分)
 
char  str[] = “Hello” ;
char   *p = str ;
int     n = 10;
請計算
sizeof (str ) =  6   (2分)
        
sizeof ( p ) =   4   (2分)
         
sizeof ( n ) =   4   (2分)void Func ( char str[100])
{
請計算
 sizeof( str ) =   4     (2分)
}
 
void *p = malloc( 100 );
請計算
sizeof ( p ) =  4      (2分)
 
 
三、簡答題(25分)
 
1、頭文件中的 ifndef/define/endif 干什么用?(5分)
答:防止該頭文件被重復(fù)引用。
 
2、#i nclude  <filename.h>   和  #i nclude  “filename.h” 有什么區(qū)別?(5分)
答:對于#i nclude  <filename.h> ,編譯器從標(biāo)準(zhǔn)庫路徑開始搜索 filename.h
    對于#i nclude  “filename.h” ,編譯器從用戶的工作路徑開始搜索 filename.h
 
3、const 有什么用途?(請至少說明兩種)(5分)
答:(1)可以定義 const 常量
(2)const可以修飾函數(shù)的參數(shù)、返回值,甚至函數(shù)的定義體。被const修飾的東西都受到強(qiáng)制保護(hù),可以預(yù)防意外的變動,能提高程序的健壯性。
 
4、在C++ 程序中調(diào)用被 C編譯器編譯后的函數(shù),為什么要加 extern “C”? (5分)
答:C++語言支持函數(shù)重載,C語言不支持函數(shù)重載。函數(shù)被C++編譯后在庫中的名字與C語言的不同。假設(shè)某個函數(shù)的原型為: void foo(int x, int y);
該函數(shù)被C編譯器編譯后在庫中的名字為_foo,而C++編譯器則會產(chǎn)生像_foo_int_int之類的名字。
C++提供了C連接交換指定符號extern“C”來解決名字匹配問題。
       
5、請簡述以下兩個for循環(huán)的優(yōu)缺點(5分)
 
for (i=0; i<N; i++)
{
if (condition)
    DoSomething();
else
    DoOtherthing();
}if (condition)
{
for (i=0; i<N; i++)
    DoSomething();
}
else
{
    for (i=0; i<N; i++)
    DoOtherthing();
}
優(yōu)點:程序簡潔
 
缺點:多執(zhí)行了N-1次邏輯判斷,并且打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)進(jìn)行優(yōu)化處理,降低了效率。優(yōu)點:循環(huán)的效率高
 
缺點:程序不簡潔
 
 
 
四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)
 
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
 
請問運行Test函數(shù)會有什么樣的結(jié)果?
答:程序崩潰。
因為GetMemory并不能傳遞動態(tài)內(nèi)存,
Test函數(shù)中的 str一直都是 NULL。
strcpy(str, "hello world");將使程序崩潰。
 char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
 
請問運行Test函數(shù)會有什么樣的結(jié)果?
答:可能是亂碼。
因為GetMemory返回的是指向“棧內(nèi)存”的指針,該指針的地址不是 NULL,但其原現(xiàn)的內(nèi)容已經(jīng)被清除,新內(nèi)容不可知。
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
請問運行Test函數(shù)會有什么樣的結(jié)果?
答:
(1)能夠輸出hello
(2)內(nèi)存泄漏
 
 void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);   
if(str != NULL)
{
  strcpy(str, “world”);
printf(str);
}
}
請問運行Test函數(shù)會有什么樣的結(jié)果?
答:篡改動態(tài)內(nèi)存區(qū)的內(nèi)容,后果難以預(yù)料,非常危險。
因為free(str);之后,str成為野指針,
if(str != NULL)語句不起作用。
 


27 費波那其數(shù)列,1,1,2,3,5……編寫程序求第十項。可以用遞歸,也可以用其他方法,但要說明你選擇的理由。
-------------------------------------------------------------------------------------

#i nclude <stdio.h>
#i nclude <cstdlib>

int Pheponatch(int);
int Pheponatch2(int);

int main()

{
   printf("The 10th is %d",Pheponatch2(20));
   system("pause");
   return 0;
}

//遞歸算法
int Pheponatch(int N)
{
    if( N == 1 || N == 2)
    {
        return 1;
    }   
    else
        return Pheponatch( N -1 ) + Pheponatch( N -2 );
}

//非遞歸算法
int Pheponatch2(int N)
{
    int x = 1, y = 1, temp;
    int i = 2;
    while(true)
    {
        temp = y;
        y = x + y;
        x = temp;
        i++;
        if( i == N )
        break;
    }   
    return y;
}


25.完成下列程序

*

*.*.

*..*..*..

*...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*.......

#i nclude <stdio.h>

#define N 8

int main()

{

   int i;

   int j;

   int k;

   ---------------------------------------------------------

   |                                     |

   |                                     |

   |                                     |

   ---------------------------------------------------------

   return 0;

}


#i nclude <stdio.h>
#i nclude <iostream.h>

#define N 8

int main()

{
   int i;
   int j;
   int k;

   for(i=N; i>=1; i--)
   {
   for(j=0; j<N-i+1; j++)
   {
   cout<<"*";
       for(k=1; k<N-i+1; k++)
   cout<<".";
   }
   cout<<"\n";
   }

   return 0;
}

"28 下列程序運行時會崩潰,請找出錯誤并改正,并且說明原因。"
// void append(int N) ;
//指針沒有初始化:
//NewNode->left=NULL;
//NewNode->right=NULL;

#i nclude <stdio.h>

#i nclude <malloc.h>

typedef struct TNode{

TNode* left;

TNode* right;

int value;

} TNode;

TNode* root=NULL;

void append(int N);

int main()

{

append(63);

append(45);

append(32);

append(77);

append(96);

append(21);

append(17); // Again, 數(shù)字任意給出
return 0;

}

void append(int N)

{

TNode* NewNode=(TNode *)malloc(sizeof(TNode));

NewNode->value=N;

NewNode->left=NULL;
NewNode->right=NULL;

if(root==NULL)

{

root=NewNode;

return;

}

else

{

TNode* temp;

temp=root;

while((N>=temp->value && temp->left!=NULL) || (N<temp->value && temp->right!=NULL))

{

while(N>=temp->value && temp->left!=NULL)

temp=temp->left;

while(N<temp->value && temp->right!=NULL)

temp=temp->right;

}

if(N>=temp->value)

temp->left=NewNode;

else

temp->right=NewNode;

return;       

}

}


算法:
1.什么是NPC,NP-Hard?
2.起泡排序的時間復(fù)雜度是多少?
說出至少一個比它更快的算法;
排序的極限時間復(fù)雜度是多少?
3.有一個鏈表,如何判斷它是一個循環(huán)鏈表?
如果鏈表是單向的呢?
如果出現(xiàn)循環(huán)的點可能在任意位置呢?
如果緩存空間是有限的,比如是一個常數(shù)呢?
如果只能使用2個緩存呢?
4.有一個文件,保存了若干個整數(shù),如何以平均的概率隨機(jī)得到其中的一個整數(shù)?
如果整數(shù)的個數(shù)是未知的呢?
如果整數(shù)是以字符串形式存放,如:(即如何得到隨機(jī)的一個字符串)
123<enter>
-456<enter>

如果只允許便歷文件一次呢?
5.用兩組數(shù)據(jù),都在內(nèi)存中,對它們排序分別需要1和2分鐘;那么使用兩個線程一起排序,大概需要多少時間?

C/C++:
1.C與C++的異同,優(yōu)劣;
2.C,C++,VC,BC,TC的區(qū)別;
3.C++中try…catch關(guān)鍵字的用法與優(yōu)點;
4.枚舉的用法,以及它與宏的區(qū)別;
5.const的用法,以及聲明const變量與宏的區(qū)別;
   const的用法有四種:
   區(qū)別:const常量有數(shù)據(jù)類型, 而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進(jìn)行類型安全檢查,而對后者只能進(jìn)行字符替換,沒有類型
   安全檢查。而且字符替換可能會帶來料想不到的邊界效應(yīng)。
   有些集成化工具可以對const常量進(jìn)行調(diào)試, 但不能對宏量進(jìn)行調(diào)試。
6.C++中引用與指針的區(qū)別;
     答:1 引用實際上是所引用的對象或變量的別名,而指針是包含所指向?qū)ο蠡蜃兞康牡刂返淖兞俊?br>            2 引用在定義時必須初始化,而指針在定義時不初始化。
            3 不可以有努NULL的引用,而可以有指向NULL的指針。
            4 引用在初始化后不可以改變引用關(guān)系,而指針可以隨時指向其他對象(非const指針)。
7.C++中virtual與inline的含義分別是什么?
   答:在基類成員函數(shù)的聲明前加上virtual關(guān)鍵字,意味著將該成員函數(shù)聲明為虛函數(shù)。
       inline與函數(shù)的定義體放在一起,使該函數(shù)稱為內(nèi)聯(lián)。inline是一種用于實現(xiàn)的關(guān)鍵字,而不是用于聲明的關(guān)鍵字。
虛函數(shù)的特點;如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態(tài)聯(lián)編。
內(nèi)聯(lián)函數(shù)的特點;使用內(nèi)聯(lián)函數(shù)的目的是為了提高函數(shù)的運行效率。內(nèi)聯(lián)函數(shù)體的代碼不能過長,因為內(nèi)聯(lián)函數(shù)省去調(diào)用函數(shù)
的時間是以代碼膨脹為代價的。內(nèi)聯(lián)函數(shù)不能包含循環(huán)語句,因為執(zhí)行循環(huán)語句要比調(diào)用函數(shù)的開銷大。
一個函數(shù)能否即是虛函數(shù)又是內(nèi)聯(lián)函數(shù)?
8.以下關(guān)鍵字的含義與用法:
extern,extern “C”,static,explicit,register,#undef,#ifndef
9.什么是函數(shù)重載與覆蓋?
為什么C不支持函數(shù)重載?
為什么C++能支持函數(shù)重載?
10.VC中,編譯工具條內(nèi)的Debug與Release選項是什么含義?
11.編寫my_memcpy函數(shù),實現(xiàn)與庫函數(shù)memcpy類似的功能,不能使用任何庫函數(shù);
   void* mymemcpy(void* pvTo, const char* pvFrom, size_t size)
   {
      assert((dest != NULL) && (src != NULL));
      byte* psTo = (byte*)pvTo;
      byte* psFrom = (byte*)pvFrom;
      while (size-- > 0)
      {
         *psTo++ = *psFrom++;
      }
      return pvTo;
   }
12.編寫my_strcpy函數(shù),實現(xiàn)與庫函數(shù)strcpy類似的功能,不能使用任何庫函數(shù);
   答:char* my_strcpy(char* strdest, const char* strsrc)
          {
              assert(strdest != NULL) && (strsrc != NULL))
              char* address = strdest;
              while((*strdest++ = *strsrc++) != NULL)
               return address;
           }
             
13.編寫gbk_strlen函數(shù),計算含有漢字的字符串的長度,漢字作為一個字符處理;
已知:漢字編碼為雙字節(jié),其中首字節(jié)<0,尾字節(jié)在0~63以外;(如果一個字節(jié)是-128~127)
14.函數(shù)assert的用法?
答:斷言assert是僅在debug版本起作用的宏,用于檢查“不應(yīng)該“發(fā)生的情況。程序員可以把a(bǔ)ssert看成一個
在任何系統(tǒng)狀態(tài)下都可以安全使用的無害測試手段。
15.為什么在頭文件的最前面都會看到這樣的代碼:
#ifndef _STDIO_H_
#define _STDIO_H_
16.為什么數(shù)組名作為參數(shù),會改變數(shù)組的內(nèi)容,而其它類型如int卻不會改變變量的值?
答:當(dāng)數(shù)組名作為參數(shù)時,傳遞的實際上是地址。而其他類型如int作為參數(shù)時,由于函數(shù)參數(shù)值實質(zhì)上是實參的一份拷貝,被調(diào)
函數(shù)內(nèi)部對形參的改變并不影響實參的值。
1.實現(xiàn)雙向鏈表刪除一個節(jié)點P,在節(jié)點P后插入一個節(jié)點,寫出這兩個函數(shù)。
  2.寫一個函數(shù),將其中的\t都轉(zhuǎn)換成4個空格。
  3.Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程。
  4.如何定義和實現(xiàn)一個類的成員函數(shù)為回調(diào)函數(shù)?
  5.C++里面是不是所有的動作都是main()引起的?如果不是,請舉例。
  6.C++里面如何聲明const void f(void)函數(shù)為C程序中的庫函數(shù)?
  7.下列哪兩個是等同的
  int b;
  A const int* a = &b;
  B const* int a = &b;
  C const int* const a = &b;
  D int const* const a = &b;
  8.內(nèi)聯(lián)函數(shù)在編譯時是否做參數(shù)類型檢查?
  void g(base & b){
   b.play;
  }
  void main(){
   son s;
   g(s);
   return;
  }
3、WinMain
     while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    {
        if (bRet == -1)
        {
            // handle the error and possibly exit
        }
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }


MSRA Interview Written Exam(December 2003,Time:2.5 Hours)


1寫出下列算法的時間復(fù)雜度。
(1)冒泡排序;
(2)選擇排序;
(3)插入排序;
(4)快速排序;
(5)堆排序;
(6)歸并排序;

2寫出下列程序在X86上的運行結(jié)果。

struct mybitfields
{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
}test

void main(void) 
{
int i;
test.a=2;
test.b=3;
test.c=0;

i=*((short *)&test);
printf("%d\n",i);
}

3寫出下列程序的運行結(jié)果。

unsigned int i=3;
cout<<i * -1;

4寫出下列程序所有可能的運行結(jié)果。

int a;
int b;
int c;

void F1()
{
b=a*2;
a=b;
}

void F2()
{
c=a+1;
a=c;
}

main()
{
a=5;
//Start F1,F2 in parallel
F1(); F2();
printf("a=%d\n",a);
}

5考察了一個CharPrev()函數(shù)的作用。

6對 16 Bits colors的處理,要求:
(1)Byte轉(zhuǎn)換為RGB時,保留高5、6bits;
(2)RGB轉(zhuǎn)換為Byte時,第2、3位置零。

7一個鏈表的操作,注意代碼的健壯和安全性。要求:
(1)增加一個元素;
(2)獲得頭元素;
(3)彈出頭元素(獲得值并刪除)。

8一個給定的數(shù)值由左邊開始升位到右邊第N位,如
0010<<1 == 0100
或者
0001 0011<<4 == 0011 0000
請用C或者C++或者其他X86上能運行的程序?qū)崿F(xiàn)。

附加題(只有在完成以上題目后,才獲準(zhǔn)回答)
In C++, what does "explicit" mean? what does "protected" mean?

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美午夜视频免费观看| a久久天堂国产毛片精品| 青青操成人免费在线视频| 亚洲国产性感美女视频| 一区二区三区四区亚洲专区| 激情五月综五月综合网| 欧美精品中文字幕亚洲| 欧美大胆美女a级视频| 免费黄色一区二区三区| 日韩一区欧美二区国产| 国产一区欧美一区二区| 日韩欧美一区二区久久婷婷| 日韩人妻精品免费一区二区三区| 婷婷激情四射在线观看视频| 日本精品视频一二三区| 中文字幕一区二区熟女| 伊人久久五月天综合网| 青草草在线视频免费视频| 欧美激情中文字幕综合八区| 五月综合婷婷在线伊人| 一区二区三区四区亚洲专区| 国产精品白丝久久av| 青青操视频在线观看国产| 亚洲丁香婷婷久久一区| 欧美激情区一区二区三区| 91亚洲国产日韩在线| 精产国品一二三区麻豆| 精品国产亚洲一区二区三区| 青青操视频在线观看国产| 激情视频在线视频在线视频| 亚洲成人精品免费在线观看| 国产欧美亚洲精品自拍| 中文字字幕在线中文乱码二区| 很黄很污在线免费观看| 熟女一区二区三区国产| 久久99爱爱视频视频| 沐浴偷拍一区二区视频| 人妻一区二区三区多毛女| 国产精品日本女优在线观看| 亚洲精品中文字幕无限乱码| 欧美特色特黄一级大黄片|