天天看點

C語言面試題目

1、請填寫 bool , float,  指針變量  與“零值”比較的 if  語句。

    提示:這裡“零值”可以是 0, 0.0 , false 或者“空指針” 。例如 int  變量 n  與“零值”比較的 if  語句為: 

    if ( n == 0 ) 

    if ( n != 0 ) 

    以此類推。 

(1)請寫出 bool  flag  與“零值”比較的 if  語句:

    【标準答案】if ( flag )    if ( !flag )

(2)請寫出 float  x  與“零值”比較的 if  語句:

     【标準答案】 const float epsinon = 0.00001;                           if ((x >= - epsinon) && (x <= epsinon)                  不可将浮點變量用“==”或“!=”與數字比較,應該設法轉化成“>=”或“<=”此類形式。 

(3)請寫出 char  *p  與“零值”比較的 if  語句

   【标準答案】 if (p == null)    if (p != null) 

2、以下為 linux下的 32 位 c程式,請計算  sizeof 的值。                                                                                         

char  str[] = “hello” ;                                                   

char   *p = str ;                                                          

  int     n = 10;                                                                 

請計算                                                      

    (1)sizeof (str ) = 

    (2)sizeof ( p ) = 

    (3)sizeof ( n ) =

【标準答案】(1)6、(2)4、(3)4

   (4)void func ( char str[100])                                            

 {                                                                                                            

……    ;                                                                    

      }                                                                                                                 

請計算 sizeof( str ) =                                                                                       

(5)void *p = malloc( 100 );                     

請計算sizeof ( p ) = 

【标準答案】(4)4、(5)4

3、 long a=0x801010; a+5=?

   【标準答案】0x801010用二進制表示為:“1000 0000 0001 0000 0001 0000”,十進制的值為8392720,再加上5就是8392725。

4、 寫一個函數找出一個整數數組中,第二大的數。

5、設有以下說明和定義: typedef union {long i; int k[5]; char c;} date; struct data { int cat; date cow; double dog;} too; date max; 則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:_____

  【标準答案】date是一個union, 變量公用空間. 裡面最大的變量類型是int[5], 占用20個位元組. 是以它的大小是20 data是一個struct, 每個變量分開占用空間. 依次為int4 + date20 + double8 = 32. 是以結果是 20 + 32 = 52.

6、請問以下代碼有什麼問題: int main() { char a; char *str=&a; strcpy(str,"hello"); printf(str); return 0; }

  【标準答案】沒有為str配置設定記憶體空間,将會發生異常 問題出在将一個字元串複制進一個字元變量指針所指位址。雖然可以正确輸出結果,但因為越界進行内在讀寫而導緻程式崩潰。

7、請問以下代碼有什麼問題:                                 char* s="aaa"; printf("%s",s); s[0]='b'; printf("%s",s); 有什麼錯?

  【标準答案】"aaa"是字元串常量。s是指針,指向這個字元串常量,是以聲明s的時候就有問題。 cosnt char* s="aaa"; 然後又因為是常量,是以對是s[0]的指派操作是不合法的。

8、 寫出下面的結果

char str1[] = "abc";

char str2[] = "abc";

const char str3[] = "abc";

const char str4[] = "abc";

const char *str5 = "abc";

const char *str6 = "abc";

char *str7 = "abc"; char *str8 = "abc";

cout << ( str1 == str2 ) << endl; cout << ( str3 == str4 ) << endl; cout << ( str5 == str6 ) << endl; cout << ( str7 == str8 ) << endl;

9、 c和c++中的struct有什麼不同?

  【标準答案】c和c++中struct的主要差別是c中的struct不可以含有成員函數,而c++中的struct可以。

10、 寫出輸出結果

int main()

{

int a[5]={1,2,3,4,5};

int *ptr=(int *)(&a+1);

printf("%d,%d",*(a+1),*(ptr-1));

}

11、 char szstr[10]; strcpy(szstr,"0123456789"); 産生什麼結果?為什麼?

  【标準答案】長度不一樣,出現段錯誤。

12、 

int a=248; b=4;int const c=21;const int *d=&a;

int *const e=&b;int const *f const =&a;

請問下清單達式哪些會被編譯器禁止?為什麼?

13、 void main() { char aa[10]; printf(“%d”,strlen(aa)); }                                                                                                      會出現什麼問題?列印結果是是多少?

  【标準答案】sizeof()和初不初始化,沒有關系,strlen()和初始化有關,列印結果值未知。

14、給定結構struct  a { char t:4; char k:4; unsigned short i:8; unsigned long m; };問sizeof(a) = ?

  【标準答案】8

15、 struct name1{ char str; short x; int num; };求sizeof(name1)?

【标準答案】8

16、 struct name2{ char str; int num; short x; };求sizeof(name2)?

【标準答案】12

17、程式哪裡有錯誤

  wap( int* p1,int* p2 )

  {

          int *p;

         *p = *p1;

         *p1 = *p2;

         *p2 = *p;

  }

 【标準答案】p為野指針

18、什麼是預編譯,何時需要預編譯?

 預編譯又稱為預處理,是做些代碼文本的替換工作。處理#開頭的 指令,比如拷貝#include 包含的檔案代碼,#define 宏定義的替換,條件 編譯等,就是為編譯做的預備工作的階段,主要處理#開始的預編譯 指令,預編譯指令訓示了在程式正式編譯前就由編譯器進行的操作, 可以放在程式中的任何位置。

c 編譯系統在對程式進行通常的編譯之前,先進行預處理。c 提供的 預處理功能主要有以下三種:1)宏定義 2)檔案包含 3)條件編 譯

19、 (void *)ptr 和 (*(void**))ptr的結果是否相同?其中ptr為同一個指針。

  【标準答案】(void *)ptr 和 (*(void**))ptr值是相同的

20、要對絕對位址0x100000指派,我們可以用 (unsigned int*)0x100000 = 1234; 那麼要是想讓程式跳轉到絕對位址是0x100000去執行,應該怎麼做?

  【标準答案】*((void (*)( ))0x100000 ) ( ); 首先要将0x100000強制轉換成函數指針,即: (void (*)())0x100000 然後再調用它: *((void (*)())0x100000)();

21、 int a,b,c 請寫函數實作c=a+b ,不可以改變資料類型,如将c改為long int,關鍵是如何處理溢出問題

  【标準答案】                                                                                     bool add (int a, int b,int *c) { *c=a+b; return (a>0 && b>0 &&(*c<a || *c<b) || (a<0 && b<0&&(*c>a || *c>b))); }

c++

繼續閱讀