C++练习题


1.写出64位系统环境下,以下数据类型所占字节数
char 1 1 1
char* 4 8 8
int 4 4 4
double 4 8 8
long 8 4 8
long long 8 8 8
unsigned long 8 4 8
err win lin

2.改错
如下程序能不能正确输出,如果不能,让它正确输出hello字符串。
void New(char *p)
{
p = new char[5];
}

void main()
{
char *p = NULL;
New§;
strcpy(p,”hello”);
printf(“%s\n”,p);
}

*p => char *p or char &p
5最好改为6

3.按要求编写程序
已知strcpy的函数原型:char* strcpy(char *strDest, const char *strSrc)其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写函数strcpy。

char* my_strcpy(char *strDest, const char *strSrc)
{
if (strSrc == NULL)
return NULL;
char *src = strSrc;
char *dest = strDest;
while ((*dest++ = *src++) != NULL)
{
//此处空循环
};

return strDest;

}

void test01()
{
char src[15] = “hello world”;
char buf[20] = “111111111111111111”;
my_strcpy(buf, src);

printf("%s\n", buf);

return;

}
4.按要求编写程序
一个链表的结点结构如下:
struct Node
{
int data;
Node* next;
};
已知两个有序链表(从大到小排序)head1和head2,请把他们合并成一个有序链表(保留所有节点,即便大小相同)。

struct Node
{
int data;
struct Node* next;
};

int Merge(struct Node **buf, struct Node *head1, struct Node *head2)
{
head1 = head1->next;
head2 = head2->next;

struct Node *tail = *buf;

while (head1 != NULL && head2 != NULL)
{
	if (head1->data > head2->data)
	{
		tail->next = head1;
		head1 = head1->next;
		tail = tail->next;
	}
	else
	{
		tail->next = head2;
		head2 = head2->next;
		tail = tail->next;
	}
}

if (head1 != NULL)
{
	while (head1 != NULL)
	{
		tail->next = head1;
		head1 = head1->next;
		tail = tail->next;
	}
}
else
{
	while (head2 != NULL)
	{
		tail->next = head2;
		head2 = head2->next;
		tail = tail->next;
	}
}

tail->next = NULL;

return 0;

}

void insert_list(struct Node *head, int data)
{
for (; head->next != NULL; head = head->next);//空循环
struct Node *temp = malloc(sizeof(struct Node));
temp->data = data;
temp->next = NULL;
head->next = temp;
return;
}

void print_list(struct Node *head)
{
printf("+++++++++++++++++++++++++\n");
for (head = head->next; head != NULL; head = head->next)
{
printf("%d\n", head->data);
}
}

void test02()
{
struct Node *head1 = malloc(sizeof(struct Node));
memset(head1, 0x00, sizeof(*head1));

insert_list(head1, 98);
insert_list(head1, 78);
insert_list(head1, 58);
insert_list(head1, 38);
insert_list(head1, 18);
insert_list(head1, 8);

print_list(head1);

struct Node *head2 = malloc(sizeof(struct Node));
memset(head2, 0x00, sizeof(*head2));

insert_list(head2, 98);
insert_list(head2, 88);
insert_list(head2, 68);
insert_list(head2, 38);
insert_list(head2, 18);
insert_list(head2, 18);

print_list(head2);

struct Node *buf = malloc(sizeof(struct Node));
Merge(&buf, head1, head2);
print_list(buf);

}

5.简述TCP,UDP,HTTP的区别?
TCP 面向连接的流式协议, 更安全,丢包自动重发, 数据包顺序到达, 但是效率略低;
UDP 为无连接的报式协议, 不够安全, 但是效率比较高;
HTTP 协议相比TCP 和 UDP协议, 更加注重文本的解释而不是传输;

6.分配给某校园地址块是202.105.192.0/18,该校园网包含多少个C类地址网络?

7.请简述通过哪几种方式可以提高服务器程序应对网络高并发请求的能力?

8.简述虚函数与纯虚函数的区别,与多态的关系?


1.DC是什么?如何理解客户区和非客户区?

2.Heap与stack的差别?

3.SendMessage、PostMessage的区别。FindWindow、EnumWindow的区别?

4.Varchar和char类型比较

5.Sql语言中,删除一个表的命令式(B)
A.delete B.drop C.clear D.remove


1.如何理解松耦合,高聚合?

2.设计模式相关
场景描述:
一个购票系统,购票完成后会产生多个不同的逻辑,如:
购票后记录文本日志;
购票后记录数据库日志;
购票后发送短信提醒;
购票后送抵扣券、兑换券、积分等;
其他各类活动等;
问题描述:
购票后逻辑可能会增加,如增加购票后发送取票验证码;
可能会经常对原有购票后逻辑进行修改;
要求:
请根据以上场景描述,设计程序结构(可用类图或简单的代码实现)用于以后对程序的维护和修改的目的


1.运行下面的C++代码,输出什么?
#include

struct Point3D
{
int x;
int y;
int z;
};

int main(int argc, char* argv[])
{
Point3D *pPoint = NULL;
int offset = (int)(&(pPoint)->z);
printf(“%d”,offset);
return 0;
}

8

2.编码实现对Type类型的递增有序数组进行二分查找,数组大小不超过int的最大值。(不允许使用递归,查找不到返回-1)
函数原型为:
template
Int BinarySearch(Type a[], const Type& x, int n)

template
int BinarySearch(Type a[], const Type& x, int n)
{
if (n < 1)
return 0;
int start = 0;
int end = n - 1;
int mid = 0;
while (start <= end)
{
mid = (start + end) / 2;
if (a[mid] == x)
return 1;
else if (x < a[mid])
end = mid-1;
else
start = mid+1;
}
return -1;
}

void test03()
{
int a[20] = { 0 };
for (int i = 0; i < 20; ++i)
{
a[i] = 10 * i +rand() % 10;
printf("%d\t", a[i]);
}
cout << endl;

while (1)
{
int dest = 0;
printf("+++++++++++please input a dest num+++++++++++\n");
cin >> dest;
printf("\n%d\n",  BinarySearch(a, dest, 20));
}

}

1.什么时候会出现内存泄漏,如何防止?

2.请写出下列代码的输出内容
#include
Main()
{
int a,b,c,d;
a = 10;
b = a++;
c = ++a;
d = 10*a++;
printf(“b,c,d: %d %d %d”,b,c,d);
return 0;
}

10, 12, 120

3.Select中order by 干什么用,group by干什么用,升序的关键字?
order by 排序 asc;
group by 分组


