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

本文精选了一系列C++面试题目及解答,涵盖了头文件保护、内存管理、数据结构、网络编程等多个方面,帮助读者深入理解C++编程语言的核心知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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


 


 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值