由于涉及到机密问题,就不指明是什么公司了,总之很大的了,看看吧,挺基础也挺实用的
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)的功能是;将非空字符串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 ;}