关于C语言游戏开发笔试题

时间:2024年05月08日

/

来源:玫瑰花妖

/

编辑:本站小编

收藏本文

下载本文

以下是小编精心整理的关于C语言游戏开发笔试题,本文共12篇,仅供参考,希望能够帮助到大家。本文原稿由网友“玫瑰花妖”提供。

篇1:C语言游戏开发笔试题

1、村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了第三天传来一阵枪声,问有几条病狗,如何推算得出?

2、P先生、Q先生都具有足够的推理能力。这天,他们正在接受推理面试。

他们知道桌子的抽屉里有如下16张扑克牌:

红桃 A、Q、4

黑桃 J、8、4、2、7、3

草花 K、Q、5、4、6

方块 A、5

约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。

这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?

P先生:“我不知道这张牌。”

Q先生:“我知道你不知道这张牌。”

P先生:“现在我知道这张牌了。”

Q先生:“我也知道了。”3 楼高100层,你有2个玻璃球,在某一层n层扔下玻璃球会碎,而低于n层则玻璃球不会碎。

1)你会选择在第几层扔第一个玻璃球来得到最少的尝试次数?

2)假如没有电梯,每次都要上楼下楼,你会选择第几层扔第一个玻璃球来得到最短的路程(爬上爬下的楼层)?

完美世界20xxC++游戏开发笔试编程题

第一题

题意:给出一个序列a,需要找到一对位置(i, j)(j >i),使得a[j] - a[i]的值尽量大,同时i尽量大并且j尽量小,如果任意a[j] - a[i]都<=0,则输出-1,-1。

题解:从1到n扫一遍序列处理即可,i尽量大用>=,j尽量小用>即可。

代码:

#include

#include

using namespace std;

#define maxn (1000000)

int a[maxn], prei[maxn];

int main

{

int n;

cin >>n;

for(int i = 0; i < n; i++)

{

scanf(“%d”, &a[i]);

prei[i] = -1;

}

int g = -1;

for(int i = 0; i < n; i++)

{

if(g == -1 || a[i] <= a[g]) g = i;

if(a[g] < a[i+1]) prei[i+1] = g;

}

int d = 0, o = -1;

for(int i = 1; i < n; i++) if(prei[i] != -1)

{

if(a[i] - a[prei[i]] >d)

{

d = a[i] - a[prei[i]];

o = i;

}

}

if(o == -1) cout << -1 << “,” << -1 << endl;

else cout << prei[o] << “,” << o << endl;

return 0;

}

第二题

题意:给出一个序列,玩家需要跟boss进行博弈,玩家先手。每次只能从序列头或尾取一个值加到自己的得分上,玩家和boss都很聪明,求玩家和boss的最终得分。

题解:可以发现总分不是很大,可以记忆化搜索。d[i][j]表示当拿到的序列为a[i, j]时,从中的最高得分。转移方程是d[i][j] = max(a[i] + d[i+1][j], d[i][j-1] + a[j]),向下递归并且记录d[i][j]是否已得到即可(应该算是区间dp?)。

代码:

#include

#include

using namespace std;

#define maxn (111)

int a[maxn], d[maxn][maxn], vis[maxn][maxn], sum;

void dp(int l, int r, int tot)

{

if(vis[l][r]) return ;

if(l == r) { d[l][r] = a[l]; vis[l][r] = 1; return; }

dp(l + 1, r, tot - a[l]); dp(l, r - 1, tot - a[r]);

d[l][r] = max(tot - d[l + 1][r], tot - d[l][r - 1]);

vis[l][r] = 1;

}

int main

{

int N;

cin >>N;

for(int i = 1; i <= N; i++)

{

scanf(“%d”, &a[i]);

sum += a[i];

}

dp(1, N, sum);

cout << d[1][N] << “ ” << sum - d[1][N] << endl;

return 0;

}

面试技巧

自我介绍技巧