1.使用递归的方法计算1到100的累加
int sum_it(int n)
{
if (n == 1)
return 1;
else
return n + sum_it(n - 1);
}

2.输入一个链表的头结点,反转该链表,并返回反转后链表的头结点,链表节点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};

struct ListNode
{
int m_nKey;
struct ListNode* m_pNext;
};

void reverse_it(struct ListNode *head)
{
struct ListNode *p = head->m_pNext;
head->m_pNext = NULL;
struct ListNode *temp = p;
while (p != NULL)
{
temp = p;
p = p->m_pNext;
temp->m_pNext = head->m_pNext;
head->m_pNext = temp;
}
return;
}

void insert_list(struct ListNode *head, int data)
{
for (; head->m_pNext != NULL; head = head->m_pNext);//空循环
struct ListNode *temp = malloc(sizeof(struct ListNode));
temp->m_nKey = data;
temp->m_pNext = NULL;
head->m_pNext = temp;
return;
}

void print_list(struct ListNode *head)
{
printf("+++++++++++++++++++++++++\n");
for (head = head->m_pNext; head != NULL; head = head->m_pNext)
{
printf("%d\n", head->m_nKey);
}
}

void test04()
{
struct ListNode *head1 = malloc(sizeof(struct ListNode));
memset(head1, 0x00, sizeof(*head1));

insert_list(head1, 98);
insert_list(head1, 78);
insert_list(head1, 58);
insert_list(head1, 38);
insert_list(head1, 18);
insert_list(head1, 8);

print_list(head1);

reverse_it(head1);
print_list(head1);

}

3.编写冒泡排序,要求:
1)请用VC编写一个冒泡排序的程序
2)要求排序的数据从文件C:\DATA.DAT中读取,数据间用逗号分隔。

void bubble_sort(const char *path)
{
FILE *fp = fopen(path, “r”);
if (fp == NULL)
{
printf(“open file err\n”);
return -1;
}

int buf[1024] = { 0 };
int i = 0;
while ((fscanf(fp, "%d,", &buf[i])) != EOF)
{
	++i;
}

int len = i;
int flag = 0;
for (int i = 0; i < len - 1 && flag == 0; ++i)
{
	flag = 1;
	for (int j = 0; j < len - 1 - i; ++j)
	{
		if (buf[j] > buf[j + 1])
		{
			flag = 0;
			int temp = buf[j];
			buf[j] = buf[j + 1];
			buf[j + 1] = temp;
		}
	}
}
for (int i = 0; i < len; ++i)
{
	printf("%d\n", buf[i]);
}

return;

}

void test07()
{
bubble_sort(“H:/db_practice/Project1/Project1/buf.txt”);
}


1.用C++设计一个Stack类。
要求:使用deque,数据类型为模版T,栈的大小可伸缩。进制使用拷贝构造函数和operator=

蓝太平洋
1.如果int i = 5,那么printf(“%d”,(++i)–/++i);运行的结果是什么?
c中编译错误 --需要左值; cpp中结果为1;
2.数字序列:-1,2,7,28,____,126,请问28和126中间那个数应该是多少?理由是?

3.写一个函数,返回1+2+3+…+n的值。n是整数,假定结果不超过长整型。

int sum_int(int n)
{
int sum = 0;
for (int i = 1; i <= n; ++i)
{
sum += i;
}
return sum;
}

4.void *p = malloc(100);
printf(“sizeof§ is :%d\n”,sizeof§);请写出打印结果:

4

5.不调用系统函数,自己动手实现一个字符串翻转的函数。

void reverse_it(char *dest, const char *src)
{
char *p = NULL;
p = src + strlen(src) - 1;
while ( p!= src)
{
*dest++ = *p–;
}
*dest++ = *p;
dest = NULL;
return;
}

void test08()
{
char buf[128] = { 0 };

char a[] = "hello world";

reverse_it(buf, a);
printf("%s\n", buf);

}

6.用户输入M,N值,从1到N开始顺序循环数数,每数到第M个输出该值(该数不参与数数)并从下一个数重新开始数,直至全部输出。写出C程序

void remove_it(int m, int n)
{
int cir = malloc(sizeof(int) * n);
memset(cir, 0x00, sizeof(int )
n);

int index = 0;
int sum = 0;
int count = 0;

while (1)
{
	if (cir[index] == 0)
	{
		++count;
	}
	if (count == m)
	{
		printf("%d\t", index+1);
		cir[index] = 1;
		count = 0;
		if (++sum == n)
		{
			break;
		}
	}
	++index;
	index %= n;
}
free(cir);
return;

}

void test08()
{
remove_it(3, 10);
}

struct Node
{
int data;
int next;
};

void remove_it_agn(int m, int n)
{
struct Node *pHead = NULL;
struct Node *pTemp = NULL;

for (int i = n; i != 0; --i)
{
	pTemp = malloc(sizeof(struct Node));
	if (!pTemp)
	{
		printf("malloc err\n");
		exit(-1);
	}

	pTemp->data = i;
	pTemp->next = pHead;
	pHead = pTemp;
}
while (pTemp->next != NULL)
	pTemp = pTemp->next;
pTemp->next = pHead;

//pTemp = pHead;
//do
//{
//	printf("%d\t", pTemp->data);
//	pTemp = pTemp->next;
//} while (pTemp != pHead);

int count = 1;
struct Node *cur = pHead;
struct Node *prev = pTemp;

while (1)
{
	if (cur == prev)
	{
		printf("%d\n", cur->data);
		free(cur);
		cur = NULL;
		prev = NULL;
		break;
	}
	if (count == m)
	{
		printf("%d\n", cur->data);

		pTemp = cur;
		cur = cur->next;
		prev->next = cur;
		free(pTemp);
		pTemp = NULL;

		count = 1;
	}
	else
	{
		prev = cur; 
		cur = cur->next;
		++count;
	}
}

}

void test09()
{
remove_it_agn(10, 10);
}

7.有一组数字:1、5、8、4、4、3、9、5、8、2,试写一个算法,输出每个数字在队列中的排名

8.请找出下面代码中的所有错误
1、#include
2、main()
3、{
4、 char* src = “hello world”;
5、 char* dest = NULL;
6、 int len = strlen(src);
7、 dest = (char*)malloc(len);
8、 char* d = dest;
9、 char* s = src[len];
10、 while(len–!=0)
11、 d++=s–;
12、 printf(“%s”,dest);
13、 return 0;
14、}

