某重工企业笔试题目合集(附答案)

时间:2023-02-01 14:38:26

由于涉及到机密问题,就不指明是什么公司了,总之很大的了,看看吧,挺基础也挺实用的

 

 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 ;}