笔试面试题2Word格式.docx

上传人:b****1 文档编号:4285576 上传时间:2023-05-03 格式:DOCX 页数:83 大小:77.75KB
下载 相关 举报
笔试面试题2Word格式.docx_第1页
第1页 / 共83页
笔试面试题2Word格式.docx_第2页
第2页 / 共83页
笔试面试题2Word格式.docx_第3页
第3页 / 共83页
笔试面试题2Word格式.docx_第4页
第4页 / 共83页
笔试面试题2Word格式.docx_第5页
第5页 / 共83页
笔试面试题2Word格式.docx_第6页
第6页 / 共83页
笔试面试题2Word格式.docx_第7页
第7页 / 共83页
笔试面试题2Word格式.docx_第8页
第8页 / 共83页
笔试面试题2Word格式.docx_第9页
第9页 / 共83页
笔试面试题2Word格式.docx_第10页
第10页 / 共83页
笔试面试题2Word格式.docx_第11页
第11页 / 共83页
笔试面试题2Word格式.docx_第12页
第12页 / 共83页
笔试面试题2Word格式.docx_第13页
第13页 / 共83页
笔试面试题2Word格式.docx_第14页
第14页 / 共83页
笔试面试题2Word格式.docx_第15页
第15页 / 共83页
笔试面试题2Word格式.docx_第16页
第16页 / 共83页
笔试面试题2Word格式.docx_第17页
第17页 / 共83页
笔试面试题2Word格式.docx_第18页
第18页 / 共83页
笔试面试题2Word格式.docx_第19页
第19页 / 共83页
笔试面试题2Word格式.docx_第20页
第20页 / 共83页
亲,该文档总共83页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

笔试面试题2Word格式.docx

《笔试面试题2Word格式.docx》由会员分享,可在线阅读,更多相关《笔试面试题2Word格式.docx(83页珍藏版)》请在冰点文库上搜索。

笔试面试题2Word格式.docx

为什么?

执行结果是IamA

因为b对象构造时调用基类A的构造函数A(),得此结果。

3、在STL的应用中map这种key-value的应用很多,如果key的类型是GUID,该如何处理?

谁知道怎么处理补上吧。

4、一个内存变量a=5,有5个线程需要对其进行操作,其中3个对a进行加1操作,2个对a进行减1操作,为了保证能够得到正常结果6,需要使用什么方法?

(列出越多越好)

即要求列出线程同步方法,具体答案可见下面一题。

5、描述并比较以下对象:

事件,信标,临界区,互斥对象。

这些对象都是用于线程同步的对象。

临界区:

一种保证在某一时刻只有一个线程能访问数据的简便办法。

它只可以在同一进程内部使用。

主要API函数有,产生临界区:

InitializeCriticalSection,删除临界区:

DeleteCriticalSection,进入临界区:

EnterCriticalSection,退出临界区:

LeaveCriticalSection。

互斥对象:

互斥对象跟临界区相似,但它不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享,当然下面两者也有这个特点。

主要API函数有,创建互斥量:

CreateMutex,打开一个存在的互斥量:

OpenMutex,释放互斥量的使用权:

ReleaseMutex,关闭互斥量:

CloseHandle。

信标:

使用信号量(信标)最重要用途是:

信号允许多个线程同时使用共享资源,它指出了同时访问共享资源的线程最大数目。

它的API函数和使用方法都与互斥对象相似,如创建信号灯:

CreateSemaphore,传入的参数可以指定信号灯的初始值。

事件:

用来通知其他进程/线程某件操作已经完成。

API函数有创建,打开事件对象等,特殊点的是可以用函数SetEvent人工设置事件为有无信号状态,因此创建事件对象时可以有两种方式,一种为自动重置,一种为人工重置。

只有人工重置方式创建的事件对象才能正确使用函数SetEvent。

鉴于本套题考的是VC,有必要说明的是在MFC中对于各种同步对象都提供了相对应的类CCtiticalSection,CMutex,CSemaphore,CEvent,另外为使用等待功能封装了两个类:

CSingleLock和CMultiLock。

这些类方便了使用这些同步对象。

6、cdecl、stdcall、fastcall是什么?

哪种可以实现个数不定的入口参数,为什么?

三者都是函数调用的约定。

cdecl:

cdeclare(C调用约定)的缩写,是C和C++程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,由调用者把参数弹出栈,对于传送参数的内存栈是由调用者来维护的,正因为如此,只有这种调用方式可实现个数不定的入口参数(可变参数)。

stdcall:

是Pascal程序的缺省调用方式,规则是,按从右至左的顺序压参数入栈,被调用的函数在返回前清理传送参数的内存栈。