int main1()
{
char* src = “hello world”;
char* dest = NULL;
int len = strlen(src);
dest = (char*)malloc(len + 1);
char* d = dest;
char* s = src + len - 1;
while (len-- != 0)
*d++ = *s–;
*d = 0;
printf("%s", dest);

return 0;

}

  1. void Test(void)
    {
    char* str = (char*)malloc(100):
    strcpy(str,”hello”);
    free(str);
    if(str != NULL)
    {
    strcpy(str,”world”);
    printf(str);
    }
    }
    请问运行Test函数会有什么样的结果?

编译通过,但是运行时可能出现world, 也可能出现乱码。

1.简单说明#define和const的区别?
#define 是预处理命令,在预处理阶段预处理器会根据定义进行直接替换,不进行语法的检查; const 是关键字,在编译阶段编译器会进行语法的检查,在某些涉及到自增自减的运算时,#define可能产生于预想不同的后果。

2.说明#include 后的<>和””有什么区别?
包含文件的寻找顺序不同,<>直接在库函数的寻找,而””先

3.写一个预处理函数实现返回两个整数中比较大的。
#define MAX(x, y) (((x)>(y))?(x):(y))

4.说明while{}和do{}while之间的区别
while 先检查循环条件,然后在执行循环体;
do{}while 先执行一次循环体,然后再检查循环条件;

5.一个边长为1cm的正六面体,不借助任何工具正常的人可以看到几个面?
3个

6.int k = 0;
while(k = 1)
{
k++;
}
A.循环一次
B.循环无数次
C.语法错误
D.不循环

7.unsigned int i = 50;
while(i–>=0)
{

}
A.循环50次
B.循环无数次
C.语法错误
D.不循环

8.彩票开奖,ABCDE五个人预测中奖奖金,他们五人预测名次和谈话如下:
A说:B是第三,C是第五
B说:D是第二,E是第四
C说:A是第一,E是第四
D说:C是第一,B是第二
E说:D是第二,A是第三
结果发现,每个人的预测都对了一半,那么他们的实际名次是?
A.DAECB
B.EBACD
C.DBAEC
D.BADCE

9.指出下面代码有什么错误
int a[20][10][1000];
int i = 0; j = 0; k = 0;
for(i = 0; i < 20; i++)
for(j = 0; j <= 10 ; j++)
for(k = 0; k < 100; k++)
a[i][j][k] = 0;

10.指出下面代码有什么错误
int *Me_malloc(int size)
{
int *p = NULL;
p = (int *)malloc(size);
return p;
}
int main()
{
int *a = NULL;
a = Me_malloc(sizeof(int) * 50);
if(NULL == a)
{
return (-1);
}
if(strcmp(a,””))
{
free(a);
a = NULL;
}
}

11.写一个程序判断字符串是否是回文(字符串长度不超过50个字符)
例如:输入字符串为1234321
输出:OK
例如:输入字符串为123456789
输出:NG

int is_palindrome (char *p)
{
char *start = p;
char *end = p + strlen§ - 1;

while (start < end && *start++ == *end--);//空循环

return start < end ? 0 : 1;

}

void test09()
{
while (1)
{
char a[128] = { 0 };
scanf("%s", a);
printf("%d\n", is_palindrome(a));
}
return;
}

12.写一个程序删除字符串前5个字符(输出字符串长度不超过50个字符)
例如:输入字符串为123456789
则输出:6789

char * delete_five(char *a)
{
if (strlen(a) < 5)
return NULL;
return a + 5;
}

void test10()
{
char a[] = “helloworld”;
char *temp = delete_five(a);
printf("%s", temp);
return;
}

13.写一个程序讲输入的字符串以数字字符进行分割(连续数字只做一次分割)并输出(输出字符串长度不超过50个字符)
例如:输入字符串为abc1DEF235GHJKL9999999
则输出:
abc
DEF
GHJKL

char *tok_by_num(char *src)
{
static char *p = NULL;
static char buf[64] = { 0 };
if (src != NULL)
{
strcpy(buf, src);
p = buf;
}

while (*p != NULL && *p >= '0' && *p <= '9')
{
	++p;
}
char *temp = p;
while (*p != NULL && (*p < '0' || *p > '9'))
{
	++p;
}
	*p++ = 0;
	return *temp != NULL ? temp : NULL;

}

void test11()
{
char a[] = “abc1DEF235GHJKL9999999”;
char *temp;
temp = tok_by_num(a);
printf("%s\n", temp);

while ((temp = tok_by_num(NULL)) != NULL)
{
	printf("%s\n", temp);
}

}

14.写出一个strcmp函数(不实用strcmp和memcmp函数)

int my_strcmp(const char *arr1, const char *arr2)
{
char *p1 = arr1;
char *p2 = arr2;
while(*p1 != NULL || *p2 != NULL)
{
if (*p1 != *p2)
return *p1 - *p2;
++p1;
++p2;
}
return 0;
}

void test12()
{
while (1)
{
char a1[64] = {0};
char a2[64] = {0};

	scanf("%s", a1);
	scanf("%s", a2);
	printf("%d", my_strcmp(a1, a2));
}

}