应聘者到外企或其他用人单位时,求职者往往最先被问及的问题就是“请先介绍介绍你自己”。这个问题看似简单,但求职者一定要慎重对待,它是你突出优势和特长,展现综合素质的好机会。回答得好,会给人留下良好的第一印象。

回答这类问题,要掌握几点原则:

1:开门见山,简明扼要,不要超过三分钟。

2:实事求是,不可吹得天花乱坠。

3:突出长处,但也不隐瞒短处。

4:所突出的长处要与申请的职位有关。

5:善于用具体生动的实例来证明自己,说明问题,不要泛泛而谈。

6:说完之后,要问考官还想知道关于自己的什么事情。

为了表达更流畅,面试前应做些准备。而且由于主考喜好不同,要求自我介绍的时间不等。所以最明智的做法应是准备一分钟、三分钟、五分钟的介绍稿,以便面试时随时调整。 一分钟的介绍以基本情况为主,包括姓名、学历、专业、家庭状况等,注意表述清晰;三分钟的介绍除了基本情况之外,还可加上工作动机、主要优点缺点等;五分钟介绍,还可以谈谈自己的人生观,说些生活趣事,举例说明自己的优点等。

篇2:关于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?

更多相关文章推荐:

1.计算机二级C语言笔试题目

2.有趣的C语言笔试题

3.计算机二级C语言试题

4.计算机二级C语言考试题目

篇3: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?

篇4:C游戏开发笔试题

1什么是头文件依赖?你注意过这些问题吗?你注意过编译的时间吗?你怎么改进编译时间?

2 什么是面向对象?你在哪些方面用过面向对象?带来了什么好处?又有什么弊端?

3什么是接口编程.com,他带来了什么好处?适用于什么地方?

4 什么是设计模式?使用设计模式有什么好处?列举你使用过的设计模式知识:

1 一寸山河一寸血,___________。是_____说的。

2 抗战历时____年,最多百分之____的土地沦陷,军民伤亡____。

篇5:C游戏开发笔试题

1 村子中有50个人,每人有一条狗。在这50条狗中有病狗(这种病不会传染)。于是人们就要找出病狗。每个人可以观察其他的49条狗,以判断它们是否生病,只有自己的狗不能看。观察后得到的结果不得交流,也不能通知病狗的主人。主人一旦推算出自己家的是病狗就要枪毙自己的狗,而且每个人只有权利枪毙自己的狗,没有权利打死其他人的狗。第一天,第二天都没有枪响。到了第三天传来一阵枪声,问有几条病狗,如何推算得出?

2 P先生、Q先生都具有足够的推理能力。这天,他们正在接受推理面试。

他们知道桌子的抽屉里有如下16张扑克牌:

红桃 A、Q、4

黑桃 J、8、4、2、7、3

草花 K、Q、5、4、6

方块 A、5

约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。

这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?

P先生:“我不知道这张牌。”

Q先生:“我知道你不知道这张牌。”

P先生:“现在我知道这张牌了。”

Q先生:“我也知道了。”3 楼高100层,你有2个玻璃球,在某一层n层扔下玻璃球会碎,而低于n层则玻璃球不会碎。

1)你会选择在第几层扔第一个玻璃球来得到最少的尝试次数?

2)假如没有电梯,每次都要上楼下楼,你会选择第几层扔第一个玻璃球来得到最短的路程(爬上爬下的楼层)?

篇6:C语言开发工程师笔试题

1、改错

如下程序能不能正确输出,如果不能,让他正确输出hello字符串。

void New(char 星符号 p) { p = new char[5]; } void main { char星符号 p = NULL; New(p); strcpy(p, “hello”); printf(“%s”, p); }

2、排列算法

一个数组{3,4,5,6,3},请输出这个数组的全排列,比如34563、43563、33456...。

#include

#include

template

void Print(T星符号 tArray, int iSize)

