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