15.写出一个函数求M(0

int mod_it(int m, int n)
{
int ret = 1;
for (int i = 0; i < n; ++i)
{
ret = ret * m % 10;
}
return ret;
}

void test13()
{
while (1)
{
int m = 0;
int n = 0;
scanf("%d%d", &m, &n);
printf("%d", mod_it(m, n));
}
}

金美通信北京研发中心
一、网络及基础
1.简述因特网的五层协议模型
2.请简述TCP协议连接的建立和删除过程,并简述TCP协议进行拥塞控制的机制
3.简述路由表的作用及普通路由器路由查找过程。在Linux下如何配置一条默认路径
4.一个网络管理系统一般包含哪些管理功能?请写出你知道的管理协议?

二、C/C++
1.完成字符串拷贝可以使用sprintf、strcpy及memcpy函数,并说出这些函数的区别?
2.C++的STL库中,有哪些容器?
3.假设rwlocks是一种锁,WLock和RLock分别代表写锁与读锁,请写出下列代码的输出结果
rwlock lockTest;
void fun1()
{
RLock lockTest;
cout << “helloc world 1” << endl;
}
void fun2()
{
WLock lockTest;
cout << “hello world 2” << endl;
}

int main()
{
RLock lockTest;
fun1();
fun2();
cout << “hello world” << endl;
return 0;
}

4.请说明PostMessage和SendMessage的区别
5.请写出你所知的设计模式,并用任意一种熟悉的语言简单实现其中一个设计模式
6.下列程序段的输出结果是________
for(i = 0,j = 10, k = 0;i <= j;i++,j-=3,k=i+j);
cout << k;

无;0 8 6
有;4
7.请写出下面程序的输出结果
#include
class a{
public:
virtual void printf(){ cout << “a prog…” << endl;};
};
class b:public a{};

class c:public b{
void printf(){ cout << “c prog…” << endl;};
};

void main()
{
a a;
b b;
c c;
show(&a);
show(&b);
show(&c);
}

8.请写出下面程序的输出结果
#include
vlass Test{
int x,y;
public:
Test(int i,int j = 0){x = i; y = j;}
int get(int i; int j){return i+j;}
};

void main()
{
Test t1(2),t2(4,6);
int (Test:: *p)(int,int);
p = &Test::get;
cout << (t1.*p)(5,3) << endl;
Test *p1 = &t2;
cout << (p1->*p)(7,20) << endl;
}
8
27
北京宽广智通北京中心
1.请写出下面的结果
Char str[4] = {0x00, 0x00, 0x01, 0x00};
(int)str = 65536

2.请用C语言写一个函数的实现,该函数的声明是char* findSubString(char* src, char* substr),功能是在src字符串中寻找字符串substr,如果找到,则返回参数指向src中该字符串的开始位置,如果没有找到,则返回0,从src串的开始位置向后寻找字符串,首次找到字符串立即返回。

char* findSubString(char* src, char* substr)
{
char *pSrc = src;
char *temp = pSrc;
char *pSub = substr;

while (*pSrc != NULL)
{
	while (*pSrc != *pSub && *pSrc != NULL)
		++pSrc;

	if (*pSrc == NULL)
		return NULL;

	temp = pSrc;
	while (*pSub != NULL && *temp == *pSub)
	{
		++temp;
		++pSub;
	}
	if (*pSub == NULL)
		return pSrc;
	++pSrc;
	pSub = substr;
}
return NULL;

}

void test14()
{
char src[128] = { 0 };
char substr[128] = { 0 };
while(1)
{
scanf("%s%s", src, substr);
printf("%s\n", findSubString(src, substr));
}
}
北京捷通华声科技股份有限公司
1.假设一个信息传输系统,只能接受包含0-9这10个数字的文本流,请设计一个协议实现信息的传输。
2.请使用Linux命令或者Python脚本得到一个包含多行信息的文本(1000万行以上)中不重复的数量
3.请描述在浏览器中敲入一个网址并按下回车后所发生的事情(尽量详细)
4.在1-10000的正整数中,如果该整数能被3整除,则输出该整数并在之后加上字符”*”, 如果该整数能被5整除,则输出该整数并在之后加上字符”#” 如果该整数能同时被3和5整除,则输出该整数并在之后加上字符”$”?

void mark_it(int n)
{
for (int i = 1; i <= n; ++i)
{
if (i % 3 == 0 && i % 5 == 0)
printf("%d \t$\t", i);
else if(i %3 == 0)
printf("%d \t*\t", i);
else if (i % 5 == 0)
printf("%d \t#\t", i);
}
}

5.UTF-8解码的char* 字符,如何转换为QString?
6.QString如何转换成UTF-8的char*?
7.阅读以下代码
class A:public QObject class B:public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
A(){}; B(){};
~A(){}; ~B(){};

signals:										public slots:
	void signal_a();								void slot_b(){
};												for(int i = 0; i < 999999999; i++)
													dosomething();
												}
											 };
void func()
{
	…
	A* g_a = new A();
	B b;
	…
}

1)请写出连接signal_a()与slot_b()的方法
2)slot_b函数非常耗费时间,请编写伪代码,以线程的方式来运行
3)如果使用min()重载的方式进行线程运算,请使用伪代码,描述如何进行多个线程之间的数据共享与通知

第一部分
1.以下三条语句的输出分别是什么?
//test.cpp
#include
using namespace std;

const char str1[] = “abc”;
const char str2[] = “abc”;
char str3[] = “abc”;
char str4[] = “abc”;
const char str1[] = “abc”;
const char* str5 = “abc”;
const char* str6 = “abc”;

int main(int argc, char* argv[])
{
cout << boolalpha << (str1 == str2) << endl;
cout << boolalpha << (str3 == str4) << endl;
cout << boolalpha << (str5 == str6) << endl;
return 0;
}

false false true

2.下列程序中,b最终的值是多少?
//test.cpp
#include

int main(int argc, char* argv[])
{
using namespace std;
short *p1 = 0; *p2 = 0;
int b= 0;
int *a[5] = { 0 };
for (int i = 0;i < 5; i++)
{
a[i] = (int *)i;
}
p1 = (short *)a[1];
p2 = (short *)a[2];
b = (p2 – p1);
return 0;
}

0

第二部分
1.举出几个常用的window内核对象(至少三种)
2.内核对象会随着进程一起销毁吗?为什么?
3.编写window应用程序的时候,为什么使用_beginthreadex(),而不用CreateThread()创建线程?
4.Window C++代码如何创建一个子进程?(代码或者说明均可)
5.试举例说明使用DLL的好处?它和使用静态库有什么区别?


1.写一个函数int S2M(int S), return 值为M,其中S表示一段以秒为单位的时长,M为S对应的以分钟为单位的时长,不足一分钟的部分按一分钟计算

int S2M(int s)
{
return s % 60 ? s / 60 + 1 : s / 60;
}

void test15()
{
while (1)
{
int s = 0;
scanf("%d", &s);
printf("%d\n", S2M(s));
}
}

2.在直角坐标系的横轴上有2条线段,分别A(a0,a1),B(b0,b1),A、B为线段的表示,a0,a1和b0,b1为对应线段的在X轴的起始坐标
2.1写一段程序,判断这2条线段是否有交叉
举例如下A(0,1),B(1,2)这2条线段首尾相接,不算交叉
A(0,1),B(0.9,2) 交叉
A(0,1),B(-1,2) 交叉
A(0,1),B(-1,-0.9) 不交叉
A(0,1),B(-1,0.1) 交叉

struct point
{
double x1;
double x2;
};

int is_crossed(struct point a, struct point b)
{
return a.x1 > b.x1 && a.x1 b.x1 && a.x2 < b.x2 ? 1 : 0;
}

void test16()
{
struct point a = { 0 };
struct point b = { 0 };
while (1)
{
scanf("%lf%lf%lf%lf", &a.x1, &a.x2, &b.x1, &b.x2);
printf("%d\n", is_crossed(a, b));
}
}

