• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            asm, c, c++ are my all
            -- Core In Computer
            posts - 139,  comments - 123,  trackbacks - 0

            [轉(zhuǎn)]某些公司的筆試題

            1.想想結(jié)果是如何出來的:
            ?int main()??
            {
            ?? unsigned?? char?? i=1;??
            ?? i-=3;??
            ?? printf("the?? value?? of?? i?? is:%d",i);??
            }??
            結(jié)果:the?? value?? of?? i?? is:254
            答案:

            ??? 0000?? 0001??
            -?? 0000?? 0011??
            ------------------??
            ??? 1111?? 1110???????? 而???? 1111?? 1110?????? 化為十制進(jìn)正好是254!?

            2.看看下列的程序有什么問題
            void GetMemory(char *p)
            {
            p = (char *)malloc(100);
            }
            void Test(void)
            {
            char *str = NULL;
            GetMemory(str);
            strcpy(str, "hello world");
            printf(str);
            }
            請(qǐng)問運(yùn)行Test函數(shù)會(huì)有什么樣的結(jié)果?為什么?
            答案:1.內(nèi)存泄漏 2.str仍然是空指針
            3.
            int n = 10;
            為什么sizeof ( n ) = 4?
            ?答案:sizeof(x)返回x的類型占用的字節(jié)數(shù),該機(jī)器是在32位下
            4.請(qǐng)問C++的類和C里面的struct有什么區(qū)別?
            5.請(qǐng)講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用?
            6.全局變量和局部變量有什么區(qū)別?是怎么實(shí)現(xiàn)的?
            7.設(shè)計(jì)函數(shù) int atoi(char *s)。
            8.int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?
            9.解釋局部變量、全局變量和靜態(tài)變量的含義
            10.解釋堆和棧的區(qū)別。
            11.論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。
            12.實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫出這兩個(gè)函數(shù)。
            13.寫一個(gè)函數(shù),將其中的 都轉(zhuǎn)換成4個(gè)空格。
            14.Windows程序的入口是哪里?寫出Windows消息機(jī)制的流程。
            15.如何定義和實(shí)現(xiàn)一個(gè)類的成員函數(shù)為回調(diào)函數(shù)?
            16.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請(qǐng)舉例。
            17.C++里面如何聲明const void f(void)函數(shù)為C程序中的庫函數(shù)?
            18.下列哪兩個(gè)是等同的
              int b;
              A const int* a = &b;
              B const* int a = &b;
              C const int* const a = &b;
              D int const* const a = &b;
            19.內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類型檢查?
              void g(base & b)
            ????? {
               b.play;
              }
              void main()
            ????? {
               son s;
            ??????????? g(s);

            ??????????? return;

            }
            20.請(qǐng)你分別劃劃OSI的七層網(wǎng)絡(luò)結(jié)構(gòu)圖,和TCP/IP的五層結(jié)構(gòu)圖?
            21.請(qǐng)你詳細(xì)的解釋一下IP協(xié)議的定義,在哪個(gè)層上面,主要有什么作用? TCP與UDP呢?
            22.請(qǐng)問交換機(jī)和路由器分別的實(shí)現(xiàn)原理是什么?分別在哪個(gè)層次上面實(shí)現(xiàn)的? 

            頭文件中<>? 和“”的區(qū)別?

            4、定義一個(gè)宏,輸入兩個(gè)參數(shù),輸出積。


            1. 以下三條輸出語句分別輸出什么?[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; // 輸出什么?

            答:分別輸出false,false,true。str1和str2都是字符數(shù)組,每個(gè)都有其自己的存儲(chǔ)區(qū),它們的值則是各存儲(chǔ)區(qū)首地址,不等;str3 和str4同上,只是按const語義,它們所指向的數(shù)據(jù)區(qū)不能修改。str5和str6并非數(shù)組而是字符指針,并不分配存儲(chǔ)區(qū),其后的“abc”以常量形式存于靜態(tài)數(shù)據(jù)區(qū),而它們自己僅是指向該區(qū)首地址的指針,相等。


            12. 以下代碼中的兩個(gè)sizeof用法有問題嗎?[C易]
            void UpperCase( char str[] ) // 將 str 中的小寫字母轉(zhuǎn)換成大寫字母
            {
            for( size_t i=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;

            答:函數(shù)內(nèi)的sizeof有問題。根據(jù)語法,sizeof如用于數(shù)組,只能測出靜態(tài)數(shù)組的大小,無法檢測動(dòng)態(tài)分配的或外部數(shù)組大小。函數(shù)外的str是一個(gè)靜態(tài)定義的數(shù)組,因此其大小為6,函數(shù)內(nèi)的str實(shí)際只是一個(gè)指向字符串的指針,沒有任何額外的與數(shù)組相關(guān)的信息,因此sizeof作用于上只將其當(dāng)指針看,一個(gè)指針為4個(gè)字節(jié),因此返回4。


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


            4. 以下代碼有什么問題?[C++易]
            struct Test
            {
            Test( int ) {}
            Test() {}
            void fun() {}
            };
            void main( void )
            {
            Test a(1);
            a.fun();
            Test b();
            b.fun();
            }

            答:變量b定義出錯(cuò)。按默認(rèn)構(gòu)造函數(shù)定義對(duì)象,不需要加括號(hào)。


            5. 以下代碼有什么問題?[C++易]
            cout << (true?1:"1") << endl;
            答:三元表達(dá)式“?:”問號(hào)后面的兩個(gè)操作數(shù)必須為同一類型。


            8. 以下代碼能夠編譯通過嗎,為什么?[C++易]
            unsigned int const size1 = 2;
            char str1[ size1 ];
            unsigned int temp = 0;
            cin >> temp;
            unsigned int const size2 = temp;
            char str2[ size2 ];
            答:str2定義出錯(cuò),size2非編譯器期間常量,而數(shù)組定義要求長度必須為編譯期常量。


            2. 以下反向遍歷array數(shù)組的方法有什么錯(cuò)誤?[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;
            }

            答:首先數(shù)組定義有誤,應(yīng)加上類型參數(shù):vector array。其次vector::size_type被定義為unsigned int,即無符號(hào)數(shù),這樣做為循環(huán)變量的i為0時(shí)再減1就會(huì)變成最大的整數(shù),導(dǎo)致循環(huán)失去控制。


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

            答:不能。在默認(rèn)構(gòu)造函數(shù)內(nèi)部再調(diào)用帶參的構(gòu)造函數(shù)屬用戶行為而非編譯器行為,亦即僅執(zhí)行函數(shù)調(diào)用,而不會(huì)執(zhí)行其后的初始化表達(dá)式。只有在生成對(duì)象時(shí),初始化表達(dá)式才會(huì)隨相應(yīng)的構(gòu)造函數(shù)一起調(diào)用。[/color]

            [color=#DC143C]10. 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& ); // 賦值運(yùn)算符
            Empty* operator&(); // 取址運(yùn)算符
            const Empty* operator&() const; // 取址運(yùn)算符 const
            };[/color]


            [color=#DC143C]3. 以下兩條輸出語句分別輸出什么?[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; // 輸出什么?
            答:分別輸出false和true。注意轉(zhuǎn)換的應(yīng)用。(int)a實(shí)際上是以浮點(diǎn)數(shù)a為參數(shù)構(gòu)造了一個(gè)整型數(shù),該整數(shù)的值是1,(int&)a則是告訴編譯器將a當(dāng)作整數(shù)看(并沒有做任何實(shí)質(zhì)上的轉(zhuǎn)換)。因?yàn)?以整數(shù)形式存放和以浮點(diǎn)形式存放其內(nèi)存數(shù)據(jù)是不一樣的,因此兩者不等。對(duì)b的兩種轉(zhuǎn)換意義同上,但是0的整數(shù)形式和浮點(diǎn)形式其內(nèi)存數(shù)據(jù)是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數(shù)值意義上)。
            注意,程序的輸出會(huì)顯示(int&)a=1065353216,這個(gè)值是怎么來的呢?前面已經(jīng)說了,1以浮點(diǎn)數(shù)形式存放在內(nèi)存中,按 ieee754規(guī)定,其內(nèi)容為0x0000803F(已考慮字節(jié)反序)。這也就是a這個(gè)變量所占據(jù)的內(nèi)存單元的值。當(dāng)(int&)a出現(xiàn)時(shí),它相當(dāng)于告訴它的上下文:“把這塊地址當(dāng)做整數(shù)看待!不要管它原來是什么。”這樣,內(nèi)容0x0000803F按整數(shù)解釋,其值正好就是1065353216 (十進(jìn)制數(shù))。
            通過查看匯編代碼可以證實(shí)“(int)a相當(dāng)于重新構(gòu)造了一個(gè)值等于a的整型數(shù)”之說,而(int&)的作用則僅僅是表達(dá)了一個(gè)類型信息,意義在于為cout<<及==選擇正確的重載版本。
            [/color]

            6. 以下代碼有什么問題?[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 );
            }

            答:同樣有缺少類型參數(shù)的問題。另外,每次調(diào)用“array.erase( itor );”,被刪除元素之后的內(nèi)容會(huì)自動(dòng)往前移,導(dǎo)致迭代漏項(xiàng),應(yīng)在刪除一項(xiàng)后使itor--,使之從已經(jīng)前移的下一個(gè)元素起繼續(xù)遍歷。

            [color=#DC143C]11. 寫一個(gè)函數(shù),完成內(nèi)存之間的拷貝。[考慮問題是否全面]
            答:
            void* mymemcpy( void *dest, const void *src, size_t count )
            {
            char* pdest = static_cast( dest );
            const char* psrc = static_cast( src );
            if( pdest>psrc && pdest
            {
            for( size_t i=count-1; i!=-1; --i )
            pdest[i] = psrc[i];
            }
            else
            {
            for( size_t i=0; i
            pdest[i] = psrc[i];
            }
            return dest;
            }[/color] 

            ?

            原題如下:
            #i nclude
            struct bit
            {
            int a:3;
            int b:2;
            int c:3;
            };

            int main(int argc, char* argv[])
            {
            bit s;
            char *c = (char*)&s;
            *c = 0x99;
            cout <<<<<<
            return 0;
            }

            Output:?

            答案:
            此題在在X86 little-endian 下是 1 -1 -4
            在powerPC等big endian機(jī)器下,還要重新考慮

            因?yàn)?x99在內(nèi)存中表示為 100 11 001 , a = 001, b = 11, c = 100
            當(dāng)c為有符號(hào)數(shù)時(shí), c = 100, 最高位1表示c為負(fù)數(shù),負(fù)數(shù)在計(jì)算機(jī)用補(bǔ)碼表示,所以c = -4;同理
            b = -1;當(dāng)c為有符合數(shù)時(shí), c = 100,即 c = 4,同理 b = 3

            位域的概念

            有些信息在存儲(chǔ)時(shí),并不需要占用一個(gè)完整的字節(jié), 而只需占幾個(gè)或一個(gè)二進(jìn)制位。例如在存放一個(gè)開關(guān)量時(shí),只有0和1 兩種狀態(tài),用一位二進(jìn)位即可。為了節(jié)省存儲(chǔ)空間,并使處理簡便,C語言又提供了一種數(shù)據(jù)結(jié)構(gòu),稱為“位域”或“位段”。所謂“位域”是把一個(gè)字節(jié)中的二進(jìn)位劃分為幾個(gè)不同的區(qū)域, 并說明每個(gè)區(qū)域的位數(shù)。每個(gè)域有一個(gè)域名,允許在程序中按域名進(jìn)行操作。這樣就可以把幾個(gè)不同的對(duì)象用一個(gè)字節(jié)的二進(jìn)制位域來表示。一、位域的定義和位域變量的說明位域定義與結(jié)構(gòu)定義相仿,其形式為:
            struct 位域結(jié)構(gòu)名
            { 位域列表 };
            其中位域列表的形式為: 類型說明符 位域名:位域長度
            例如:
            struct bs
            {
            int a:8;
            int b:2;
            int c:6;
            };
            位域變量的說明與結(jié)構(gòu)變量說明的方式相同。 可采用先定義后說明,同時(shí)定義說明或者直接說明這三種方式。例如:
            struct bs
            {
            int a:8;
            int b:2;
            int c:6;
            }data;
            說明data為bs變量,共占兩個(gè)字節(jié)。其中位域a占8位,位域b占2位,位域c占6位。對(duì)于位域的定義尚有以下幾點(diǎn)說明:

            1. 一個(gè)位域必須存儲(chǔ)在同一個(gè)字節(jié)中,不能跨兩個(gè)字節(jié)。如一個(gè)字節(jié)所剩空間不夠存放另一位域時(shí),應(yīng)從下一單元起存放該位域。也可以有意使某位域從下一單元開始。例如:
            struct bs
            {
            unsigned a:4
            unsigned :0 /*空域*/
            unsigned b:4 /*從下一單元開始存放*/
            unsigned c:4
            }
            在這個(gè)位域定義中,a占第一字節(jié)的4位,后4位填0表示不使用,b從第二字節(jié)開始,占用4位,c占用4位。

            2. 由于位域不允許跨兩個(gè)字節(jié),因此位域的長度不能大于一個(gè)字節(jié)的長度,也就是說不能超過8位二進(jìn)位。

            3. 位域可以無位域名,這時(shí)它只用來作填充或調(diào)整位置。無名的位域是不能使用的。例如:
            struct k
            {
            int a:1
            int :2 /*該2位不能使用*/
            int b:3
            int c:2
            };
            從以上分析可以看出,位域在本質(zhì)上就是一種結(jié)構(gòu)類型, 不過其成員是按二進(jìn)位分配的。

            二、位域的使用位域的使用和結(jié)構(gòu)成員的使用相同,其一般形式為: 位域變量名·位域名 位域允許用各種格式輸出。
            main(){
            struct bs
            {
            unsigned a:1;
            unsigned b:3;
            unsigned c:4;
            } bit,*pbit;

            pbit = new bs;

            bit.a=1;
            bit.b=7;
            bit.c=15;

            pbit->a = 1;
            pbit->b = 2;
            pbit->c = 3;

            printf("%d, %d, %d",bit.a, bit.b, bit.c);
            printf("%d, %d, %d",pbit->a, pbit->b, pbit->c);
            }

            ?

            一、 單項(xiàng)選擇題(從四個(gè)備選答案中選擇一個(gè)正確答案,每小題1分,共20分)
            1. C++中,關(guān)鍵字struct和class的區(qū)別僅僅在于( C )。

            (A)struct 用來定義結(jié)構(gòu)體, 而class用來定義類;

              (B)struct 用來定義類, 而class用來定義類結(jié)構(gòu)體;

            (C)struct定義的類的缺省成員為公有的,而class定義的類的缺省成員為私有的;

            (D)struct定義的類的成員須全部為公有的,而class定義的類的成員可以為私有的;

            2. 以下程序執(zhí)行后,輸出結(jié)果為( C ).

            #i nclude

            int Var=3 ;

            void main(void)

            { int Var=10;

            ::Var++;

            cout<<”Var=”<<<”, ::Var=”<<::Var<

            }

            (A)Var=11, ::Var=11 (B)Var=11, ::Var=3

            (C)Var=10, ::Var=4 (D)Var=4, ::Var=10

            3. 抽象基類是指( C )。

            (A)嵌套類      (B)派生類

              (C)含有純虛函數(shù) (D)多繼承類

            4.如果有#define AREA(a,b)a+b 則語句int s=AREA(3,4)*AREA(3,4)執(zhí)行后變量s值為( D )。

            (A) 24 (B)49 (C)144 (D)19

            5. C++中條件表達(dá)式的值為( C )。

            (A)–1或者+1  (B)–231~231 –1 (C)0或者1 (D) 0~231–1

            6. 現(xiàn)在有以下語句:

            struct MyBitType

            { int a:3;

            unsigned b:3;

            unsigned c:20;

            int d;

            };

            int sz=sizeof(MyBitType);

            則執(zhí)行后,變量sz的值將得到( B )。

            (A)2  (B)8 (C)28 (D)58

            7. 假設(shè)有一個(gè)C++類名為Country, 則此類的析構(gòu)函數(shù)為( C ).

            (A)::Country() (B)void ~Country(void)

            (C)~Country() (D)void ~Country()

            8. 如果定義一個(gè)C++類CDate, 語句“CDate *p = new CDate;”的含義是( A )。

            (A)調(diào)用CDate類的缺省構(gòu)造函數(shù)從內(nèi)存中分配一個(gè)CDate類型的對(duì)象,并將該對(duì)象地址賦值給指針p;

              (B)調(diào)用CDate類的拷貝構(gòu)造函數(shù)從內(nèi)存中分配一個(gè)CDate類型的對(duì)象,并將該對(duì)象地址賦值給指針p;

            (C)調(diào)用CDate類的析構(gòu)函數(shù)從內(nèi)存中分配一個(gè)CDate類型的對(duì)象,并將該對(duì)象地址賦值給指針p;

            (D)從內(nèi)存中釋放指針p所指向的CDate類的對(duì)象;

            9.如果有一個(gè)類CRect及語句“CRect x1, x2;” 要使語句 “x1=x2;”合法,可在類中定義成員函數(shù)( C )。

             (A) int operator(x2)        (B)int operator=(x2)

            (C) void operator=(CRect &); (D) void operator=()

            10. 結(jié)構(gòu)體變量S實(shí)際所占內(nèi)存的大小為( A )字節(jié)。

            (A)sizeof(S)         (B)strlen(S)

            (C)結(jié)構(gòu)體中最長成員的長度 (D)結(jié)構(gòu)體中最短成員的長度

            11.在C++中,下列算符( D )不能重載。

            (A)<<  (B)>> (C)delete (D)::

            12.下列正確的是( D )

            (A)結(jié)構(gòu)不能有構(gòu)造函數(shù)、析構(gòu)函數(shù); (B)缺省時(shí)類的成員是公有的;

            (C)類中如果定義了析構(gòu)函數(shù),則必須定義構(gòu)造函數(shù);

            (D)缺省時(shí)結(jié)構(gòu)的成員是公有的;

            13. 下列關(guān)于靜態(tài)數(shù)據(jù)成員正確的是( B )

            (A)可以通過this指針訪問靜態(tài)數(shù)據(jù); (B)可以用類名和作用域訪問靜態(tài)數(shù)據(jù);

            (C)靜態(tài)數(shù)據(jù)在類內(nèi)聲明并初始化; (D)只能由該類的靜態(tài)成員函數(shù)訪問;

            14. 下列關(guān)于友元正確的說法是(  D )

            (A)友元只能在類的public區(qū)聲明;(B)友元具有this指針;

            (C)類的成員函數(shù)不能聲明為另一個(gè)類的友元;

            (D)一個(gè)函數(shù)如果被聲明為一個(gè)類的友元,則該函數(shù)具有訪問該類私有成員的權(quán)利。

            15. 基類的( A )在派生類內(nèi)不能被訪問。

            (A)私有成員 (B)保護(hù)成員

            (C)公有數(shù)據(jù)成員 (D)公有靜態(tài)數(shù)據(jù)成員

            16. 下列關(guān)于運(yùn)算符重載的描述中正確的是( D )

            (A)運(yùn)算符重載可以改變?cè)撨\(yùn)算符的優(yōu)先級(jí);

              (B)運(yùn)算符重載可以改變?cè)撨\(yùn)算符目數(shù),即該算符運(yùn)算的操作數(shù)個(gè)數(shù);

            (C)運(yùn)算符重載函數(shù)只能在類中定義;

            (D)new和delete允許重載;

            17.左值是指( A )

            (A)賦值算符左邊的變量;   (B)賦值算符左邊的表達(dá)式的值;

            (D)出現(xiàn)在賦值算符右邊的表達(dá)式的值;

            (E)二元算符左邊表達(dá)式的值;

            18. 下列為純虛函數(shù)的正確聲明的是( B )

            (A)void virtual print()=0;   (B)virtual void print()=0;

            (C)virtual void print(){ }; (D)virtual void print();

            19. 如果在類對(duì)象a的類中重載運(yùn)算符“+”,則a+5的顯示調(diào)用方式為( C )

            (A)a.operator(5)   (B)a->operator+(5);

            (C)a.operator+(5) (D)5.operator+(a)

            20.一個(gè)類如果有一個(gè)以上的基類就叫做( B )。                 

            (A)循環(huán)繼承    (B)單繼承

            (C)非法繼承 (D)多繼承

            二、 多項(xiàng)選擇題(從五個(gè)備選答案中選擇2~5個(gè)正確答案,每小題2分,共10分)
            1. 如果已定義了一個(gè)C++類CMyList并有以下語句:

            CMyList list(3);

            以下說法正確的是( AC )。

             (A)該語句會(huì)創(chuàng)建一個(gè)CMyList類的一個(gè)對(duì)象;

             (B)該語句會(huì)創(chuàng)建一個(gè)CMyList類的3個(gè)對(duì)象;

             (C)必須為類CMyList定義一個(gè)構(gòu)造函數(shù);

            (D)必須為類CMyList定義一個(gè)析構(gòu)函數(shù);

            (E) 必須定義函數(shù)CMyList list(int);

            2. 以下說法正確的是( ABCDE )。

            (A)內(nèi)聯(lián)(inline)函數(shù)改善了函數(shù)調(diào)用的執(zhí)行效率。

              (B)類A的友元(friend)函數(shù)可以訪問類A的私有成員。

            (C)類A的友元(friend)類B可以訪問類A的私有成員。

            (D)類A的靜態(tài)數(shù)據(jù)成員為類A的所有對(duì)象所共享。

            (E)類A的靜態(tài)成員函數(shù)沒有傳遞this 指針作為參數(shù)。

            3.類B從類A派生,則類B可以訪問類A中的( AC )成員。

            (A)public成員 (B)private成員 (C)protected成員

            (D)數(shù)據(jù)成員   (E)函數(shù)成員

            4. 面向?qū)ο蟮某绦蛟O(shè)計(jì)語言具有( ABE )等共同特性。

            (A)封裝性 (B)多態(tài)性 (C)簡單性 (D)復(fù)雜性

            (E)繼承性

            5. 現(xiàn)有一個(gè)程序如下:

            #i nclude

            class A

            { public:

            void f(){ cout<< "A::f()"<

            };

            class B

            { public:

            void f(){ cout<< "B:f()"<

            void g(){ cout<< "B:g()"<

            };

            class C:public A, public B

            { public:

            void g(){ cout<<"C::g()"<

            void h()

            { cout<<"C::h()"<

            f(); //語句1

            }

            };

            void main()

            { C obj;

            obj.f();    //語句2

            obj.A::f(); //語句3

            obj.B::f(); //語句4

            obj.g();   //語句5

            }

            則編譯時(shí)會(huì)產(chǎn)生錯(cuò)誤的語句有( AB )。

            (A)語句1     (B)語句2   (C)語句3

            (D)語句4    (E)語句5

            三、 判斷分析題(正確的畫上√,錯(cuò)誤的畫上×,每小題1分,共10分)
            1.如果一個(gè)類的所有對(duì)象都共享某一個(gè)變量,則應(yīng)當(dāng)將該變量定義為該類的static成員。 ( √ )

            2.語句“ typedef struct _MYSTRUC { int x; int y; double z; } MYSTRUC; ”是非法語句。 ( × )

            3.語句“ int (*p)(int x, int y);”說明了p是一個(gè)指向整數(shù)的指針。 ( × )

            4.Visual C++集成開發(fā)環(huán)境中,一個(gè)Workspace中只能創(chuàng)建一個(gè)Project。 ( × )

            5.能訪問一個(gè)類CMyClass中的private成員的可以是類CMyClass的成員函數(shù),友元函數(shù)和友元類中的函數(shù)。 ( √ )

            6. 所有的MFC應(yīng)用程序都必須有一個(gè)且只有一個(gè)CWinApp對(duì)象。 ( √ )

            7.C++中的多態(tài)性就是指在編譯時(shí),編譯器對(duì)同一個(gè)函數(shù)調(diào)用,根據(jù)情況調(diào)用不同的實(shí)現(xiàn)代碼。 ( × )

            8.在for循環(huán)中,是先執(zhí)行循環(huán)體后再判斷循環(huán)條件。 ( × )

            9.C++中,如果條件表達(dá)式值為-1, 則表示邏輯為假。 ( × )

            10. 在C++中用new分配的內(nèi)存空間,在不需要時(shí)一般用free將該空間釋放。 ( × )

            四、 填空題(每空2分,共20分)
            1.以下函數(shù)完成求表達(dá)式 的值,請(qǐng)?zhí)羁帐怪瓿纱斯δ堋?

            float sum( float x )

            { float s=0.0;

            int sign=1;

            float t=1.0;

            for(int i=1; i<=100; i++)

            {

            t=t*x;

            s=s+-sign*i/(t+sign*i);

            sign=-sign;

            }

            return s;

            }

            2.以下程序中實(shí)現(xiàn)類CSort, 完成對(duì)其成員p所指向的整數(shù)數(shù)組進(jìn)行從小到大排序,該數(shù)組的元素個(gè)數(shù)由num表示,請(qǐng)?zhí)羁胀晟圃摮绦颉?

            #i nclude

            class CSort

            {

            int *p;

            int num;

            public:

            void Order();

            CSort(int *, int);

            void Disp();

            };

            CSort::CSort(int *arry, int n)

            :p(arry), num(n)

            { }

            void CSort::Order() //函數(shù)Order原型

            { int m, tmp;

            for(int i=0; i

            { m=i;

            for(int j=i+1; j

            { if(p[j]

            m=j;

            }

            if(m!=i)

            { tmp=p[i];

            p[i]=p[m];

            p[m]=tmp;

            }

            }

            }

            void CSort::Disp()

            { for(int i=0; i

            cout<<<",";

            cout<<

            }

            void main( )

            { static int a[]={10, -15, -3, 5, -4, 7,2};

            CSort obj(a,2);

            obj.Disp(); //應(yīng)輸出一行:10,-15,-3,5,-4,7,2

            obj.Order(); //對(duì)數(shù)組排序

            obj.Disp(); //應(yīng)輸出一行:-15,-4,-3,2,5,7,10

            }

            3.以下函數(shù)完成求兩個(gè)數(shù)n1和n2的最大公約數(shù)。

            #i nclude

            int fac(int n1, int n2)

            { int tmp;

            if( n1 < n2 )

            { tmp=n1;

            n1=n2 ;

            n2=tmp ;

            }

            while(n1%n2!=0)

            { tmp=n1%n2; n1=n2; n2=tmp;

            }

            return n2;

            }


            2005年華為招聘--C語言筆試試題

            ?

            一、判斷題(對(duì)的寫T,錯(cuò)的寫F并說明原因,每小題4分,共20分)

            1、有數(shù)組定義int a[2][2]={{1},{2,3}};則a[0][1]的值為0。(???? )

            2、int (*ptr) (),則ptr是一維數(shù)組的名字。(???? )

            3、指針在任何情況下都可進(jìn)行>,<,>=,<=,==運(yùn)算。(???? )

            4、switch(c) 語句中c可以是int ,long,char ,float ,unsigned int 類型。(?? )

            5、#define print(x)? printf("the no, "#x",is ")

            ?

            二、填空題(共30分)

            1、在windows下,寫出運(yùn)行結(jié)果,每空2分,共10分。

            char str[ ]= "Hello";

            char *p=str;

            int n=10;

            sizeof(str)=(????? )

            sizeof(p)=(?????? )

            sizeof(n)=(?????? )

            void func(char str[100])

            {??? }

            sizeof(str)=(???? )

            ?

            2、void setmemory(char **p, int num)

            { *p=(char *) malloc(num);}

            void test(void)

            {? char *str=NULL;

            ?? getmemory(&str,100);

            ?? strcpy(str,"hello");

            ?? printf(str);

            }

            運(yùn)行test函數(shù)有什么結(jié)果?(??????????????????????????????? )10分

            ?

            3、設(shè)int arr[]={6,7,8,9,10};

            ???? int *ptr=arr;

            ?? *(ptr++)+=123;

            ?printf("%d,%d",*ptr,*(++ptr));

            (?????????????????????????????????? ) 10分

            ?

            二、編程題(第一小題20,第二小題30分)

            1、? 不使用庫函數(shù),編寫函數(shù)int strcmp(char? *source, char *dest)

            相等返回0,不等返回-1;


            ?

            2、? 寫一函數(shù)int fun(char *p)判斷一字符串是否為回文,是返回1,不是返回0,出錯(cuò)返回-1

            ?

            五、 閱讀程序題(每個(gè)小題5分,共20分)
            1.閱讀以下程序,概括地寫出程序的功能。

            #i nclude

            double Exp(double x)

            { double sum=1.0;

            double term=x;

            double i=1 ;

            while (term>=1.0E-8)

            { sum+=term ;

            i++;

            term=term*x/i ;

            }

            return sum ;

            }

            void main()

            { double s;

            s=Exp(1.0)+Exp(2.0);

            cout.precision(8);

            cout<<"s="<<

            }


            zz

            2. 閱讀程序,寫出程序執(zhí)行時(shí)輸出結(jié)果。

            #i nclude

            const int SIZE=10;

            class stack

            { char stck[SIZE];

            int top;

            public:

            void init();

            void push(char ch);

            char pop();

            };

            void stack::init()

            { top=0; }

            void stack::push(char ch)

            { if(top==SIZE)

             { cout<<"Stack is full.\n";

            return ;

             }

            stck[top++]=ch;

            }

            char stack::pop()

            { if(top==0)

               { cout<<"Stack is empty.\n";

               return 0;

            }

            return stck[--top];

            }

            void main()

            { stack s1, s2;

             s1.init();

             s2.init();

             s1.push('a');

             s1.push('b');

             s1.push('c');

             s2.push('x');

             s2.push('y');

             s2.push('z');

             for(int i=0; i<3; i++)

            cout<<"Pop s1:"<<

             for(i=0; i<3; i++)

            cout<<"Pop s2:"<<

            }

            程序結(jié)果:

            Pop s1: c

            Pop s1: b

            Pop s1: a

            Pop s2: z

            Pop s2: y

            Pop s2: z

            3.閱讀程序,寫出程序運(yùn)行時(shí)輸出結(jié)果。

            #i nclude

            class Tdate

            { public:

            Tdate();

            Tdate(int d);

            Tdate(int m, int d);

            Tdate(int m, int d, int y);

            protected:

            int month;

            int day;

            int year;

            };

            Tdate::Tdate()

            { month=4;

               day=15;

               year=1995;

            cout<<<"/" <<<"/" <<

            }

            Tdate::Tdate(int d)

            { month=4;

               day=d;

               year=1996;

            cout<<<"/" <<<"/" <<

            }

            Tdate::Tdate(int m, int d)

            { month=m;

               day=d;

               year=1997;

            cout<<<"/" <<<"/" <<

            }

            Tdate::Tdate(int m, int d, int y)

            { month=m;

               day=d;

               year=y;

            cout<<<"/" <<<"/" <<

            }

            void main()

            { Tdate aday;

            Tdate bday(10);

            Tdate cday(2,12);

            Tdate dday(1,2,1998);

            }

            運(yùn)行結(jié)果:

            4/15/1995

            4/10/1996

            2/12/1997

            1/2/1998

            4.閱讀程序,寫出程序運(yùn)行時(shí)輸出結(jié)果。

            #i nclude

            #i nclude

            class shape

            { public:

            shape(double x, double y):xCoord(x), yCoord(y){}

            virtual double Area()const {return 0.0; }

            protected:

            double xCoord, yCoord;

            };

            class AA :public shape

            { public:

            AA(double x, double y, double r): shape(x,y), rad(r){}

            virtual double Area()const { return 3.0 * rad * rad; }

            protected:

            double rad;

            };

            class BB :public shape

            { public:

            BB(double x1, double y1, double x2, double y2)

            :shape(x1, y1), x2Coord(x2), y2Coord(y2){ }

            virtual double Area()const;

            protected:

            double x2Coord, y2Coord;

            };

            double BB:Area()const

            { return fabs((xCoord-x2Coord)* (yCoord - y2Coord));

            //庫函數(shù)fabs(double t)求得t的絕對(duì)值

            }

            void fun(const shape& sp)

            { cout<<

            }

            void main()

            { AA aa(2.0, 5.0, 4.0);

            fun(aa);

            BB bb(2.0, 8.0, 12.0, 17.0);

            fun(bb);

            }

            運(yùn)行結(jié)果:

            48

            30

            六、 編寫程序題(每小題10分,共20分)
            1.編寫一個(gè)函數(shù)int Judge(int *pArray, int n),判斷一個(gè)n×n二維整數(shù)數(shù)組pArray 是否為“魔方陣”,若是返回1,否則返回0。所謂魔方陣就是將1到n2的各個(gè)數(shù)字組成的方陣,它的每一行、每一列以及兩個(gè)對(duì)角線上數(shù)字之和均相等。例如,3×3的中,A是魔方陣,而B不是魔方陣。然后在主程序中調(diào)用Judge函數(shù)判斷數(shù)組A是否為魔方陣。

            參考程序

            #i nclude

            int Judge(int *pArray, int n)

            { int s1, s2, s3,s4,sum=0;

            int *p=pArray;

            for(int i=1; i<= n*n; i++)

            { int Found=0; //為0,不在方陣中;

            for(int j=0; j

            if(p[j]==i)

            { Found=1; //為1,在方陣中

            break;

            }

            if(Found==0) return 0; // 值為 i 的元素不在數(shù)組中,顯然不是魔方陣

            }

            for( i=1; i<=n*n; i++)

            sum=sum+i;

            sum=sum / n; // 各行、各列、對(duì)角線元素應(yīng)當(dāng)?shù)玫降暮?

            s3=0;

            s4=0;

            for( i=0; i

            { s1=0, s2=0;

            p=pArray;

            for(int j=0; j

            { s1=s1+p[i*n+j]; //第i行的元素和

             s2=s2+p[j*n+i]; //第i列的元素和

            }

            if ( s1!=sum)

            return 0;

            if ( s2!=sum)

            return 0;

            s3=s3+pArray[i*n+i];     // 對(duì)角線一元素和

            s4=s4+pArray[i*n+(n-1-i)]; // 對(duì)角線二元素和

            }

            if(s3!=sum)

            return 0;

            if(s4 != sum)

            return 0;

            return 1;

            }

            void main()

            { int Array[3][3]={{ 8, 1, 6},{ 3, 5, 7},{ 4, 9, 2}};


            當(dāng) x 輸入值為9999時(shí),函數(shù)返回值為多少?
            int fun ( unsigned int x )
            {
            int count = 0;
            while(x)
            {
            x = x & (x-1);
            count++;
            }
            return count;
            }

            答案:此函數(shù)是在計(jì)算 x 中含有1的個(gè)數(shù),所以返回值為8。

            if(Judge((int*)Array, 3))

            cout<<"Yes, it's a magic array"<

            else

            cout<<"No, it isn't a magic array"<

            }


            /*********************************
            * 兩個(gè)超大數(shù)相乘算法
            *********************************/

            #i nclude
            void main()
            {
            int a[30],b[30],c[60];
            int i,j;

            /* 給乘數(shù)和被乘數(shù)賦值,并把結(jié)果賦零 */
            for (i=0;i<30;i++)
            {
            a[i]=i%10;
            b[i]=i%10;
            c[2*i]=0;
            c[2*i+1]=0;
            }

            /* 給每位結(jié)果賦值,這里應(yīng)該考慮清楚為什么這么寫
            還有這里的位的值的最大限度應(yīng)該是-128 -- +127
            所以就算是10*10也可以滿足存進(jìn)去一個(gè)char類型里 */
            for(i=0;i<30;i++)
            for(j=0;j<30;j++)
            c[i+j]+=a[i]*b[j];
            /* 這里把每個(gè)位>10的數(shù)進(jìn)位和把余數(shù)重新賦值給這一位 */
            for(i=0;i<59;i++)
            {
            c[i+1]+=c[i]/10;
            c[i]=c[i]%10;
            }

            /* 打印出來 */
            for(i=0;i<30;i++)
            printf("%d",a[30-i-1]);

            printf("\n");

            for(i=0;i<30;i++)
            printf("%d",b[30-i-1]);

            printf("\n");

            for(i=0;i<60;i++)
            printf("%d",c[60-i-1]);

            printf("\n");

            }

            posted on 2006-06-15 06:54 Jerry Cat 閱讀(1017) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理



            <2006年4月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            常用鏈接

            留言簿(7)

            隨筆檔案

            最新隨筆

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            一极黄色视频久久网站| 久久精品亚洲中文字幕无码麻豆 | 久久综合亚洲色一区二区三区| 久久婷婷五月综合成人D啪| 亚洲AV无码一区东京热久久| 欧美日韩中文字幕久久久不卡 | 中文字幕日本人妻久久久免费 | 久久久一本精品99久久精品66| 国产99久久久久久免费看| 亚洲人成网站999久久久综合| 国产精品美女久久久m| 色综合久久中文字幕综合网| 久久se精品一区精品二区| 久久久www免费人成精品| 国产精品久久久久乳精品爆| 亚洲精品乱码久久久久久自慰| 久久久久人妻精品一区三寸蜜桃| 午夜精品久久久久久久久| 久久乐国产精品亚洲综合| 久久精品国产亚洲麻豆| 久久国产精品无码HDAV| 亚洲国产美女精品久久久久∴| 色婷婷噜噜久久国产精品12p| 亚洲国产精品久久久久婷婷老年 | 色综合久久久久综合99| 精品久久久久久国产免费了| 久久婷婷成人综合色综合| 伊人久久综合成人网| 久久亚洲精品无码VA大香大香| 久久人人爽人人精品视频| 99久久精品国产一区二区三区| 国产产无码乱码精品久久鸭| 亚洲综合精品香蕉久久网| 狠狠色噜噜色狠狠狠综合久久| 久久婷婷国产剧情内射白浆| 久久亚洲精品成人无码网站| 久久只有这精品99| 性色欲网站人妻丰满中文久久不卡| 亚洲国产成人精品91久久久| 天天综合久久一二三区| 亚洲精品WWW久久久久久|