{

for(int i = 0; i < iSize; ++i)

{

std::cout << tArray[i] << ' ';

}

std::cout << std::endl;

}

template

void Permutation(T星符号 tArray, int iSize)

{

int星符号 iIndex = new int[iSize + 1];

for(int i = 0; i < iSize; ++i)

{

iIndex [i] = iSize - i;

}

Print(tArray, iSize);

for(int i = iSize - 1; i >0; )

{

-- iIndex [i];

--i;

int j = iSize - 1;

do

{

if(tArray[j--] != tArray[i++])

{

std::swap(tArray[j--], tArray[i++]);

}

}while(j >i);

Print(tArray, iSize);

i = iSize - 1;

for(;iIndex [i] == 0; --i)

{

iIndex [i] = iSize - i;

}

}

delete iIndex;

}

int main

{

int a = {3,4,5,6,3};

Permutation(a,5);

}

篇7:C语言开发工程师笔试题

1、数据结构

在二叉树中找出和为某一输入值的所有路径。

#include

void getPath(struct treeNode星符号 node, int sum, vector& stack, int currentSum) { //stack用来存放路径,sum为输入值

} if (node == NULL) return; currentSum += node->id; stack.push_back(node->id); if (node->lchild != NULL) getPath(node->lchild, sum, stack, currentSum); if (node->rchild != NULL) getPath(node->rchild, sum, stack, currentSum); if (node->lchild == NULL && node->rchild == NULL) { if (currentSum == sum) { vector::iterator it = stack.begin; for (; it != stack.end; ++it) printf(“%d ”, 星符号it); printf(“/n”); } } stack.pop_back;

2、编写程序:如何获得一个整数的二进制表达中有多少个1?

篇8:C语言开发工程师笔试题

1、编写程序:在O(n)时间复杂度内从数组array[0..n-1]中找出第k个最小的元素。 说明:算法可以对array中的元素进行排序。

2、综合考察:

银行有个存有n个用户编号的文件,每个数都小于n,其中n=10的7次方。每个编号都不重复。

 输出:n个数升序排列。

 约束条件:内存最多有2兆的空间,运行时间复杂度为O(n)。

c++数据结构算法面试笔试题篇

1请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?

2请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢? UDP,TCP 在传输层,IP在网络层, TCP/IP是英文Transmission Control Protocol/Internet Protocol的缩写,意思是“传输控制协议/网际协议”。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如 T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7 层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路 层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:

应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。

传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。

网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

Q3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?

一 般意义上说交换机是工作在数据链路层。但随着科技的发展,现在有了三层交换机,三层交换机已经扩展到了网络层。也就是说:它等于“数据链路层 + 部分网络层”。交换机中传的是帧。通过存储转发来实现的。路由器是工作在网络层。路由器中传的是IP数据报。主要是选址和路由。

Q4:请问C++的类和C里面的struct有什么区别?

结构是一种将数据集合成组的方法,类是一种同时将函数和数据都集合成组的方法。结构和类在表面上的唯一区别是:类中的成员在默认情况下是私有的,而结构中的成员在默认情况下是公用的。

class foo

{

private:

int data1;

public:

void func;

};

可以写成:

class foo

{

int data1;

public:

void func;

};

因为在类中默认的是私有的,所以关键字private就可以不写了。

如果想用结构完成这个类所作的相同的事,就可以免去关键字public,并将公有成员放置在私有成员之前:

struct foo

{

void func;

private:

int data1;

};

Q5:请讲一讲析构函数和虚函数的用法和作用?

在 JAVA里没有象C++中的,所谓的析构函数 ,因为当一个对象不在使用的时候,它会自动被垃圾回收器回收,所以也就用不着析构函数了, 那个finalize 也只有在被垃圾回收器回收,才会被执行,而且很多时候,垃圾回收器并不一定执行,所以它不能当做C++中的,所谓的析构函数使用, 虚函数在JAVA里也是没有的,比较象近的应该算是abstract。