2.2如果有3条线段,判断是否这3条线段中任意2条都不交叉,如果有N条线段,如何判断这n条线段中,是否任意2条都不交叉?

int is_crossed_multi(struct point a[], int len)
{
for (int i = 0; i < len - 1; ++i)
{
for (int j = i + 1; j < len; ++j)
{
if (is_crossed(a[i], a[j]))
return 1;
}
}
return 0;
}

3.有一条不定长的数字串,例如432854786514785214785624856214856214,写一段代码,将在该串中出现次数最多的前三个数字输出。
举例如下,串1234567890123456123451234123412,其中1出现6次,2出现6次,3出现5次,4出现5次,其他均小于5次,输出1 2 3或1 2 4均可。

void find_3(const char * s)
{
int a[10] = { 0 };
int first = 0, second = 0, third = 0;
int temp = 0;
char *p = s;

while (*p != NULL)
{
	temp = *p++ - '0';
	++a[temp];
}

for (int i = 0; i < 10; ++i)
{
	if (a[i] > a[first])
		first = i;
	else if (a[i] > a[second])
		second = i;
	else if (a[i] > a[third])
		third = i;
}


printf("first\t%d\t[%d]times\n", first, a[first]);
printf("second\t%d\t[%d]times\n", second, a[second]);
printf("third\t%d\t[%d]times\n", third, a[third]);

}

void test17()
{
find_3(“1234567890123456123451234123412”);
}

4.一个有3层的问检查,请输出该文件的结构和明细,即能体现出是目录还是文件,能体现出目录和文件之间的父子或包含关系
输出举例如下
First(dir) --dir 表面是目录
Second1(dir)
Third(dir)
File1
File2
File3
Third2(dir)
File4
File5
File6
File7
Second2(dir)
Second3(dir)
File8
File9
File10

数据库试题
5.商品库的数据库两张表,包括:
商品表1(商品代号char(8),分类名char(8),单价float,数量int)
商品表2(商品代号char(8),产地char(8),品牌char(8))

教学的数据库三张表,包括:
学生(学号char(7),姓名char(6),性别char(2),出生日期datetime,专业char(10),年级 int)
课程(课程号char(4),课程名char(10),课程学分int)
选课(学号char(7),课程号char(4),成绩int)
根据所给的商品库和教学库,按照下列给的每种功能写出相应的查询语句
1、从商品库中查询出数量大于10的商品种类。
2、从商品库中查询出每类(即分类名相同)商品的最高单价。
3、商品库中查询出比所有商品单价的平均值要高的全部商品。
4、从商品库中查询出同一类商品多于一种的所有分类名。
5、从教学库中查询出被2到4名学生选修的所有课程。
6、写出一个课程表的触发器,当要删除的课程还没有学生选修,允许删除,否则不允许删除
7、查询选修课程超过5门的学生姓名和所选选修课程的数目
8、设表A与表B结构一致,均只有一个字段(idnumber),分别写出对应的语句
a)A与B交集
b)A与B的差集
c)A与B的并集
d)B原本是A的一个备份表,某日小王由于误操作,对A表的数据做了一些处理,请你写出一段sql,将小王导致A表的所有变化的记录找出来。

6.介绍一下STL,详细说明STL如何实现vector?
7.TCP/IP、Http、Scoket的区别?
红云融通
一、填空题
1.unsigned int a = 0Xabcd1234,在little-endian的环境中,变量a在内存中从低位地址到高危地址的4个字节依次为(16进制表示)______ ______ ______ _____
2.char a = 0x32
char b = a & 0x20
b的值是(使用16进制表示)_______
3.window中线程同步使用(列举至少3中)_________ ___________ ____________
4.采用4字节对齐方式,有以下结构体
struct ABC
{
int a;
bool b;
char c[8];
short d;
bool e;
char* f;
};
sizeof(ABC)=_,sizeof(ABC*)=
调整成员顺序对这个结构体的存储结构做优化,调整后的结构体为__________________

5.UINT64* p = (int*)0;
printf(“%d”,(UINT64)(p+100));
上述代码的执行输出结果__________

6.Const int pA 表示___________的值不可改变
Int
const pA表示___________的值不可改变
要使指针和指针指向的值不可改变,应该写成___________________________________

二、单项选择题

  1. 构造函数是否可以是虚函数______,析构函数是否可以是虚函数
    A 可以 B不可以
  2. delete p是指
    A 删除p变量 B删除p所指的东西
    三、代码题
    1.写出下列代码的输出结果
    #include
    int inc(int a)
    {
    return (++a);
    }
    int multi(int a, int b, int*c)
    {
    return (c = a * b);
    }
    typedef int(FUNC1) (int in)
    typedef int(FUNC2) (int
    , int
    . int
    )

void show(FUNC2 fun, int arg1, int *arg2)
{
FUNC1 *p= &inc;
int temp = p(arg1);
fun(&temp, &arg1,arg2);
printf(“%d\n”,*arg2)’
}
int main()
{
int a;
show(multi, 10, &a);
return 0;
}

110
阳光暖果(北京)科技发展有限公司
1.extern”C”有什么作用?请说明
2.请列举const的应用和功能,(提醒:C和C++都有不同的应用)
3.请简述面向对象的三个基本特征
4.请简述delete和delete[]的区别
5.已知链表的头结点head,写一个函数把这个链表逆序
Typedef struct node{ int data; Node* next;} Node;

typedef struct node {
int data;
struct node* next;
} Node;

void print_list(Node *head)
{
Node *p = head->next;
while (p != NULL)
{
printf("%d\t", p->data);
p = p->next;
}
printf("\n");
}

void reverse_list(Node *head)
{
Node *p = head->next;
Node *temp = NULL;
head->next = NULL;
while (p != NULL)
{
temp = p;
p = p->next;
temp->next = head->next;
head->next = temp;
}
}

void insert_node(Node *head, int data)
{
Node *new_node = malloc(sizeof(Node));
memset(new_node, 0x00, sizeof(Node));
new_node->data = data;
new_node->next = head->next;
head->next = new_node;
}

void test()
{
Node *head = malloc(sizeof(Node));
memset(head, 0x00, sizeof(Node));

for (int i = 10; i > 0; --i)
{
	insert_node(head, i);
}
print_list(head);
reverse_list(head);
print_list(head);

}

6.自选一个最熟悉的排序或查找算法,用C++实现。
7.运行下面的代码,输出是什么?请给出必要的说明
class A{
};

class B{
Public:
B(){}
~B(){}
};

class C{
Public:
C(){}
Virtual ~C(){}
};

