夏普程序员笔试题和面试题答案目

夏普程序员笔试题和面试题答案目,第1张

试题1:

void test1()

{

char string[10]

char* str1 = "0123456789"

strcpy( string, str1 )

}

试题2:

void test2()

{

char string[10], str1[10]

int i

for(i=0i<10i++)

{

str1[i] = 'a'

}

strcpy( string, str1 )

}

试题3:

void test3(char* str1)

{

char string[10]

if( strlen( str1 ) <= 10 )

{

strcpy( string, str1 )

}

}

解答:

试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界

对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分

对试题3,if(strlen(str1) <= 10)应改为if(strlen(str1) <10),因为strlen的结果未统计’\0’所占用的1个字节。

考查对基本功的掌握:

(1)字符串以’\0’结尾

(2)对数组越界把握的敏感度

(3)库函数strcpy的工作方式,

(4)对strlen的掌握,它没有包括字符串末尾的'\0'。

试题4:

void GetMemory( char *p )

{

p = (char *) malloc( 100 )

}

void Test( void )

{

char *str = NULL

GetMemory( str )

strcpy( str, "hello world" )

printf( str )

}

解答:

试题4传入中GetMemory( char *p )函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完

char *str = NULL

GetMemory( str )

后的str仍然为NULL

试题5:

char *GetMemory( void )

{

char p[] = "hello world"

return p

}

void Test( void )

{

char *str = NULL

str = GetMemory()

printf( str )

}

试题5中

char p[] = "hello world"

return p

的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

试题6:

void GetMemory( char **p, int num )

{

*p = (char *) malloc( num )

}

void Test( void )

{

char *str = NULL

GetMemory( &str, 100 )

strcpy( str, "hello" )

printf( str )

}

试题6的GetMemory避免了试题4的问题,传入GetMemory的参数为字符串指针的指针,但是在GetMemory中执行申请内存及赋值语句

*p = (char *) malloc( num )

后未判断内存是否申请成功,应加上:

if ( *p == NULL )

{

...//进行申请内存失败处理

}

试题7:

void Test( void )

{

char *str = (char *) malloc( 100 )

strcpy( str, "hello" )

free( str )

... //省略的其它语句

}

试题7存在与试题6同样的问题,在执行

char *str = (char *) malloc(100)

后未进行内存是否申请成功的判断另外,在free(str)后未置str为空,导致可能变成一个“野”指针,应加上:

str = NULL

试题6的Test函数中也未对malloc的内存进行释放。

剖析:

试题4~7考查面试者对内存 *** 作的理解程度,基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确,却也绝非易事。

对内存 *** 作的考查主要集中在:

(1)指针的理解

(2)变量的生存期及作用范围

(3)良好的动态内存申请和释放习惯。

再看看下面的一段程序有什么错误:

swap( int* p1,int* p2 )

{

int *p

*p = *p1

*p1 = *p2

*p2 = *p

}

在swap函数中,p是一个“野”指针,有可能指向系统区,导致程序运行的崩溃。在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为:

swap( int* p1,int* p2 )

{

int p

p = *p1

*p1 = *p2

*p2 = p

}

预处理器(Preprocessor)

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

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

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

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

一、选择题(每题1分,共20分)

1. 下列那种语言是面向对象的(C)

A. C B. PASCAL C. C++ D. FORTRAN77

2.在 Windows9x 下,可以进入 MS-D0S 方式。当在 DOS 提示符下键入 (B ) 命令后,

系统将退出 MS-DOS方式,返回到 WIndows 方式。

A. CLOSE B. EXIT C. QUIT D. RETURN

3.下面哪些是面向对象的基本特性:(A,B,C )

A 多态 B 继承 C 封装 D 接口

4.在C++中经常要进行异常处理,下面哪些是异常处理常用到的关键词:(A,B,C)

A try B catch C throw D break E contiue

5.数据库技术中的“脏数据',是指(D)的数据。

A.错误 B.回返 C.未提交 D.未提交的随后又被撤消

6.TCP/IP是一种(A,B)

A.标准 B.协议 C.语言 D.算法

7. 下面有关计算机 *** 作系统的叙述中,不正确的是( )

A *** 作系统属于系统软件

B *** 作系统只负责管理内存储器,而不管理外存储器

C UNIX 是一种 *** 作系统

D 计算机的处理器、内存等硬件资源也由 *** 作系统管理

8.微机上 *** 作系统的作用是( D)

A 解释执行源程序 B 编译源程序

C 进行编码转换 D 控制和管理系统资源

9.下列存储器中存取速度最快的是(A )

A 内存 B 硬盘 C 光盘 D 软盘