Q6:全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?

1)、全局变量的作用用这个程序块,而局部变量作用于当前函数

2)、前者在内存中分配在全局数据区,后者分配在栈区

3)、生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在

4)、使用方式不同:通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用

Q7:一些寄存器的题目,主要是寻址和内存管理等一些知识。

Q8:8086是多少位的系统?在数据总线上是怎么实现的?

8086微处理器初次发布时,这块16位芯片仅包含29000个晶体管,运行速度为5MHz。而当今基于x86架构的奔腾4处理器,已经包含5500万个晶体管,运行速度提高了600倍以上,高达3.06GHz。

8086是高性能的第三代微处理器,是Intel系列的16位微处理器,它是采用HMOS工艺制造的,内部包含约29,000个晶体管。

8086 有16根数据线和20根地址线,因为可用20位地址,所以可寻址的地址空间达220即1M字节。8086工作时,只要一个5V电源和一相时钟,时钟频率为 5MHz。后来,Intel公司推出的8086-1型微处理器时钟频率高达10MHz,8086-2型微处理器时钟频率达8MHz。

1、局部变量能否和全局变量重名

答:能,局部会屏蔽全局。要用全局变量,需要使用“::”

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

2、如何引用一个已经定义过的全局变量

答:extern

可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中 为什么

答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

c++数据结构算法面试笔试题篇

1、语句for( ;1 ;)有什么问题 它是什么意思

答:和while(1)相同。

2、do……while和while……do有什么区别

答:前一个循环一遍再判断,后一个判断以后再循环

3、请写出下列代码的输出内容 以下是引用片段:

#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

4、static全局变量与普通的全局变量有什么区别 static局部变量和普通局部变量有什么区别 static函数与普通函数有什么区别

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。 static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

5、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

c++数据结构算法面试笔试题篇

1、队列和栈有什么区别

队列先进先出,栈后进先出

2、写出下列代码的输出内容 以下是引用片段:

#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星符号); { INCp=&inc; int temp =p(arg1); fun(&temp,&arg1, arg2); void show(FUNC2 fun,int arg1, int星符号arg2)

printf(“%d\\n”,星符号arg2);

}

main

{

int a;

show(multi,10,&a);

return 0;

}

答:110

篇9:c语言笔试题

c语言笔试题大全

以下是华为c语言笔试题大全,

1、局部变量能否和全局变量重名?

答:能,局部会屏蔽全局。要用全局变量,需要使用“::”

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

2、如何引用一个已经定义过的全局变量?

答:extern

可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错

4、语句for( ;1 ;)有什么问题?它是什么意思?

答:和while(1)相同。

5、do……while和while……do有什么区别?

答:前一个循环一遍再判断,后一个判断以后再循环

6、请写出下列代码的输出内容

#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

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

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的.。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

3、设有以下说明和定义:

typedef union {long i; int k[5]; char c;} DATE;

struct data { int cat; DATE cow; double dog;} too;

DATE max;

则语句 printf(“%d”,sizeof(struct date)+sizeof(max));的执行结果是:___52____

答:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20

data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.

所以结果是 20 + 32 = 52.

当然...在某些16位编辑器下, int可能是2字节,那么结果是 int2 + DATE10 + double8 = 20

4、队列和栈有什么区别?

队列先进先出,栈后进先出

、写出下列代码的输出内容

#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)

{

INCp=&inc;

int temp =p(arg1);

fun(&temp,&arg1, arg2);

printf(“%d\\n”,*arg2);

}

main()

{

int a;

show(multi,10,&a);

return 0;

}

答:110

7、请找出下面代码中的所以错误

说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”

1、#include“string.h”

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

答:

方法1:

int main(){

char* src = “hello,world”;

int len = strlen(src);

char* dest = (char*)malloc(len+1);//要为\\0分配一个空间

char* d = dest;

char* s = &src[len-1];//指向最后一个字符

while( len-- != 0 )

*d++=*s--;

*d = 0;//尾部要加\\0

printf(“%s\\n”,dest);

free(dest);// 使用完,应当释放空间,以免造成内存汇泄露

return 0;

}

方法2:

#include

#include

main()

{

char str[]=“hello,world”;

int len=strlen(str);

char t;

for(int i=0; i

{

t=str[i];

str[i]=str[len-i-1]; str[len-i-1]=t;

}

printf(“%s”,str);

return 0;

}

1.-1,2,7,28,,126请问28和126中间那个数是什么?为什么?

第一题的答案应该是4^3-1=63

规律是n^3-1(当n为偶数0,2,4)

n^3+1(当n为奇数1,3,5)

答案:63

2.用两个栈实现一个队列的功能?要求给出算法和思路!

设2个栈为A,B, 一开始均为空.

入队:

将新元素push入栈A;

出队:

(1)判断栈B是否为空;

(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;

(3)将栈B的栈顶元素pop出;

这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好,

3.在c语言库函数中将一个字符转换成整型的函数是atool()吗,这个函数的原型是什么?

函数名: atol

功 能: 把字符串转换成长整型数

用 法: long atol(const char *nptr);

程序例:

#include

#include

int main(void)

{

long l;

char *str = “98765432”;

l = atol(lstr);

printf(“string = %s integer = %ld\\n”, str, l);

return(0);

}

2.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

c用宏定义,c++用inline

3.直接链接两个信令点的一组链路称作什么?

PPP点到点连接

4.接入网用的是什么接口?

5.voip都用了那些协议?

6.软件测试都有那些种类?

黑盒:针对系统功能的测试    白合:测试函数功能,各函数接口

7.确定模块的功能和模块的接口是在软件设计的那个队段完成的?

概要设计阶段

8.enum string

{

x1,

x2,

x3=10,

x4,

x5,

}x;

问x= 0x801005,0x8010f4 ;

9.unsigned char *p1;

unsigned long *p2;

p1=(unsigned char *)0x801000;

p2=(unsigned long *)0x810000;

请问p1+5= ;

p2+5= ;

三.选择题:

1.Ethternet链接到Internet用到以下那个协议?

A.HDLC;B.ARP;C.UDP;D.TCP;E.ID

2.属于网络层协议的是:

A.TCP;B.IP;C.ICMP;D.X.25

3.Windows消息调度机制是:

A.指令队列;B.指令堆栈;C.消息队列;D.消息堆栈;

4.unsigned short hash(unsigned short key)

{

return (key>>)%256

}

请问hash(16),hash(256)的值分别是:

A.1.16;B.8.32;C.4.16;D.1.32

四.找错题:

1.请问下面程序有什么错误?

int a[60][250][1000],i,j,k;

for(k=0;k<=1000;k++)

for(j=0;j<250;j++)

for(i=0;i<60;i++)

a[i][j][k]=0;

把循环语句内外换一下

2.#define Max_CB 500

void LmiQueryCSmd(Struct MSgCB * pmsg)

{

unsigned char ucCmdNum;

......

for(ucCmdNum=0;ucCmdNum

{

......;

}

死循环

3.以下是求一个数的平方的程序,请找出错误:

#define SQUARE(a)((a)*(a))

int a=5;

int b;

b=SQUARE(a++);

4.typedef unsigned char BYTE

int examply_fun(BYTE gt_len; BYTE *gt_code)

{

BYTE *gt_buf;

gt_buf=(BYTE *)MALLOC(Max_GT_Length);

......

if(gt_len>Max_GT_Length)

{

return GT_Length_ERROR;

}

.......

}

五.问答题:

1.IP Phone的原理是什么?

IPV6

2.TCP/IP通信建立的过程怎样,端口有什么作用?

三次握手,确定是哪个应用程序使用该协议

3.1号信令和7号信令有什么区别,我国某前广泛使用的是那一种?

4.列举5种以上的电话新业务?

更多相关的笔试题目,大家敬请继续阅读:爱立信技术类笔试题java笔试题  东软笔试题国美智力笔试题目

篇10:游戏开发笔试题

史密斯夫妇邀请另外四对夫妇就餐,已知他们每个人都不和自己握手、不和自己的配偶握手、且不和同一个人握手一次以上。在大家见面握手寒暄后,史密斯问大家握手了几次,每个人的答案都不一样。问:史密斯太太握手几次。

几何题

两圆相交,只有2交点A、B,过A点做线段CAD,CA、AD为两圆的弦,问什么情况下CAD最长,并证明

提示圆心角和圆周角的两倍关系。

概率题

扑克有6种牌,无花色区别,每种牌数量任意!

问两人对弈,每人一次抽5支牌时,凑出顺子、对、两对、三条、四条…的概率,并排列

编程题

已知二叉树前序遍历和中序遍历,求后序遍历的结果。

篇11:c语言类笔试题

c语言类笔试题

应届毕业生求职网整理了c语言类笔试题,供参考:

c语言

#include “stdio.h”

main

{

FILE *fp;

char ch,filename[10];

scanf(“%s”,filename);

if((fp=fopen(filename,“w”)==NULL)

{

printf(“cann't open file\\n”);

exit(0);

}

ch=getchar();

while(ch!='#')

{

fputc(ch,fp);

putchar(ch);

ch=getchar();

}

fclose(fp);

}

篇12:c语言面试题笔试题

预处理器(Preprocessor)

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

我在这想看到几件事情:

1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)

2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。

3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。

4). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。

2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) (A) : (B))

这个测试是为下面的目的而设的:

1). 标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

2). 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。