int main(void)
{
printf(“%d,%d,%d\n”,sizeof(A),sizeof(B),sizeof©);
return 0;
}

1 1 4
8.以下代码可能存在哪些错误?请简要说明理由。
class CBbuffer
{
char* m_pBuffer;
int m_size;
public:
CBuffer()
{
m_pBuffer=NULL;
}
~CBuffer()
{
Free();
}
void AHocie(int size) (1)
{
m_size = size;
m_pBuffer = new char[size];
}
private:
void Free()
{
if(m_pBuffer!=NULL) (2)
{
delete[] m_pBuffer;
m_pBuffer = NULL;
}
}
public:
void SaveString(const char* pText) const (3)
{
strcpy(m_pBuffer,pText); (4)
}
char* GetBuffer() const
{
return m_pBuffer;
}
};

int main(int argc, char* argv[])
{
CBuffer buffer1;

void AHocie(int size) (1)

buffer1.SaveString(“Microsoft”);
printf(buffer1.GetBuffer());

return 0;

}

9.请给出以下代码运行结果,请说明理由
int a =4;
int & f(int x)
{
a+=x;
return a;
}

int main(void)
{
int t = 5;
std::cout << f(t) << std:endl; //(1) t = 5, a=9, 9

f(t) = 20;
std::cout << f(t) << std:endl;				//(2)a = 20, t = 5,	25

t = f(t)
std::cout << f(t) << std:endl; //(3)a = 30, t = 30, 60

return 0;

}

10.请给出以下代码运行结果,并说明理由
int main(void)
{
unsined u = 10;
int I = -42;

std::cout << i + i << std::endl;			//(1)
std::cout << u + i << std::endl;			//(2)

unsigned u1 = 42, u2 = 10;
std::cout << u1 – u2 << std::endl;		//(1)
std::cout << u2 – u1 << std::endl;		//(2)

return 0;

}

-84
4294967264
32
4294967264

注意:假设int 所占内存4字节

9.全局变量和局部变量在内存中是否有区别?若有,有何区别?
有,存储位置不同

10.int (*s[10])(int)表示的是什么?
指针数组,指针指向int (int)型函数;
十一
1.程序的局部变量存在于(栈区),全局变量存在于(静态区)中,动态申请数组存在(堆区)中
2.设有以下说明和定义:
typedef union{long i; int k[5]; char c;}DATE;
sturct data{int data;DATE cow; double dog;}too;
DATE max;
则语句Printf(“%d”,sizeof(struct date) + sizeof(max));的执行结果是___52_____________
3.用两个栈实现一个队列的功能?要求给出算法和思路!

设2个栈为A,B,一开始均为空
入队:将新元素push入栈A
出队:(1)判断栈B是否为空;
(2)如果为空,则将栈A所有元素依次pop出并push到栈B
(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O

4.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?并阐述这两者的优缺点?
宏,inline
十二
1.关键字static的作用是什么?

2.这段代码有什么问题?
struct S_A{
int a[10];
};
void f()
{
int i;
struct S_A* s_ptr; //未分配空间;
for(i = 0;i < 10;i++)
s_ptr->a[i] = i;
}

3.分别给出BOOL,int,fioat,指针变量与“零值”比较的if语句(假设变量名为var)
if(!var)
float型 if(var<0.0000001 && var>-0.0000001)

4.void Func(char str[100])
{
sizeof(str) = ? //4
}
void* p = malloc(100);
sizeof§ = ? //4

4.题目:给一个不多于5位的正整数,要求:一、求出它是几位数,二、逆序打印出各位数字

void reverse_num(int num)
{
int a = num, b = 0;
int i = 0;
for (i = 0; a != 0; ++i)
{
b = a % 10;
printf("%d", b);
a = a / 10;
}
printf("\n%d\n", i);
}

void print_num(int num)
{
int a = 0, b = 0;
a = num / 10;
b = num % 10;
if (a == 0)
{
printf("%d", b);
return;
}

print_num(a);
printf("%d", b);
return;

}

十三
1.在C++11标准中添加的decltype和autp关键字使用的例子,请指出a,b,c,d,e,f,g的类型
#include
int main()
{
const std::vectorv(1);
auto a = v[0];
decltype(v[0]) b= 0;
auto c= 0;
auto d = c;
decltype© e;
decltype(©) f = e;
decltype (0) g;
return 0;
}

a: int b: const int& c: int d: int e; int f: int & g: int

2.下边的代码将输出什么?
#include //std::cout
#include //std::all_of
#include //std::array
int main()
{
std::array foo = {3,5,8,11,13,17,19,23};
if(std::all_of(foo.begin(),foo.end(),[](int I){return i%2;}))
{
std:cout << “所有的元素都是奇数.\n”;
}
else
{
std::cout << “至少有一个偶数.\n;
}
return 0;
}

2.给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数,例如N=10,只有1不是2 3 5 7的倍数

Input
输入一个数N(1<= N <=10^180)
Output
输出不是2 3 5 7的倍数的数共有多少

Input 示例
10
Output 示例
1
详细代码:

十四
1.char str2[] = “abc”;
cout << (str1 == str2);
const char str3[] = “abc”;
const char str4[] = “abc”;
cout << (str3 == str4); 0
const char* str5 = “abc”;
const char* str6 = “abc”;
cout << (str5 == str6); 1
char* str7 = “abc”:
char* str8 = “abc”:
cout << (str7 == str8); 1
各输出多少?

3.写出函数指针数组,数量为n,每个指针指向一个Int* func(int *)的函数

int* (*funcs[n])(int *)

4.写出C++的4中转型方式并人选2中简述用法

static_cast
dynamic_cast
const_cast
reinterpret_cast

5.写出http协议的请求方式?(任意3种)

6.写出string类的构造、赋值函数,及ostream类对string类的输出方法istream类对string的输入方法

十五
1.在linux主要目录下面,把所有文件都列举出来,包括子文件夹里面的,shell命令是什么?

3.把一个文件里面的所有字符delong替换成lejingda,shell命令是什么?

4.当前系统CPU的损耗情况统计命令是什么?

5.C转换大小写的方法是什么?用C++编写一个单例模式?

6.编写一个shell脚本,查出系统内部存在的僵尸进程,并且全部杀掉

国能日新

  1. 有一个16位的整数,每4位的二进制数表示一个数,写函数求出他们的和
    解释:
    整数 1101010110110111
    和:1101+0101+1011+0111 = 1101+0101+1001+111=2324

2.怎么判断链表中是否有环(写个程序实例)?
Bool CircleList(Link* pHead)

4.Template有什么特点?什么时候用?

5.谈谈COM的线程模型,然后讨论进程内/外组件的差别?

6.存储过程是什么?有什么用?有什么优点?

7.谈下模态对话框和非模态对话框的区别?

word中的“另存为”对话框就是模态对话框,你不把它关闭,不能进行其他操作。
word中的“查找与替换”对话框就是非模态对话框,你不把它关闭,能进行其他操作
十六
1.静态链接库与动态链接库的区别:
1)静态链接库被包含在宿主程序中,而动态链接库则是在需要时动态地装载和卸载DLL文件
2)静态链接库中不能再包含其他动态库或者静态链接库,而动态库中则可再包含