上两者的主要区别是前者由调用者清理栈,后者由被调用的函清理栈。

当然函数名的修饰部分也是不同的。

fastcall:

采用寄存器传递参数,特点就是快了。

二、程序设计(以下题目请写出实现代码)

1、有一段文本,统计其中的单词数。

例如:

Asatechnology,"

HailStorm"

issonewthatitisstillonlyknownbyits

codename.

注意:

单词间的间隔不一定是一个空格。

可执行程序代码如下,假设该文本已存入text这个数组里。

main()

char 

text[1000]={"

As 

technology 

 

'

HailStorm'

is 

so 

new 

that 

it 

still 

only 

known 

by 

its 

code 

name."

int 

i=0,count=0;

bool 

flag=false;

//前面的字符是否为字母

while 

(text[i]&

&

i<

1000) 

if 

(flag 

!

((text[i]>

='

a'

text[i]<

z'

)||(text[i]>

A'

text[i]<

Z'

))) 

{//前面是字母,当前不是字母,表示出现一个单词

count++;

else 

(!

flag 

// 

前面不是字母,当前是字母

flag=true;

i++;

if(flag)

cout<

<

count;

----------------------------------------------

插播广告啦:

版权所有:

朱科欢迎光临我的网站:

,各位转贴别删,劳动成果啊

2、国际象棋有8×

8格,每个格子可放一个棋子。

皇后的规则是可以横、竖、斜移动。

在一个棋盘放置8个皇后,并使它们互相无法威胁到彼此。

以下是可执行C代码,采用非递归解法,你如果想了解皇后问题的算法的详细过程可看下面网址:

不过下面的代码是以列优先进行试探的,不是上面网址介绍的那样以行优先的,当然本质是一样的。

#include 

iostream.h>

#define 

QUEEN 

//皇后数量

queen[QUEEN] 

;

//下标代表所在列号,值代表所在行号,

//如queen[1]=2表示第1列第2行有个皇后

row_YN[QUEEN] 

//棋局的每一行是否有棋,有则为1,无为0 

passive_YN[2*QUEEN-1] 

//斜率为1的斜线方向上是否有棋,共有2*QUEEN-1个斜线

negative_YN[2*QUEEN-1] 

//斜率为负1的斜线方向上是否有棋

//用全局变量,因全局数组元素值自动为0

row 

//游标,当前移动的棋子(以列计)

false 

//当前棋子位置是否合法

queen[0] 

-1 

//第0列棋子准备,因一开始移动的就是第0列棋子

count 

//一共有多少种解法的计数器 

while(row>

=0 

) 

//跳出条件是回溯到无法回溯时 

queen[row]++ 

//row列上的皇后走到下一行试试

if(queen[row] 

>

QUEEN) 

//当前列全部走完

queen[row] 

//当前列棋子置于准备状态

row-- 

//回溯到上一列的棋子

if(row>

=0) 

//回溯时要清理如下行,斜线的标志位 

row_YN[queen[row]] 

passive_YN[queen[row] 

row] 

negative_YN[QUEEN-1 

queen[row]] 

else

//先判断棋子所在行没有棋子

if(row_YN[queen[row]] 

== 

false) 

true 

//以下检查当前棋子是否与之前的棋子斜线相交

if( 

|| 

true) 

if(flag) 

flag为真表示位置合法

if(row 

QUEEN-1) 

//列到达最后,即最后一个皇后也找到位置,输出解

count++ 

//解法的数目加一 

"

***第"

count<

种解法***"

endl 

for(int 

i=0;

QUEEN;

i++)

第"

列皇后在第"

queen[i]<

行"

endl;

当前行设为有棋子

//当前行正斜率方向有棋子

//当前行负斜率方向上也有棋子

row++ 

找到解后再次回溯找另外的解,这同上面无解回溯是一样的

//原理同回溯

QUEEN<

皇后问题一共有"

种解法"

return 

3、输入二个64位的十进制数,计算相乘之后的乘积。

以下代码为网上别人贴出的,输入任意位数十进制数(包括小数,负数)都可以得出正确结果。

思路是:

将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示,然后模拟人们手工进行“竖式计算”的过程编写乘法。

MAX 

100

str_num(char 

str[]) 

//计算字符串的长度,等效于strlen(str);

i=0,num_str=0;

while(str[i]!

=0)

{num_str++;

return(num_str);

place(int 

num_str,char 

//将字符串高低颠倒。

temp=0,i=0,j=0;

for(i=0,j=num_str-1;

j;

i++,j--)

{temp=str[j];

str[j]=str[i];

str[i]=temp;

transition(unsigned 

a[],char 

str1[]) 

//数字字符转化为数字。

while(str1[i]!

{a[i]=str1[i]-'

0'

multiply_int(unsigned 

a[],unsigned 

b[],unsigned 

c[]) 

//大数相乘算法,入口为整形数组。

i=0,j=0;

for(i=0;

MAX;

for(j=0;

j<

j++)

c[i+j]+=a[i]*b[j];

c[i+j+1]+=c[i+j]/10;

c[i+j]%=10;

output(int 

sign,unsigned 

c[],int 

quan) 

//数据输出。

sign_temp=0,i=0;

The 

result 

is:

if(sign==1)

-"

for(i=MAX-1;

i>

-1;

i--)

if(sign_temp==0)

{if(c[i]!

sign_temp=1;

if(sign_temp==1)

if(i==quan-1)

."

c[i];

c[i]=0;

multiply_string(char 

str1[],char 

str2[],unsigned 

//大数相乘,入口为字符串。

unsigned 

a[MAX]={0},b[MAX]={0};

sign=0;

transition(a,str1);

transition(b,str2);

multiply_int(a,b,c);

sign_comp(char 

str2[]) 

//符号判断,如果为负数将作相应处理。

i=0,sign_num=0;

if(str1[0]==45)

{sign_num=!

sign_num;

MAX-1;

str1[i]=str1[i+1];

if(str2[0]==45)

str2[i]=str2[i+1];

(sign_num);

format(char 

//将输入的字符串进行格式化。

以得到字符的一些标志信息和相应格式的新数据串。

point=0,quan=0,i=0,j,k=0,sign_point=0,num_str=0;

num_str=str_num(str);

if(str[i]<

||str[i]>

9'

if(str[i]!

.'

{cout<

data 

error"

return(-1);

{point++;

sign_point=i;

if(point>

1)

if(point==1)

for(j=sign_point;

num_str;

str[j]=str[j+1];

num_str--;

quan=num_str-sign_point;

place(num_str,str);

return(quan);

clear(char 

//清空函数。

i;

str[i]=0;

main(void) 

//主函数。

str1[MAX]={0},str2[MAX]={0};

quan1=0,quan2=0,sign=0;

c[MAX*2+1]={0};

do

Please 

input 

the 

first 

number:

cin>

str1;

second 

str2;

sign=sign_comp(str1,str2);

quan1=format(str1);

quan2=format(str2);

if(quan1==-1||quan2==-1)

clear(str1);

clear(str2);

}while(quan1==-1||quan2==-1||str1[0]==0||str2[0]==0);

multiply_string(str1,str2,c);

output(sign,c,quan1+quan2);

所有题目到此结束,说实话后面两题的算法我就是看别人的代码(呵呵,再次实话,后两题代码也不是我写的,只是对已有代码做了些修改,使结构更清晰,便于阅读)理解清楚也用了2个小时以上,所以我还真没有自信将答案发到那个邮箱呢。

看白云黄鹤上别的学生的反响,让人怀疑这套题是否出得有点难了。

C++笔试题(十一)

constchar*,charconst*,char*const的区别问题几乎是C++面试中每次都会有的题目。

事实上这个概念谁都有只是三种声明方式非常相似很容易记混。

Bjarne在他的TheC++ProgrammingLanguage里面给出过一个助记的方法:

把一个声明从右向左读。

*constcp;

(*读成pointerto)

cpisaconstpointertochar

constchar*p;

pisapointertoconstchar;

charconst*p;

同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。

---------------------------------

下面这个程序执行后会有什么错误或者效果:

#defineMAX255

intmain()

unsignedcharA[MAX],i;

for(i=0;

=MAX;

A[i]=i;

解答:

MAX=255

数组A的下标范围为:

0..MAX-1,这是其一..

其二.当i循环到255时,循环内执行:

A[255]=255;

这句本身没有问题..但是返回for(i=0;

i++)语句时,

由于unsignedchar的取值范围在(0..255),i++以后i又为0了..无限循环下去.

注:

char类型为一个字节,取值范围是[-128,127],unsignedchar[0,255]

---------------------------------

编写用C语言实现的求n阶阶乘问题的递归算法:

longintfact(intn)

intx;

longinty;

if(n<

0) 

{

printf("

error!

}

if(n==0)

return1;

x=n-1;

y=fact(x);

return(n*y);

--------------------------------

二分查找算法:

1、递归方法实现:

intBSearch(elemtypea[],elemtypex,intlow,inthigh)

/*在下届为low,上界为high的数组a中折半查找数据元素x*/

intmid;

if(low>

high)return-1;

mid=(low+high)/2;

if(x==a

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2