以下是小编整理的C网络游戏程序员笔试题,本文共9篇,欢迎阅读分享。

篇1:C网络游戏程序员笔试题
1 请写代码打印100之内的素数,讲求效率(请做你的解法的效率分析)
2 求m,n的最大公约数
3 输入10个字符串,打印出其中重复的字符串以及重复的次数
4 请画图例(UML最好),给出windows下的文件目录的设计模式
5 用OO表示狼吃羊羊吃草
问答题:
1 什么是subversion?它与vss,cvs的区别在哪?或者有什么优势?
2 什么是wiki,关于程序项目的wiki你使用过哪些?wiki对你有什么帮助吗?wiki与程序文挡的差别在哪?
3 什么是tdd?你使用过吗?tdd的关键在哪?跟传统的单元测试相比,有什么优越性?
4 什么是单元测试?你用过哪些单元测试工具?他们的区别和好处各有哪些?你主要倾向于哪一种?
5 什么是编程规范?你倾向于什么样的规范?他的好处在哪?
6 什么是mfc?你经常使用那些mfc类?那么为什么很多人不主张使用mfc?
7 什么是头文件依赖?你注意过这些问题吗?你注意过编译的时间吗?你怎么改进编译时间?
8 什么是面向对象?你在哪些方面用过面向对象?带来了什么好处?又有什么弊端?
9 什么是接口编程.com,他带来了什么好处?适用于什么地方?
10 什么是设计模式?使用设计模式有什么好处?列举你使用过的设计模式
后面还有一道文学诗歌,一道历史常识题以及三道逻辑推理题。
篇2:C网络游戏程序员笔试题
1. New delete 与malloc free 的联系与区别?
答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.
2. #define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?
答案:i 为30.
3. 有哪几种情况只能用intialization list 而不能用assignment?
答案:当类中含有const、reference 成员变量;基类的构造函数都需要初始化表。
4. C++是不是类型安全的?
答案:不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)。C#是类型安全的。
5. main 函数执行以前,还会执行什么代码?
答案:全局对象的构造函数会在main 函数之前执行。
6. 描述内存分配方式以及它们的区别?
1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。
2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
3) 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多。
7.struct 和 class 的区别
答案:struct 的成员默认是公有的,而类的成员默认是私有的。struct 和 class 在其他方面是功能相当的。
从感情上讲,大多数的开发者感到类和结构有很大的差别。感觉上结构仅仅象一堆缺乏封装和功能的开放的内存位,而类就象活的并且可靠的社会成员,它有智能服务,有牢固的封装屏障和一个良好定义的接口。既然大多数人都这么认为,那么只有在你的类有很少的方法并且有公有数据(这种事情在良好设计的系统中是存在的!)时,你也许应该使用 struct 关键字,否则,你应该使用 class 关键字。
8.当一个类A 中没有生命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。(Autodesk)
答案:肯定不是零。举个反例,如果是零的话,声明一个class A[10]对象数组,而每一个对象占用的空间是零,这时就没办法区分A[0],A[1]…了。
9. 在8086 汇编下,逻辑地址和物理地址是怎样转换的?(Intel)
答案:通用寄存器给出的地址,是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。
篇3:C网络游戏程序员笔试题
1. “引用”与指针的区别是什么?
指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。此外,就是上面提到的对函数传ref和pointer的区别。
2. 什么时候需要“引用”?
流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。
篇4:C程序员笔试题
1、不正确的附值或赋初值方式为__
a、char str=“string”;
b、char str[10]; str=“string”;
c、char *p=“string”; c
d、char *p; p=“string”;
2、对于以下的变量定义,表达式___是正确的
struct node {
char s[10];
int k;
} p[4];
a、p->k=2;
b、p[0].s=“abc”;
c、p[0]->k=2;
d、p->s='a';
3、在64位高档机中,long占字节数为
a、4 b、8 c、32 d、64 b
4、函数中局部变量生成于__中
a、堆 b、栈 c、静态存储区 d、代码存储区 c
5、下面程序的输出__
#pragma pack(1) //如果#pragma pack(4)
void main
{
struct test {
char c;
short s1;
short s2;
int i;
};
cout<
}
a、9 b、10 c、12 d、16
6、下面的程序段:
char a[3],b=“china”;
a=b;
printf(“%s”,a);
a、输出china b、ch c、chi d、编译出错
篇5:C程序员笔试题
1、下列函数中,可作为虚函数的是————
a、全局函数 b、构造函数
c、静态全局函数 d、析构函数
2、对静态成员不正确的描述是——
a、静态成员不属于对象,是类的共享成员
b、要在类外定义初始化
c、调用时,要通过类或对象激活,所以静态成员函数拥有this指针
d、非静态成员函数也可以操作静态数据成员
3、在创建派生对象时,构造函数的执行对象是——
a、对象成员构造函数、基类构造函数、派生类本身的构造函数
b、派生类本身的构造函数、基类构造函数、对象成员构造函数
c、基类构造函数、派生类本身的构造函数、对象成员构造函数
d、基类构造函数、对象成员构造函数、派生类本身的构造函数
4、假设V为抽象类,下列声明哪个正确
a、V fun(int) b、V *p
c、int fun(V) d、V Obj
5、假设已定义变量float data;
以二进制方式把data值写入输出文件流对象outfile中去,正确的是:
a、outfile.write((float *)&data, sizeof(float));
b、outfile.write((float *)&data, data);
c、outfile.write((char *)&data, sizeof(float));
d、outfile.write((char *)&data, data);
6、如下类定义:
class Foo {
public:
Foo(int v):value(v) //a
~Foo //b
private:
Foo //c
int value=0; //d
};
有错误的是____
7、下列关于栈的叙述正确的是
a、在栈中只能插入数据 b、只能删除数据
c、栈是先进先出的线性表 d、是先进后出的线性表
8、一个队列入列顺序是1,2,3,4,则输出顺序是
a、4321 b、1234 c、1432 d、3241
19、若执行语句: Point a(2), b[3], *c[4];
则Point类的构造函数被调用几次
a、1 b、2 c、3 d、4
篇6:C程序员笔试题
1、在x86架构的计算机上运行下面程序输出为_____
void main
{
int i=0x01020304;
unsigned char *pc=(unsigned char *)&i;
for(int j=0;j
cout<<*pc++<<“\t”; cout<<(int)*pc++<<“\t”;
}
}
a、4 3 2 1 b、1 2 3 4.
c、3 4 2 1 d、2 1 4 3
2、在SUN SPARC工作站上运行上面的程序结果为__
3、不是建立函数的目的选项是:
a、提高程序的运行效率
b、提高程序可读性
c、减少程序篇幅
d、减少程序文件所占内存
4、函数原型为void func;以下哪个函数指针类型定义是正确的
a、typedef FUNC void (*)
b、typedef void FUNC
c、typedef void (*FUNC);
d、typedef FUNC void;
篇7:C/C++程序员常见笔试题
C/C++程序员常见笔试题
试题1:分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
解答:
BOOL型变量:if(!var)
int型变量: if(var==0)
float型变量:
const float EPSINON = 0.00001;
if ((x >= – EPSINON) && (x <= EPSINON)
指针变量: if(var==NULL)
剖析:
考查对0值判断的“内功”,BOOL型变量的0判断完全可以写成if(var==0),而int型变量也可以写成if(!var),指针变量的判断也可以写成if(!var),上述写法虽然程序都能正确运行,但是未能清晰地表达程序的意思,
一般的,如果想让if判断一个变量的“真”、“假”,应直接使用if(var)、if(!var),表明其为“逻辑”判断;如果用if判断一个数值型变量 (short、int、long等),应该用if(var==0),表明是与0进行“数值”上的比较;而判断指针则适宜用if(var==NULL),这是一种很好的编程习惯。
浮点型变量并不精确,所以不可将float变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。如果写成if (x == 0.0),则判为错,得0分。
试题2:以下为Windows NT下的`32位C++程序,请计算sizeof的值
void Func ( char str[100] )
{
sizeof( str ) = ?
}
void *p = malloc( 100 );
sizeof ( p ) = ?
解答:
sizeof( str ) = 4
sizeof ( p ) = 4
剖析:
Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。
数组名的本质如下:
(1)数组名指代一种数据结构,这种数据结构就是数组;
例如:
char str[10];
cout << sizeof(str) << endl;
输出结果为10,str指代数据结构char[10]。
(2)数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;
char str[10];
str++; //编译出错,提示str不是左值
(3)数组名作为函数形参时,沦为普通指针。
Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。
试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?
least = MIN(*p++, b);
解答:
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
MIN(*p++, b)会产生宏的副作用
剖析:
这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换,
程序员对宏定义的使用要非常小心,特别要注意两个问题:
(1)谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答:
#define MIN(A,B) (A) <= (B) ? (A) : (B)
#define MIN(A,B) (A <= B ? A : B )
都应判0分;
(2)防止宏的副作用。
宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:
((*p++) <= (b) ? (*p++) : (*p++))
这个表达式会产生副作用,指针p会作三次++自增操作。
除此之外,另一个应该判0分的解答是:
#define MIN(A,B) ((A) <= (B) ? (A) : (B));
这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。
试题4:为什么标准头文件都有类似以下的结构?
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern “C” {
#endif
/*…*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
解答:
头文件中的编译宏
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif
的作用是防止被重复引用。
作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。例如,假设某个函数的原型为:
void foo(int x, int y);
该函数被C编译器编译后在symbol库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息,C++就是考这种机制来实现函数重载的。
为了实现C和C++的混合编程,C++提供了C连接交换指定符号extern “C”来解决名字匹配问题,函数声明前加上extern “C”后,则编译器就会按照C语言的方式将该函数编译为_foo,这样C语言中就可以调用C++的函数了。
试题5:编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh”
函数头是这样的:
//pStr是指向以’\0′结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充…
}
解答:
正确解答1:
void LoopMove ( char *pStr, int steps )
篇8:C笔试题
C笔试题
1) 读文件file1.txt的内容(例如):
12
34
56
输出到file2.txt:
56
34
12
(逆序)
2)输出和为一个给定整数的所有组合
例如n=5
5=1+4;5=2+3(相加的数不能重复)
则输出
1,4;2,3,
第一题,注意可增长数组的应用.
#include
#include
int main(void)
{ int MAX = 10;
int *a = (int *)malloc(MAX * sizeof(int));
int *b;
FILE *fp1;
FILE *fp2;
fp1 = fopen(“a.txt”,”r”);
if(fp1 == NULL)
{printf(“error1″);
exit(-1);
}
fp2 = fopen(“b.txt”,”w”);
if(fp2 == NULL)
{printf(“error2″);
exit(-1);
}
int i = 0;
int j = 0;
while(fscanf(fp1,”%d”,&a[i]) != EOF)
{i++;
j++;
if(i >= MAX)
{
MAX = 2 * MAX;
b = (int*)realloc(a,MAX * sizeof(int));
if(b == NULL)
{printf(“error3″);
exit(-1);
}a = b;
}}
for(;–j >= 0;)
fprintf(fp2,”%d\n”,a[j]);
fclose(fp1);
fclose(fp2);
return 0;
}
第二题.
#include
int main(void)
{unsigned long int i,j,k;
printf(“please input the number\n”);
scanf(“%d”,&i);
if( i % 2 == 0)
j = i / 2;
else
j = i / 2 + 1;
printf(“The result is \n”);
for(k = 0; k < j; k++)
printf(“%d = %d + %d\n”,i,k,i – k);
return 0;
}
#include
void main
{unsigned long int a,i=1;
scanf(“%d”,&a);
if(a%2==0)
{ for(i=1;i printf(“%d”,a,a-i);
}
else
for(i=1;i<=a/2;i++)
printf(” %d, %d”,i,a-i);
}
兄弟,这样的.题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例子,可谓是反序的经典例程.
void inverse(char *p)
{ if( *p = = ‘\0′ )
return;
inverse( p+1 );
printf( “%c”, *p );
}
int main(int argc, char *argv[])
{
inverse(“abc\0″);
return 0;
}
借签了楼上的“递规反向输出”
#include
void test(FILE *fread, FILE *fwrite)
{ char buf[1024] = {0};
if (!fgets(buf, sizeof(buf), fread))
return;
test( fread, fwrite );
fputs(buf, fwrite);
}
int main(int argc, char *argv[])
{ FILE *fr = NULL;
FILE *fw = NULL;
fr = fopen(“data”, “rb”);
fw = fopen(“dataout”, “wb”);
test(fr, fw);
fclose(fr);
fclose(fw);
return 0;
}
在对齐为4的情况下
struct BBB
{ long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0×1000000;
p+0×200=____;
(Ulong)p+0×200=____;
(char*)p+0×200=____;
解答:假设在32位CPU上,
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes
由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)
p=0×1000000;
p+0×200=____;
= 0×1000000 + 0×200*24
(Ulong)p+0×200=____;
= 0×1000000 + 0×200
(char*)p+0×200=____;
= 0×1000000 + 0×200*4
你可以参考一下指针运算的细节
篇9:c经典笔试题
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中.
#include
#include
int main(int argc,char* argv)
{
FILE* fp;
int i,j,k,num,NUM;
char c[50],t,ch;
if((fp=fopen(“A”,“r”))==NULL)
/*can be replaced by open
* int fd=open(“A”,O_RDONLY|O_CREAT);*/
{
printf(“fileA cannot be opened\n”);
exit(0);
}
printf(“\nA contents are:\n”);
for(i=0;(ch=fgetc(fp))!=EOF;i++)/*一个字符一个字符读*/
{
c[i]=ch;
putchar(c[i]);
}
num=i+1;
fclose(fp);
if((fp=fopen(“B”,“r”))==NULL)
{
printf(“fileB cannot be opened\n”);
exit(0);
}
printf(“\nB contents are :\n”);
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{
c[num+i]=ch;
putchar(c[num+i]);
}
fclose(fp);
NUM=num+i+1;
for(k=0;k
{
for(j=0;j
{
if(c[j]>c[j+1])
{
t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
}
printf(“\nC fileis:\n”);
fp=fopen(“C”,“w”);
for(i=0;i
{
putc(c[i],fp);/*将字符一个个写入文件中*/
putchar(c[i]);/*一个个输出字符*/
}
fclose(fp);
return 1;
}
★笔试题
文档为doc格式