2.输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按顺序输出其各位数字;
(3)逆序输出其各位数字

void reverse_num(int num)
{
int a = num, b = 0;
int i = 0;
for (i = 0; a != 0; ++i)
{
b = a % 10;
printf("%d", b);
a = a / 10;
}
printf("\n%d\n", i);
}

void print_num(int num)
{
int a = 0, b = 0;
a = num / 10;
b = num % 10;
if (a == 0)
{
printf("%d", b);
return;
}

print_num(a);
printf("%d", b);
return;

}

4.编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00,要求运算结果保留两位小数,用户输入时两个数和操作符输入

5.已知abc+cba=1333其中a,b,c均为一位数,编程求出满足条件的a.b.c所有组合

6.编程一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。Char str[] = {“ASEEsdffw WEsdfe joiorjectsf fsafasfssgdg AFSDGSDGFDG gsdgsg”};

7.已知strcpy的函数原型:char strcpy(char strDest, const char* strSrc)其中strDest是目的字符串,strSrc是源字符串,不调用C++/C的字符串库函数,请编写函数strcpy和strlen

8.输入一行字符,分别统计出其中字母,数字和其他字符的个数

9.求1!+2!+3!+…+20!,将结果输出

10.求一个4*3的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出

11.编写一个程序,将两个字符串连接,不要使用strcat函数

12.编写一个函数使用冒泡法对若干个整数按从小到大的顺序排序,主函数中输入若干个整数到一个一维数组中,调用排序函数,将其排序,最后将元素之和排好序的数组输出

十七
1.A.c和B.c两个c文件中使用了两个相同名字的static变量,编译的时候回不回有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?

3.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

4.已知一个数组array,用一个宏定义,求出数据的元素个数

4.某32位系统下,C++程序,请计算sizeof的值
char str[] = “Bitcoin is coming”
char *p = str;
int n = 10;
请计算
sizeof(str) = ? (1)
sizeof§ = ? (2)
sizeof(n) = ? (3)
void foo(char str[100]){
请计算
sizeof(str) = ? (4)
}
void *p = malloc(100);
请计算
sizeof§ = ? (5)
5.回答下面的问题
(1)头文件中的ifndef/define/endif的有什么用

(2)#include 和 #include “filename.h”有什么区别?

(3)在C++程序中调用被C编译器编译后的函数,为什么要加extern”C”声明?

6.C++中有什么数据分配在栈?什么分配在堆中?
7.下面的声明都是什么意思?
const int a;
int const a;
const int* a;
int * const a;
int const* a const;

8.什么是”引用”?申明和使用“引用”要注意哪些问题?
9.引用和指针有什么区别?
10.将“引用”作为函数参数有什么特点?
11.socket建立连接的主要实现步骤?
12.写一个函数,把一个字符串倒序,如“abcd”倒序后变为”dcba”
13.编写一个函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一个字符组成的
14.请写一个C函数,该函数的给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
15.写一个函数,功能:完成内存之间的拷贝
16.有一个数组a(1000)存在0-1000;要求每隔二个数据删掉一个数,到末尾时循环至开头继续进行,求最后一个被删除的原始下标位置
17.不用库函数,用C语言实现将一整型数字转化成字符串
18.写一个函数,他的原型是int continumax(char* outputstr, char* inputstr),功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串赋给其中一个函数参数outputstr所指内存,例如:”abcd12345ed125ss123456789”的首地址传给inputstr后,函数将返回
十八
1.说出下面几个应用程序的网络端口号:
smtp ftp http https
2.指出下面c程序中的错误:
char* Getstr()
{
char tbuf[200]
unsigned char I;
for(I = 0;I < 1000;i++)
{
tbuf[i] = ‘\0’;
}
return tbuf;
}
3.给出数据库创建表,查询数据,更新数据,删除数据的SQL语句
4.给出单向链表逆序排序的算法
5.给出window下用程序(C语言)创建进程的方法
6.给出linux下用程序C语言)创建进程的方法
7.给出编写通信程序需要的常用通信接口函数
8.给出实现进程间对象同步的几种方法
十九
第一部分 逻辑思维
1.请推理出横线上的字母或数字
A、D、G、J、M______
1、3、6、10、15____
1、1、2、3、5、8______
21、20、18、15、11、6_____
8、6、7、5、6、4、5___
65535、256、16、4__
1、0、-1、0、1__
3968、63、8、3、2
2.有一个湖,湖水无穷多,另有两个空水壶,容量分别是5升和6升,问:如何用这两个壶从湖里取出3升水?

5.有顺序排列的6只杯子,前三只杯子装满了水,后三只是空杯子,问:如何只移动一个杯子的情况下,让6只杯子的水杯和空杯一一间隔?

6.外星人向地球发射了一颗人造卫星,这颗卫星同月亮一样大,而且运行在月亮所运行的同一条轨道上,从此,两个月亮一前一后围绕着地球转,后果如何?

无所谓

5.5分钟之内,写出尽可能多的“回形针的不寻常用途?