10.在计算机中,—个字节是由多少个二进制位组成的( )

A. 4 B. 8 C. 16 D. 24

11. 存储16×16点阵的一个汉字信息,需要的字节数为( )

A 32 B 64 C 128 D 256

12. 以下选项中合法的字符常量是(C)

A."B" B. '\010' C. 68 D. D

13. 假定x和y为double型,则表达式x=2,y=x+3/2的值是()

A. 3.500000 B. 3 C. 2.000000 D. 3.000000

14. 以下合法的赋值语句是()

A. x=y=100 B. d--C. x+yD. c=int(a+b)

15. 设正x、y均为整型变量,且x=10 y=3,则以下语句

pprintf("%d,%d\n",x--,--y)的输出结果是()

A.10,3 B. 9,3 C. 9,2 D.10,2

16. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()

A .INPUT x、y、zB. scanf("%d%d%d",&x,&y,&z)

C. scanf("%d%d%d",x,y,z)D. read("%d%d%d",&x,&y,&z)

17.以下数组定义中不正确的是()

A) int a[2][3]B) int b[][3]={0,1,2,3}

C) int c[100][100]={0}D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}}

18. 以下程序的输出结果是()

main()

{

int a[4][4]={{1,3,5},{2,4,6},{3,5,7}}

printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0]

}

A) 0650 B) 1470 C) 5430 D) 输出值不定

19 以下程序的输出结果是()

main()

{

char st[20]= "hello\0\t\\\"

printf(%d %d \n",strlen(st),sizeof(st))

}

A) 9 9 B) 5 20 C) 13 20 D) 20 20

20. 当调用Windows API函数InvalidateRect,将会产生什么消息()

A:WM_PAINT B:WM_CREATE

C:WM_NCHITTEST D:WM_SETFOCUS

二、填空题(每题3分,共30分)

1.请列举当前一些当前流行的数据库引擎__________

2. 为了将当前盘当前目录中的所有文本文件(扩展名为.TXT)的内容打印输出,正确

的单条DOS命令为______。

3. 计算机网络分为局域网和广域网,因特网属于 广域网。

4. 设y是int型变量,请写出判断y为奇效的关系表达_______。

5. 设有以下程序:

main()

{ int n1,n2

scanf("%d",&n2)

while(n2!=0)

{ n1=n2%10

n2=n2/10

printf("%d",n1)

}

}

程序运行后,如果从键盘上输入1298;则输出结果为____。

6.以下程序运行后的输出结果是______。

main()