3). 懂得在宏中小心地把参数用括号括起来

4). 我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事?

least = MIN(*p++, b);

3. 预处理器标识#error的目的是什么?

如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。

死循环(Infinite loops)

4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

这个问题用几个解决方案。我首选的方案是:

while(1)

{

}

一些程序员更喜欢如下方案:

for(;;)

{

}

这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的

基本原理。如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么。”这会给我留下一个坏印象。

第三个方案是用 goto

Loop:

...

goto Loop;

应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

数据声明(Data declarations)

5. 用变量a给出下面的定义

a) 一个整型数(An integer)

b) 一个指向整型数的指针(A pointer to an integer)

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointerto an integer)

d) 一个有10个整型数的数组(An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers tointegers)

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

答案是:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argumentand returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

人们经常声称这里有几个问题是那种要翻一下书才能回答的问题,我同意这种说法。当我写这篇文章时,为了确定语法的正确性,我的确查了一下书。但是当我被面试的时候,我期望被问到这个问题(或者相近的问题)。因为在被面试的这段时间里,我确定我知道这个问题的答案。应试者如果不知道所有的答案(或至少大部分答案),那么也就没有为这次面试做准备,如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢?

Static

6. 关键字static的作用是什么?

这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:

1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。

Const

7.关键字const是什么含意?

我只要一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:EmbeddedSystems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思?

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:

1). 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。)

2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

Volatile

8. 关键字volatile有什么含意 并给出三个不同的例子。

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器)

2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3). 多线程应用中被几个任务共享的变量回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。

1). 一个参数既可以是const还可以是volatile吗?解释为什么。

2). 一个指针可以是volatile 吗?解释为什么。

3). 下面的函数有什么错误:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

下面是答案:

1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)

{

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

long square(volatile in

[c语言面试题笔试题]

国二c语言笔试题

Web前端开发工程师笔试题

笔试题

智力题笔试题

笔试题structure

下载关于C语言游戏开发笔试题(合集12篇)
关于C语言游戏开发笔试题.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
最新范文更多
点击下载本文文档