台湾联发科技股份有限公司9月招聘面试题114道2020919

试题五(共 15分)

阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:

void addElement(Object): 在列表尾部添加一个对象;

Object lastElement(): 返回列表尾部对象;

int numberOfElement(): 返回列表中对象个数;

void removeLastElement(): 删除列表尾部的对象。

现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。

【C++代码 1】

class Stack :public LinkedList{

public:

void push(Object o){ addElement(o); }; //压栈

Object peek(){ return (1) ; }; //获取栈顶元素

bool isEmpty(){ //判断栈是否为空

return numberOfElement() == 0;

};

Object pop(){ //弹栈

Object o = lastElement();

(2) ;

return o;

};

};

【C++代码 2】

class Stack {

private:

(3) ;

public:

void push(Object o){ //压栈

list.addElement(o);

};

Object peek(){ //获取栈顶元素

return list. (4) ;

};

bool isEmpty(){ //判断栈是否为空

return list.numberOfElement() == 0;

};

Object pop(){//弹栈

Object o = list.lastElement();

list.removeLastElement();

return o;

};

};

【问题】

若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)


正确答案:
试题五参考答案
(1)lastElement()            (3分)
(2)removeLastElement()          (3分)
(3)LinkedList list           (3分)
(4)lastElement()            (3分)
(5)A,或继承            (3分)


试题六(共 15分)

阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、umberOfElement()以及removeLastElement()。四个方法的含义分别为:

void addElement(Object): 在列表尾部添加一个对象;

Object lastElement(): 返回列表尾部对象;

int numberOfElement(): 返回列表中对象个数;

void removeLastElement(): 删除列表尾部的对象。

现需要借助LinkedList来实现一个Stack栈类, Java代码1和Java代码2分别采用继承和组合的方式实现。

【Java代码1】

public class Stack extends LinkedList{

public void push(Object o){ //压栈

addElement(o);

}

public Object peek(){ //获取栈顶元素

return (1) ;

}

public boolean isEmpty(){ //判断栈是否为空

return numberOfElement() == 0;

}

public Object pop(){ //弹栈

Object o = lastElement();

(2) ;

return o;

}

}

【Java代码2】

public class Stack {

private (3) ;

public Stack(){

list = new LinkedList();

}

public void push(Object o){

list.addElement(o);

}

public Object peek(){//获取栈顶元素

return list. (4) ;

}

public boolean isEmpty(){//判断栈是否为空

return list.numberOfElement() == 0;

}

public Object pop(){ //弹栈

Object o = list.lastElement();

list.removeLastElement();

return o;

}

}

【问题】

若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)


正确答案:

试题六参考答案
(1)lastElement()            (3分)
(2)removeLastElement()          (3分)
(3)LinkedList list           (3分)
(4)lastElement()            (3分)
(5)A,或继承            (3分)

 


请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。 Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示: 公有成员函数 功能 push 入栈:在栈顶位置添加一个元素 pop 退栈:取出并返回栈顶元素 ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。 请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为: a,b,C C,b,a 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****料found****”。 //proj2.cpp include<iostream> using namespacc std; class Stack{ public: virtual void push(char C)=0; virtual char pop=0; };