{ char s[ ]="9876",*p

for ( p=s pbr>}

7.以下函数的功能是:求x的y次方,请填空。

double fun( double x, int y)

{ int i

double z

for(i=1, z=xibr>return z

}

8.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调

用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。

FILE *myfling f1

myf= ______("test.t","rb")

fseek(myf,0,SEEK_END)f1=ftel(myf)

fclose(myf)

printf("%d\n",f1)

9. 以下程序输出的最后一个值是______。

int ff(int n)

{ static int f=l

f=f*n

return f

}

main()

{ int i

for(I=1I<=5I++ printf("%d\n",ff(i))

)

10. 以下程序运行后的输出结果是_____。

main()

{ int i=10, j=0

do

{ j=j+ii-

while(i>2)

printf("%d\n",j)

}

三、判断题(每题2分,共20分)

1:动态链结库不能静态调用。

2:UDP是面向无连接的网络连接

3:ASP是一种数据库引擎

4:队列是先进后出。

5:Weblogic是分布式应用服务器。

6:TCP,UDP都是传输层的协议。

7: 两个线程不能共存于同一地址空间

8: JAVA是一种跨平台的开发工具

9.在WINDOWS *** 作系统中对外设是以文件的方式进行管理

10. 虚拟内存实际是创建在硬盘上的

四、问答题(每题10分,共30分)

1. 写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出

的和以总和显示的SQL。

Select No、Name、Num1、Num2 from custom

2. 何为“事务处理”,谈谈你对它的理解。

3. 常用的数据结构有哪些?请枚举一些。(不少于5个)

4. 什么是OOP?什么是类?请对比类和对象实例之间的关系。

5. 有一组数字(3,10,6,8,98,22),请编程排序(升降序皆可),语言不限,算法不限,但须注明是何种算法。

wf11119@sina.com

JavaScript面试题:字符串处理

在应聘前端程序员时,在笔试部分经常会考到字符串处理的问题。这些题有一个特点,站在考官的角度去考虑,它考的不是你会不会,而是你能不能在不借用XX手册或者XX指南再或者百度谷歌的情况下,用比较简洁的方式写出答案来。就具体的字符串处理问题,郑州尚学堂给大家分享一下。

1、字符串转换

字符串转换是最基础的要求和工作,你可以将任何类型的数据都转换为字符串,你可以用下面三种方法的任何一种:

var num= 19// 19

var myStr = num.toString()// "19"

你同样可以这么做:

var num= 19// 19

var myStr = String(num)// "19"

或者,再简单点儿:

var num= 19// 19

var myStr = "" +num// "19"

2、字符串分割

字符串分割,即将一个字符串分割为多个字符串,JavaScript中给我们提供了一个非常方便的函数,如:

var myStr = "I,Love,You,Do,you,love,me"

var substrArray = myStr .split(",")// ["I", "Love", "You", "Do", "you", "love", "me"]

var arrayLimited = myStr .split(",", 3)// ["I", "Love", "You"]

split()的第二个参数,表示返回的字符串数组的最大长度。

3、获取字符串长度

字符串长度是在开发中经常要用到的,非常简单如下:

var myStr = "I,Love,You,Do,you,love,me"

var myStrLength = myStr.length//25

4、查询子字符串

很多人都会忘记这几个JavaScript的自带的方法,或者忘记它们的具体用法,从而导致在做题的时候不得不嵌套for循环来做。

第一个函数:indexOf(),它从字符串的开头开始查找,找到返回对应坐标,找不到返回-1,如下:

var myStr = "I,Love,you,Do,you,love,me"

var index = myStr.indexOf("you")// 7 ,基于0开始,找不到返回-1

第二个函数:lastIndexOf(),它从字符串的末尾开始查找,找到返回对应坐标,找不到返回-1,如下:

var myStr = "I,Love,you,Do,you,love,me"

var index = myStr.lastIndexOf("you")// 14

以上两个函数同样接收第二个可选的参数,表示开始查找的位置。

5、字符串替换

单单查到字符串应该还不会停止,一般题目都还经常会遇到让你查到并替换为你自己的字符串,例如:

var myStr = "I,love,you,Do,you,love,me"

var replacedStr = myStr.replace("love","hate")//"I,hate,you,Do,you,love,me"

默认只替换第一次查找到的,想要全局替换,需要置上正则全局标识,如:

var myStr = "I,love,you,Do,you,love,me"

var replacedStr = myStr.replace(/love/g,"hate")//"I,hate,you,Do,you,hate,me"

6、查找给定位置的字符或其字符编码值

想要查找给定位置的字符,你可以使用如下函数:

var myStr = "I,love,you,Do,you,love,me"

var theChar = myStr.charAt(8)// "o",同样从0开始

同样,它的一个兄弟函数就是查找对应位置的字符编码值,如:

var myStr = "I,love,you,Do,you,love,me"

var theChar = myStr.charCodeAt(8)//111

7、字符串连接

字符串连接 *** 作可以简单到用一个加法运算符搞定,如:

var str1 = "I,love,you!"

var str2 = "Do,you,love,me?"

var str = str1 + str2 + "Yes!"//"I,love,you!Do,you,love,me?Yes!"

同样,JavaScript也自带了相关的函数,如:

var str1 = "I,love,you!"

var str2 = "Do,you,love,me?"

var str = str1.concat(str2)//"I,love,you!Do,you,love,me?"

其中concat()函数可以有多个参数,传递多个字符串,拼接多个字符串。

8、字符串切割和提取

有三种可以从字符串中抽取和切割的方法,如:

第一种,使用slice():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.slice(1,5)//",lov"

第二种,使用substring():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.substring(1,5)//",lov"

第三种,使用substr():

var myStr = "I,love,you,Do,you,love,me"

var subStr = myStr.substr(1,5)//",love"

与第一种和第二种不同的是,substr()第二个参数代表截取的字符串最大长度,如上结果所示。

9、字符串大小写转换

常用的转换为大写或者小写字符串函数,如下:

var myStr = "I,love,you,Do,you,love,me"

var lowCaseStr = myStr.toLowerCase()//"i,love,you,do,you,love,me"

var upCaseStr = myStr.toUpperCase()//"I,LOVE,YOU,DO,YOU,LOVE,ME"

10、字符串匹配

字符串匹配可能需要你对正则表达式有一定的了解,先来看看match()函数:

var myStr = "I,love,you,Do,you,love,me"

var pattern = /love/

var result = myStr.match(pattern)//["love"]

console.log(result .index)//2

console.log(result.input )//I,love,you,Do,you,love,me

如你所见,match()函数在字符串上调用,并且接受一个正则的参数。来看看第二个例子,使用exec()函数:

var myStr = "I,love,you,Do,you,love,me"

var pattern = /love/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8152095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存