第二部分 linux测试题
1.!!命令是做什么的?
2.守护进程crond的作用是?
3.kill -9 ‘ps –ef | grep shmd | tr –s’ ‘ | awk –F’ ‘ ‘ {print $2}’ ‘这条命令完成什么功能?
4.查找文件testfile中只包含四个字符的行,用什么命令?
5.定义shell的全局变量的命令是?
6.在linux操作系统中,符号连接、软链接和硬链接有什么区别?
7.设置IP和默认的路由为192.168.1.1的命令是?
8.linux启动的第一个进程Init启动的第一个脚本程序是?
9.linux进程间通信有哪几种方式?
10.将neokyin-advance-server-5.4_x86-64.iso文件挂载到/mnt目录下,使用什么命令?
11.文件exerl的访问权限为rw-r—r–,现要增加所有用户的执行权限和同组用户的写权限,用什么命令?
12.如需要找出/etc/my.conf文件属于哪个rpm包,执行什么命令?
13.使用什么命令可以查看Linux的启动信息?
14.将/etc目录下所有以h开头的文件拷贝到当前目录下,用什么命令?
15.测试认证部集体吃饭后最流行的游戏是“数7”,但是老员工们的水平不敢恭维,需要新员工的帮助。规则就是游戏者轮流报数,遇到7的倍数或者包含数字7的数则跳过。现在请用shell脚本实现该游戏,打印1到2000范围内的数,去掉所有7的倍数,去掉包含数字7的数。
16.求两个数之和,要求从shell终端输入2个数,并输出和
17.打印本机的交换分区大小,要求的处理结果实例:Swap:1024M
18.有个文件test,其内容如下:
zhangsan 80
lisi 81.5
wangwu 93
zhangsan 85
lisi 88
wangwu 97
zhangsan 90
lisi 92
wangwu 88
要求输出格式:(average:平均成绩,total:总成绩)
name average total
zhangsan xxxx xxxx
lisi xxxx xxxx
wangwu xxxx xxxxx
19.每天下午1:30分备份/etc下的所有文件大/home/backup下,而且只保留最近的7天备份,请写出过程!
20.打印当前sshd的端口和进程id,要求的处理结果示例:sshd Port && pid : 22 5412

第三部分 C++编程测试题
1.请写出BOOL变量,float变量,指针变量与它们各自“零值”比较的if语句
2.以下为linux下的32位C++程序,请计算sizeof的值
Void func(char str[100])
{
请计算
sizeof(str) = ? (1)
}
char str[] = “Hello”
char *p = str;
int n = 10;
请计算
sizeof(str) = ? (2)
sizeof§ = ? (3)
sizeof(n) = ? (4)
void *p = malloc(100);
请计算
sizeof§ = ? (5)
3.头文件中的ifndef/define/endif干什么用?
4.#include 和#include “filename.h”有什么区别?
5.const有什么用途?(请至少说明两种)
6.在C++程序中调用被C编译器编译后的函数,为什么要加extern”C”?
7.请简述以下两个for循环的优缺点
for(i = 0; i < N;i ++) if (condtion)
{ {
If(condtion) for(i = 0; i < N;i++)
DoSometion(): DoSomething();
else }
DoOtherthing(); else
} {
for(i = 0; i < N; i++)
DoOtherthing():
}
优点: 优点:

缺点: 缺点:

7.char GetMemory(char p)
{
p = (char) malloc(100);
}
void Test(void)
{
char* str = NULL;
GetMemory(str);
strcpy(str,”hello world);
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
8.char GetMemory(void)
{
char p[] = “hello world”;
return p;
}
void Test(void)
{
char str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?为什么?
9.void GetMemory(char p, int num)
{
p = (char) malloc(num);
}
void Test(void)
{
char
str = NULL;
GetMemory(&str, 100);
strcpy(str,”hello world);
printf(str);
}
请问运行Test函数会有什么样的结果?
10. void Test(void)
{
char
str = (char
)malloc(100):
strcpy(str,”hello”);
free(str);
if(str != NULL)
{
strcpy(str,”world”);
printf(str);
}
}
请问运行Test函数会有什么样的结果?
11. 已知strcpy的函数原型:char strcpy(char strDest, const char
strSrc)其中strDest是目的字符串,strSrc是源字符串
(1)不调用C++/C的字符串库函数,请编写函数strcpy
(2)strcpy能把strSrc的内容复制到StrDest,为什么还要char*类型的返回值?
华如
1.阅读以下代码,给出数组的和。
int intArr[10] = { 0 }:
short *p = (short *)intArr;
for(int i = 0;i < 10;++i)
{
p = i;
P+= 2;
}
执行上述代码段后,数组IntArr所有元素的和为:____________
2.阅读以下代码段,写出Result的结果。
enum Mycolor{RED = 1,GREEN = 2,BLUE = 4};
#define ALLCOLOR (RED|GREEN|BLUE)
Char Result = (char) ALLCOLOR;
Result ^= RED|GREEN;
Result的值:_________
3.写出控制台输出内容
class Parent
{
public:
Parent()
{
_value = 0;
}
virtual void run()
{
_value += 1;
std::cout << “I’m Parent;” << _value << std::endl;
}
private:
int _value;
};
class Child : public Parent
{
public:
Child()
{
_value = 2;
}
void run()
{
Parent::run();
_value +=1;
std::cout << “I’m Child;” << _value << std::endl;
}
Parent
obj = new Child;
(*obj).run();
控制台输出内容:

4.补充Bird类的拷贝构造函数和赋值操作符
class Animal
{
//注意:含有拷贝构造函数和赋值操作符的定义
}
class Bird: public Animal
{
//拷贝构造函数
}

5,简述单例模式的作用并用伪代码进行实现(开放性)
中铁信安
一、找错误
1.int main(int argc, char* argv[])
{
char ptr = (char)malloc(10);
if(NULL == ptr)
{
printf(“\n Malloc failed \n”);
return -1;
}
else if(argc == 1)
{
printf(“\n Usage \n”);
}
else
{
memset(ptr , 0, 10);
strncpy(ptr, argv[1], 9);
while(*ptr != ‘z’)
{
if(*ptr == ‘ ‘)
break;
else
ptr++;
}
if(*ptr == ‘z’)
{
printf(“\n String contains ‘z’\n”);
//Do some more processing
}
free(ptr);
}
return 0;
}

2.#include
int main()
{
char* ptr = “Linux”;
*ptr = “T”;
printf(“\n [%s] \n”);
return 0;
}

3.#include
int* inc(int val)
{
int a = val;
a++;
return &a;
}
int main(void)
{
int a = 10;
int *val = inc(a);
printf(“\n Incremented value is equal to [%d] \n”,*val);
return 0;
}

二、简答题
1.交换两个变量的值,不使用第三个变量,即a=3,b=5,交换之后a=5,b=3
2.进程之间通信的途径
3.类的静态成员和非静态成员有何区别?
4.已知一个数组talbe,用一个宏定义,求出数据的元素个数
5.写一个获取文件拓展名的起始位置,如果没有拓展名则返回NULL
CHAR* GetExtenName{
IN CHAR* cpFilePath, //文件路径
OUT OPTION int* pnNameLen //返回拓展名长度,可以为NULL
};
6.仅有5升和6升两个容器,如何得到3升水

你可能感兴趣的:(c++,c+++,笔试题)