class ArrayStack:public Stack{ char*P; int maxSizc; int top; public: ArravStack(int s) { top=0; maxSize=s: //*********found********* P=______; } ~ArrayStack { //*********found********* _______; } void push(char c) } if(top==maxSize){ cerr<<”Overflow! \n”: return; } //*********found********* _______; top++: } char pop { if(top==0){ cerr<<”Underflow!、n”; return‘\0’; } Top--; //*********found********* ______; } }; void f(Stack&sRef) { char ch[]={‘a’,‘b’,‘c’}; cout<<ch[0]<<”,”<<ch[1]<<”,”<<ch[2]<<endl; sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]); cout<<sRef.poP<<”,”; cout<<sRef.poP<<”,”; cout<<sRef.poP<<endl; } int main { ArrayStack as(10); f(as): return 0: }


正确答案:

(1)Ilew char[s]
(2)delete[]P
(3)P[top]=e
(4)return P[top]
【考点分析】
本题主要考查的是表示栈的抽象类Stack类及它的派生类ArrayStaek类、纯虚函数和成员函数。栈的节点一般使用指针表示,定义构造函数时要给指针分配空间,使用New语句来完成。~ArrayStack是析构函数,因为前面已经使用new来分配空间了,因此在这里要用delete语句来释放指针。
【解题思路】
(1)主要考查的是ArrayStack类的构造函数,在函数中要为P申请S个char型空间,应使用语句P=flew char[s];。
(2)主要考查析构函数,使用delete语句释放指针,即delete[]P;。
(3)主要考查push函数,top表示栈顶元素下标,添加的数据放到栈顶,因此使用语句P[top]=c;。
(4)主要考查pop函数,输出栈顶数据,top表示栈顶元素下标,因此使用语句return P[top];。


使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。

(1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。

(2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。

(3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下, size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。

(4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。

程序输出结果如下:

the top elem:1

the pop elem:1

the stack is empty

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test34_3.cpp清单如下:

include<iostream.h>

class stack

{

//** 1 **

public:

stack ( );

bool empty(){return size==-1;}

bool full() {return size==99;}

void push(int x);

void pop();

void top();

};

stack::stack()

{

//** 2 **

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

*(sp+i)=0;

size=-1;

}

void stack::push(int x)

{

//** 3 **

cout<<"the stack is full"<<end1;

else

{

size++;

*(sp+size) = x;

}

}

void stack::pop()

{

//** 4 **

cout<<"the stack is empty"<<end1;

else

{

cout<<"the pop elem:"<<*(sp+size)<<end1;

size--;

}

}

void stack::top()

{

if iempty() )

cout<<"the stack is empty"<<end1;

else

{

cout<<"the top elem:"<<*(sp+size)<<end1;

}

}

void main ( )

{

stack s;

s.push(1);

s.top();

s.pop();

s.top();

}


正确答案:(1) int *sp; int size; (2) sp=new int[100]; (3) if(full()) (4) if(empty())
(1) int *sp; int size; (2) sp=new int[100]; (3) if(full()) (4) if(empty()) 解析:本题主要考查的是考生利用类、数组、指针和基本控制结构等知识,建立经典数据结构的能力。栈在数据结构中是一应用范围很广的类,在这里实现的只是最核心的部分。在该题中特别注意使用new进行动态空间申请及指针在数组访问中的应用。


阅读以下说明C++代码,将应填入(n)处的字句写在对应栏内。

[说明]

以下程序的功能是实现堆栈的一些基本操作。堆栈类stack共有三个成员函数:empty判断堆栈是否为空;push进行人栈操作;pop进行出栈操作。

[C++程序]

include "stdafx. h"

include <iostream, h>

eonst int maxsize = 6;

class stack {

float data[ maxsize];

int top;

public:

stuck(void);

~ stack(void);

bool empty(void);

void push(float a);

float pop(void);

};

stack: :stack(void)

{ top =0;

cout < < "stack initialized." < < endl;

}

stack:: ~stack(void) {

cout < <" stack destoryed." < < endl;

bool stack:: empty (void) {

return (1);

void stack: :push(float a)

if(top= =maxsize) {

cout < < "Stack is full!" < < endl;

return;

data[top] =a;

(2);

}

float stack:: pop (void)

{ if((3)){

cout< < "Stack is undcrflow !" < < endl;

return 0;

(4);

return (5);

}

void main( )

{ stack s;

coat < < "now push the data:";

for(inti=l;i< =maxsize;i+ +) {

cout< <i< <" ";

s. push(i);

}

coat < < endl;

cout< < "now pop the data:";

for(i = 1 ;i < = maxsize ;i + + )

cout< <s. pop()< <" ";

}


正确答案:(1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top]
(1)top==0? true:false (2)top++(或者top =top+1)(3)top==0 (4)top--(或者top =top-1) (5)data[top] 解析:(1)判断堆栈是否为空的条件是top为0,而且本函数的返回值为布尔类型,故此处应该填写top==0? true:false;
(2)数据入栈后,栈顶指针要向上移动一个单元;
(3)top为0说明堆栈已经空了,此处if语句返回堆栈为空的提示;
(4)先将栈顶指针往下移动一个单元,才可以指向要出栈的数据;
(5)本行代码的功能是返回要出栈的数据。


台湾联发科技股份有限公司9月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1::-1表示什么?可用的回答 ::-1用于反转数组或序列的顺序。问题 Q2:请用代码简答实现stack?可用的回答 : stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作 class Stack(object): def _init_(self): self.stack = def push(self, value): # 进栈 self.stack.append(value) def pop(self): #出栈 if self.stack: self.stack.pop() else: raise LookupError(stack is empty!) def is_empty(self): # 如果栈为空 return bool(self.stack) def top(self): #取出目前stack中最新的元素 return self.stack-1 问题 Q3:谈谈你对闭包的理解?可用的回答 : #闭包函数的实例 # outer是外部函数 a和b都是外函数的临时变量 def outer( a ): b = 10 # inner是内函数 def inner(): #在内函数中 用到了外函数的临时变量 print(a+b) # 外函数的返回值是内函数的引用 return inner if _name_ = _main_: # 在这里我们调用外函数传入参数5 #此时外函数两个临时变量 a是5 b是10 ,并创建了内函数,然后把内函数的引用返回存给了demo # 外函数结束的时候发现内部函数将会用到自己的临时变量,这两个临时变量就不会释放, 会绑定给 这个内部函数demo = outer(5) # 我们调用内部函数,看一看内部函数是不是能使用外部函数的临时变量 # demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数 demo() # 15 demo2 = outer(7)问题 Q4:介绍一下except的用法和作用?可用的回答 : tryexceptexceptelsefinally 执行try下的语句,如果引发异常,则执行过程会跳到except语句。 对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。 try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行 如果存在finally语句,最后总是会执行。 问题 Q5:如何在python中使用三元运算符?可用的回答 :三元运算符是用于显示条件语句的运算符。这包含true或false值,并且必须为其评估语句。其基本语法为:三元运算符是用于显示条件语句的运算符。这包含true或false值,并且必须为其评估语句。其基本语法为:on_true if expression else on_false问题 Q6:Python中的docstring是什么?可用的回答 :Python文档字符串称为docstring,它是一种记录Python函数,模块和类的方法。可以通过内置方法_doc_获取问题 Q7:什么是Python中的迭代器?可用的回答 :在Python中,迭代器用于迭代一组元素,如列表之类的容器。问题 Q8:大数据的文件读取?可用的回答 : 1. 利用生成器generator 2. 迭代器进行迭代遍历:for line in file 问题 Q9:迭代器和生成器的区别?可用的回答 : 1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于 string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调 用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中 逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个 StopIteration异常 2)生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需 要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后 一次执行的位置和所有的数据值) 区别:生成器能做到迭代器能做的所有事,而且因为自动创建了iter()和next()方法,生成器显得特别简洁, 而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态 的自动方法,当发生器终结时,还会自动抛出StopIteration异常 问题 Q10:如果让你来防范网站爬虫,你应该怎么来提高爬取的难度?可用的回答 : 1. 判断headers的User-Agent; 2. 检测同一个IP的访问频率; 3. 数据通过Ajax获取; 4. 爬取行为是对页面的源文件爬取,如果要爬取静态网页的html代码,可以使用jquery去模仿写html。 算法题面试官常问到的一些算法题目整理如下(大概率


( 15 )请将下列栈类 Stack 补充完整

class Stack{

private:

int pList[100]; // int 数组 , 用于存放栈的元素

int top; // 栈顶元素 ( 数组下标 )

public:

Stack():top(0){}

void Push(const int &item); // 新元素 item 压入栈

int Pop(void); // 将栈顶元素弹出栈

};

void Stack::Push(const int &item){

if(top == 99) // 如果栈满 , 程序终止

exit(1);

top++; // 栈顶指针增 1

___________;

}

int Stack::Pop(){

if(top<0) // 如果栈空 , 程序终止

exit(1);

return pList[top--];

}


正确答案:


试题五(共 15分)

阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

【说明】

已知类 LinkedList 表示列表类,该类具有四个方法:addElement()、lastElement()、

numberOfElement()以及removeLastElement()。四个方法的含义分别为:

void addElement(Object): 在列表尾部添加一个对象;

Object lastElement(): 返回列表尾部对象;

int numberOfElement(): 返回列表中对象个数;

void removeLastElement(): 删除列表尾部的对象。

现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。

【C++代码 1】

class Stack :public LinkedList{

public:

void push(Object o){ addElement(o); }; //压栈

Object peek(){ return (1) ; }; //获取栈顶元素

bool isEmpty(){ //判断栈是否为空

return numberOfElement() == 0;

};

Object pop(){ //弹栈

Object o = lastElement();

(2) ;

return o;

};

};

【C++代码 2】

class Stack {

private:

(3) ;

public:

void push(Object o){ //压栈

list.addElement(o);

};

Object peek(){ //获取栈顶元素

return list. (4) ;

};

bool isEmpty(){ //判断栈是否为空

return list.numberOfElement() == 0;

};

Object pop(){//弹栈

Object o = list.lastElement();

list.removeLastElement();

return o;

};

};

【问题】

若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)? (5) (A. 继承 B. 组合)


正确答案:
试题五 分析
    本题考查面向对象基本概念和C++语言程序设计能力。
    继承和组合是面向对象程序设计中复用的基本手段。继承的方式是在实现类的过程中指定其父类,则该类将自动拥有父类的属性和方法;组合方式则是将某类的对象作为该类的成员,通过成员使用该类的属性和方法。
    本题中C++代码1采用的是继承方式,因此在Stack类中可以直接使用LinkedList类中定义的方法。空缺(1)要求获得栈顶元素,LinkedList类提供了lastElement()方法获得列表尾部的元素,因此可使用该方法获得栈顶元素;空缺(2)位于Stack类的pop()方法中,该方法不仅要获得栈顶元素,还要将栈顶元素删除,因此可以直接复用LinkedList类中的removeLastElement()方法。
    本题中C++代码2采用的是组合方式,因此在Stack类中需要通过LinkedList对象来使用其属性和方法。Stack类中的peek()方法要求获得栈顶元素,list一定是LinkedList类型的对象,因此空缺(3)应该定义link成员变量,空缺(4)应该调用link对象获得队列的尾部元素方法。
    若LinkedList方法新增加了一个公有的removeElement(int index)方法,采用继承方式的子类对象可直接使用该方法,而采用组合方式则必须通过对象形式进行访问,因此必须在Stack类中增加新的方法,并在该方法中通过list对象调用removeElement(int  index)。
试题五 参考答案
(1)lastElement()            (3分)
(2)removeLastElement()          (3分)
(3)LinkedList list           (3分)
(4)lastElement()            (3分)
(5)A,或继承            (3分)


由于行为面试的题目要求考官提出的问题必须让被测试者能够用行为或措施的形式来回答,所以对面试题目要求较高。()

此题为判断题(对,错)。


正确答案:√


阅读下列说明和C代码,将应填入(n)处的字句写在对应栏内。

【说明】

栈(Stack)结构是计算机语言实现中的一种重要数据结构。对于任意栈,进行插入和删除操作的一端称为栈顶(Stock Top),而另一端称为栈底(Stock Bottom)。栈的基本操作包括:创建栈(NewStack)、判断栈是否为空(IsEmpty)、判断栈是否已满(IsFull)、获取栈顶数据(Top)、压栈/入栈(Push)、弹栈/出栈(Pop)。

当设计栈的存储结构时,可以采取多种方式。其中,采用链式存储结构实现的栈中各数据项不必连续存储(如下图所示)。

以下C代码采用链式存储结构实现一个整数栈操作。

【C代码】

typedef struct List {

int data; //栈数据

struct List* next; //上次入栈的数据地址

}List;

typedef struct Stack{

List* pTop; //当前栈顶指针

}Stack;

Stack* NewStack() {return (Stack*) calloc(1/sizeof(Stack));}

int IsEmpty(Stack* S){//判断栈S是否为空栈

if((1))return 1;

return 0;

}

int Top(Stack* s){//获取栈顶数据。若栈为空,则返回机器可表示的最小整数

if(IsEmpty(S))return INT_ MIN;

return (2);

}

void Push(Stack* S,int theData) {//将数据theData压栈

List* newNode;

newNode=(List*)calloc(1/sizeof (List));

newNode->data=theData;

newNode->next=S->pTop;

S->pTop=(3);

}

void Pop(Stack* S) {//弹栈

List* lastTop;

if(IsEmpty(S) ) return;

lastTop=S->pTop;

S->pTop=(4);

free(lastTop);

}

define MD(a) a<<2

int main(){

int i;

Stack* myStack;

myStack= NewStack();

Push(myStack,MD(1));

Push(myStack,MD(2));

Pop(myStack);

Push(myStack,MD(3)+1);

while( !IsEmpty(myStack) ){

printf("%d",Top(myStack));

Pop(myStack);

}

return 0;

}

以上程序运行时的输出结果为:(5)


正确答案:(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode (4)S->pTop->next或lastTop->next (5)244
(1)S==NULL||S->pTop==NULL (2)S->pTop->data (3)newNode (4)S->pTop->next,或lastTop->next (5)244 解析:本题考查基本程序设计能力。
堆栈是软件设计中常使用的一种经典数据结构,题目给出的操作都是任何堆栈都具有的基本操作。堆栈的存储结构通常采用数组或链表形式,但无论采用哪种存储结构,整体上呈现的是后进先出的特点,即后进入堆栈的元素先出栈。题目中给出的结构体 Stack仅包含一个指向栈顶元素的指针(栈顶指针),当且仅当堆栈中没有元素时,该指针应为NULL。当向堆栈中增加元素时,首先需要动态创建该元素的存储区,并且栈顶指针指向该元素。当元素出栈时,栈顶指针则指向出栈元素的紧前一个元素。结构体List表示栈中元素,包含对应的数据和指向紧上次入栈的元素指针next,对于第1个入栈的元素,指针next为NULL,而其他元素中的指针next一定不为NULL。
C语言中,如果用一个整数型表达式表示条件判定语句的话,该表达式的值为。则表示假,非0表示真。从给定程序代码可以看出,对于函数IsEmpty,若其返回值为0则表示堆栈非空,否则表示堆栈为空。因此,对于空(1),必须填写可表示堆栈为空的判定语句:S=NULL||S->p)Top==NULL,这2个条件中只要有1个条件满足,则表明堆栈S为空。对于空(2),此时需要返回栈顶元素中的数据,而栈顶元素为S->pTop,所以对应的数据应该为S->pTop->data。
对于压栈操作Push,在为新元素获取存储空间后,必须调整堆栈的栈顶指针S->pTop指向新元素的存储区,即S->pTop=newNode。对于弹栈操作Pop,弹出栈顶元素lastTop后,需要调整栈顶指针,使其指向被弹出元素的下一个元素,即S->pTop=S->pTop->next,或S->pTop=lastTop->next。
对于main函数中宏MD(x),在程序预编译时会按字符替换为“x2”。所以在main函数中,首先入栈的元素为“12”,即整数4,第2个入栈的元素为“22”,即整数8,其次将8弹出,然后再将“32+1”入栈,C语言中“+”优先级高于“”,所以此时入栈者为整数24,而此时堆栈中有2个元素,其中栈顶元素为24,下一元素为4。最后,若堆栈非空,则循环完成显示栈顶元素的值、弹出栈顶元素的操作,直至堆栈为空。所以程序执行时的输出内容为“244”。


面试题5 回答问题:

什么是“班级文化”?你当班主任后,准备怎样进行班级文化建设?


正确答案:
          


相关考题:

考题 阅读下列说明和代码,回答问题1和问题2,将解答卸载答题纸的对应栏内。【说明】某一本地口令验证函数(C语言环境,X86_32指令集)包含如下关键代码:某用户的口令保存在字符数组origPassword中,用户输入的口令保存在字符数组userPassword中,如果两个数组中的内容相同则允许进入系统。【问题1】用户在调用gets()函数时输入什么样式的字符串,可以在不知道原始口令“Secret”的情况下绕过该口令验证函数的限制?【问题2】上述代码存在什么类型的安全隐患?请给出消除该安全隐患的思路。 正确答案:【问题一】只要输入长度为24的字符串,其前12个字符和后12个字符一样即可。【问题二】gets()函数必须保证输入长度不会超过缓冲区,一旦输入大于12个字符的口令就会造成缓冲区溢出。解决思路:使用安全函数来代替gets()函数,或者对用户输入进行检查和校对,可通过if条件语句判断用户输入是否越界。

考题 多选题按照面试题目的考察内容,面试题目可划分为以下几种()A背景性和知识性问题B智能性问题C意愿性问题D情境性问题E行为性问题正确答案: A,B,C,D,E解析: 暂无解析

考题 阅读下面程序,回答问题1至问题3。【问题1】(3分)上述代码能否输出“This is a test”?上述代码存在什么类型的隐患?【问题2】(4分)造成上述隐患的原因是?【问题3】(3分)给出消除该安全隐患的思路。答案:解析:

考题 阅读下列说明和C代码,回答问题,将解答填入答题纸的对应栏内。【说明】计算一个整数数组a的最长递增子序列长度的方法描述如下:假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤i<n)为结尾元素的最长递增子序列的长度为 ;其中b[i]满足最优子结构,可递归定义为:【C代码】下面是算法的C语言实现。(1)常量和变量说明a:长度为n的整数数组,待求其最长递增子序列b:长度为n的数组,b[i]记录以a[i](0≤ilen:最长递增子序列的长度i, j:循环变量temp:临时变量(2)C程序#include int maxL(int*b, int n) {int i, temp=0;for(i=0; itemp) temp=b[i]; } return temp;}int main() { int n,a[100], b[100], i, j, len; scanf("%d", for(i=0;i【问题1】(8分)根据说明和C代码,填充C代码中的空(1)~(4)。【问题2】(4分) 根据说明和C代码,算法采用了 (5) 设计策略,时间复杂度为 (6) (用O符号表示)。【问题3】(5分) 已知数组a={3,10,5,15,6,8},据说明和C代码,给出数组b的元素值。答案:解析:【问题1】(1)b[0]=1(2)j(3)a[j](4)b[i]=len+1【问题2】(4分) (5)动态规划法 (6)O(n2)【问题3】(5分) B={1,2,2,3,3,4}

考题 阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。[说明]某停车场有多个入口和出口,车辆进入时从入口处由系统查询可用的停车位,从出口驶出时系统将其刚使用的车位标记为空车位。假设实现停车场管理的伪指令如下表1所示:根据上述描述,在入口处的伪代码程序为:x=Get();IF x=NULL THEN return 0;Writ(x,1);若两辆车在不同的入口处同时执行上述代码,会出现什么问题? (100字以内描述) 正确答案:若两辆车在不同的入口处同时执行代码可能造成两辆车争用同一停车位。即两车同时申请到一个停车位并置为占用状态。若两辆车在不同的入口处同时执行代码,可能造成两辆车争用同一停车位。即两车同时申请到一个停车位,并置为占用状态。 解析:考查对并发情况下,会产生数据的不一致性问题,要求结合理论知识与实际问题,找出问题所在。两车同时读空车位时,可能会读到同一空车位,进而占用造成突,与并发控制中的丢失修改错误相类似。

考题 数组元素所占用的内存位于()  A、数据区(Data)B、代码区(Code)C、堆(Heap)D、堆栈(Stack)正确答案:C

考题 单选题数组元素所占用的内存位于()A数据区(Data)B代码区(Code)C堆(Heap)D堆栈(Stack)正确答案: B解析: 暂无解析

考题 多选题按照面试题目的考察内容,面试题目可划分为以下几种()A背景性和知识性问题B智能性问题C意愿性问题D情境性问题E行为性问题正确答案: C,D解析: 暂无解析

考题 单选题数组元素所占用的内存位于()A数据区(Data)B代码区(Code)C堆(Heap)D堆栈(Stack)正确答案: A解析: 暂无解析

考题 阅读下列说明和C代码,回答问题l至问题3.将解答写在答题纸的对应栏内。【说明】计算一个整数数组a的最长递增子序列长度的方法描述如下:假设数组a的长度为n,用数组b的元素b[i]记录以a[i](0≤in)为结尾元素的最长递增子序列的长度,则数组a的最长递增子序列的长度为器;其中b[i]满足最优子结构,可递归定义为:【c代码】下面是算法的c语言实现。(1)常量和变量说明a:长度为n的整数数组,待求其最长递增子序列b:长度为n的数组,b[i]记录以a[i](0≤in)为结尾元素的最长递增子序列的长度,其中0≤inlen:最长递增子序列的长度i.j:循环变量temp,临时变量(2)C程序include stdio . hint maxL (int *b. int n) {int i. temp =0;For(i = 0; i n; i++){if (b[i] temp )Temp= b[i];}Return temp;【问题l】(8分)根据说明和C代码,填充C代码中的空(1)~(4)。【问题2】(4分)根据说明和C代码,算法采用了(5)设计策略,时间复杂度为(6)(用O符号表示)。【问题3】(3分)已知数组a={3,10,5,15,6,8},根据说明和C代码,给出数组b的元素值。 正确答案:本题考查算法设计与分析以及用C程序设计语言来实现算法的能力。此类题目要求考生认真阅读题目对问题的描述,理解算法思想,并会用C程序设计语言来实现。【问题1】根据题干描述,用一个数组b来记录数组a每个子数组的最长递增子序列的长度,即b[i]记录a[0..i]的最长递增子序列的长度。首先,只有一个元素的数组的最长递增子序列的长度为1,即给b[0]直接赋值1。因此,空(1)处填写“b[0]=1”。两重for循环中,第一重是从a数组的第二个元素开始,考虑每个子数组a[0....II]的最长递增子序列的长度,第二重是具体的计算过程。考虑子数组a[0..I],其最长递增于序列的长度应该等于子数组a[O.i-l]中的比元素a[i]小的元素的最长递增子序列的长度加1,当然,可能存在多个元素比元素a[i]小,那么存在多个最长递增子序列的长度,此时,取最大者。因此,空处填写ji”,即考虑子数组a[O...i-l]。空(3)处填写“a[j]=a[i]”,要求元素值小于等于a[i]而且目前的长度应该小于当前考虑的子数组的最长子序列长度。空(4)处填写“b[i]=len+1”。简单的说,程序是根据题干给出的公式来实现的。另外,计算的过程不是采用递归的方式,而是以一种自底向上的方式进行的【问题2】从题干说明和C程序来看,这是一个最优化问题,而且问题具有最优子结构,一个序列的最长递增子序列由其子序列的最长递增子序列构成。在计算过程中采用了自底向上的方式来进行,这具有典型的动态规划特征。因此采用的是动态规划设计策略。C程序中,有两重for循环,因此时间复杂度为。【问题3】输入数组为数组a={3.10,5,15,6,8},很容易得到,子数组a[0...0],a[0..1].…,a[0....5]的最长递增子序列的长度分别为l,2,2,3,3,4,因此答案为b={I,2,2,3,4}。该题可以根据题干说明、C代码来计算。由于输入很简单,答案也可以从输入直接许算出来。试题四参考答案【问题1】(1)b[0]=I(2)ji(3)a[j]=a[i](4)b[i]=len+1【问题2】(5)动态规划(6)【问题3】b={1,2,2,3,3,4}
最新考题