金山软件有限公司西山居工作室
程序类笔试试卷
(考试时间:120分钟)
个人信息(必填)
基本信息姓名:__张海明___ 性别:____男_____ 年龄:___22_____ 学校名称:___西电______ 学院名称:__计算机学院__
专业:__教育技术学_
学历:__本科________ 毕业日期:201_2__年
联系方式手机:_136********_______QQ:_616856157__ 电子邮箱:__lear.chang@https://www.wendangku.net/doc/0d18435253.html,______
紧急联系人:_汪璐______ 手机:___139********____
一、填空题
1.2字节有符号整型数据可表示的数据范围为:-32768______~___32767___
char a[] = "abc\0d"; char * b = a;
printf("%d, %d, %d\n", sizeof(a), sizeof(b), strlen(a));
以上程序片段的输出为(32位编译环境):
___5___, _____4_, _____3_
int n = 0;
for (int i = 0; i < 8; i++) n = 1 << i | n >> 1;
printf("0x%x\n", n);
以上程序片段的输出为:___128___
int f(int a)
{
if (a & 1) return f(--a) + 1;
else if (a > 0) return f(a >>= 1);
else
return 1;
}
调用f(5)的返回值是:______
2.用一条语句将a,b 两个数值做交换:____________;
二、简答题
1.TCP建立连接过程,为什么要3次握手?
2.static关键字有哪些用法?分别是什么作用?
3.程序运行时出现间程序无响应,CPU占用100%。此时可能是出现了什么问题?该
如何确认问题所在?
4.内存泄露一般是如何产生的?如何避免?
5.分别写一个宏和一个函数来获取数组元素个数,如COUNT(a)会得到a数组元素个
数。
6.按照你的猜测,一个含客户端程序的网络游戏,从玩家开启客户端主程序到进入游
戏世界,客户端与服务端需要进行哪些必须的网络协议交互?
7.对于以上各题(填空和简答),你觉得回答很有困难的是哪几道?离开考场后如果
有必要,你会如何寻求这几道题的正确答案?
三、改错题
请找出下面代码片段的错误和不足,并作出更正。附MultiByteToWideChar函数的MSDN文档说明。
(https://www.wendangku.net/doc/0d18435253.html,/en-us/library/ee488225.aspx右侧从“This function maps a character string to a wide-character (Unicode) string.”开始,到“the function returns 0 and sets GetLastError with the error ERROR_NO_UNICODE_TRANSLATION.”结束)
代码片段如下:#define KGLOG_PROCESS_ERROR(Condition) \
do \
{ \
if (!Condition) \
{ \
printf("KGLOG_PROCESS_ERROR(%s) at line %d in %s\n", #Condition, __LINE__, __FUNCTION__ ); \
goto Exit0; \
} \
} while (false)
#define KD_N_CODE_PAGE 936 // 936 ANSI/OEM - Simplified Chinese (PRC, Singapore)
// 函数作用:打印字符的特定子串(针对可能含有中文的情况)
// 参数nSubStart:子串起始索引
// 参数nSubLen:子串长度
// 返回是否执行成功
BOOL PrintSubStr(LPCSTR pszStr, INT nSubStart, INT nSubLen)
{
BOOL bResult = FALSE;
LPWSTR pwszOut;
INT nBufLen;
INT nOutLen;
KGLOG_PROCESS_ERROR(pszStr == NULL);
KGLOG_PROCESS_ERROR(nSubStart >= 0);
KGLOG_PROCESS_ERROR(nSubLen >= 0);
nBufLen = MultiByteToWideChar(KD_N_CODE_PAGE, 0, pszStr, -1, NULL, 0);
KGLOG_PROCESS_ERROR(nBufLen >= 0);
pwszOut = new WCHAR[nBufLen];
KGLOG_PROCESS_ERROR(pwszOut != NULL);
nOutLen = MultiByteToWideChar(KD_N_CODE_PAGE, 0, pszStr, -1, pwszOut, nBufLen * sizeof(WCHAR));
KGLOG_PROCESS_ERROR(nOutLen == nBufLen);
pwszOut[nSubLen] = L'\0';
setlocale(LC_ALL,"chs"); // 设定本地语言为中文简体,为下面printf做准备
printf("%ls\n", pwszOut + nSubStart);
bResult = TRUE;
if (pwszOut)
delete[] pwszOut;
Exit0:
return bResult;
}
四、编程题
1.自定义一个链表结构。并用任意方法实现一个对给定链表进行排序的函数。
2.游戏内举行一个活动。设有56张民族卡片,每天每个玩家可以参与活动并获得N
张随机卡片,活动持续30天。假定玩家会每天都参加活动,即每人可得30*N张
卡片。
1)实现函数float Check1(int N)粗略计算对于不同的N,玩家集齐56张卡
片的概率。(如果你能答出下面一问,这一问可以不用答)
2)实现函数float Check2(int N, int C)粗略计算对于不同的N,玩家集齐
C张卡片的概率。
3.实现一个内存缓冲区类(用char数组做缓冲即可),至少实现:创建定长缓冲区、
类拷贝、扩大缓冲区长度(保留数据)三个主要功能。