由於涉及到機密問題,就不指明是什麼公司了,總之很大的了,看看吧,挺基礎也挺實用的
1、 .h標頭檔中的 #ifndef/#define/#endif 的作用?
答:防止該標頭檔被重複引用。
2、 #define DOUBLE(x) x+x
int i = 5*DOUBLE(5);
i 的值為
答:為30
3、 設某32位系統下,C++程式,有以下說明和定義:
typedef union {int i; int k[5]; char c;} DATE;struct data { char cat; DATE cow; int dog;} too;
則語句 printf("%d",sizeof(too)); 的執行結果是:______
答:為28
4、 某些場合中需要用到死迴圈,這兩個死迴圈 for(;;) 與 while(1) 哪個代碼更高效(編譯之後的代碼更簡短)?
答:for(;;)
5、 高度為8的平衡二叉樹,至少有______個節點?
答:54個
6、 某32位系統下,C++程式,請計算sizeof 的值
char str[] = "www.ibegroup.com" ;char *p = str ;請計算sizeof (str ) = __ ①___sizeof ( p ) = ___②___void Foo ( char str[100]){請計算sizeof( str ) = ___③___}void *p = malloc( 100 );請計算sizeof ( p ) = ___④___
答:①17 ②4 ③4 ④4
7、 winsock建立TCP串連的主要實現步驟?
答:伺服器端:socket()建立通訊端,綁定(bind)並監聽(listen),用accept()
等待用戶端串連;發現有用戶端串連時,建立一個新的通訊端,自身重新開始等待串連;該新產生的通訊端使用send()和recv()寫讀資料,直至資料交換完畢,調用closesocket()關閉通訊端。
用戶端:socket()建立通訊端,串連(connect)伺服器,串連上後使用send()和recv()在通訊端上寫讀資料,直至資料交換完畢,調用closesocket()關閉通訊端。
8、 回答下面的問題
(1). 請問運行 Test 函數會有什麼樣的結果?
void GetMemory(char **p, int num){*p = (char *)malloc(num);}void Test(void){char *str = NULL;GetMemory(&str, 100);strcpy(str, "hello");printf(str);}
答:輸出 hello
(2). 請問運行 Test 函數會有什麼樣的結果?
char *GetMemory(void){char p[] = "hello world";return p;}void Test(void){char *str = NULL;str = GetMemory();printf(str);}
答:無效的指標,輸出不確定
10、有如下函數
int func(int x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; }
問:func(9999) 的傳回值為______
答:8
11、閱讀函數說明和C函數,將C函數補充完整。
[函數1說明]
函數palindrome(chars[])的功能是:判斷字串s是否為迴文字串,若是,則返回0,否則返回-1。若一個字串順讀和倒讀都一樣時,稱該字串是迴文字串,例如:“LEVEL”是迴文字串,而“LEVAL”不是。
[函數1]int palindrome(char s[]){ char *pi, *pj;pi=s; pj=s+strlen(s)-1;while( pi<pj && ( ① )){pi++; pj--;}if( ② )return -1;else return 0;}[函數2說明] 函數f(char *str,char del)的功能是;將非Null 字元串str分割成若干個子字串並輸出,del表示分割時的標誌字元。 例如若str的值為“33123333435”,del的值為‘3’,調用此函數後,將輸出三個子字串,分別為“12”、“4”和“5”。[函數2]void f(char*str, char del){ int i,j,len;len = strlen(str);i = 0;while(i<len){while( ③ ) i++; /*忽略連續的標誌字元*//*尋找從str[i]開始直到標誌字元出現的一個子字串*/j = i + 1;while(str[j] !=del && str[j] !='\0') j++; ④ = '\0'; /*給找到的字元序列置字串結束標誌*/printf("%s\t",&str[i]); ⑤ ;}}
答:①*pi == *pj ②pi<pj 或 *pi != *pj
③str[i] == del ④str[j] ⑤i = j+1
12、用C/C++實現函數void swap(float *a,float *b),要求:①外部調用該函數能交換兩個float變數的值;②函數swap內部不能使用第三個變數。
答:void swap(float *a,float *b){*a=*a + *b;*b=*a - *b;*a=*a - *b;}
13、一個鏈表的結點結構如下:
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;
已知鏈表的頭結點head,寫一個函數Node * ReverseList(Node *head),要求:把這個鏈表逆序。
答:Node * ReverseList(Node *head){if ( head == NULL || head->next == NULL )return head;Node *p1 = head ;Node *p2 = p1->next ;Node *p3 = p2->next ;p1->next = NULL ;while ( p3 != NULL ){p2->next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3->next ;}p2->next = p1 ;head = p2 ;return head ;}