2006年11月ATI(下属AMD)笔试题及答案(之二)

出自求职百科

跳转到: 导航, 搜索

6:请问下面程序如果运行会出现什么结果?如果有错误请指出并改正。

  1. include <stdlib.h>
  1. include <string.h>

class mystring{

public:

mystring(){

m_str=NULL;

}

mystring(mystring& str){

if(m_str!=NULL){

delete []m_str;

}

m_str=new char[strlen(str.m_str)];

strcpy(m_str,str.m_str);

}

mystring & operator=(const char *str){

if(m_str!=NULL){

delete []m_str;

}

m_str=new char[strlen(str)+1];

strcpy(m_str,str);

}

~mystring(){

if(m_str!=NULL){

delete m_str;

}

}

private:

char *m_str;

};

int main(){

mystring str1;

str1="hello world";

mystring str2;

str2=str1;

mystring str3=str2;

return 0;

}

~

答案:

程序运行会出现内存释放错误

错误共有四处,分别在下面改正的代码中标出。

  1. include <stdlib.h>
  2. include <string.h>

class mystring{ public: mystring(){ m_str=NULL; } mystring(mystring& str){

/*if(m_str!=NULL){ delete []m_str; }*/

//错误1,因为m_str没有被初始化,所以此处可能为NULL,也可能不为NULL,如果不为null,则会出错,因为m_str是一个随机的值。 m_str=new char[strlen(str.m_str)+1];

//错误2:长度应该+1 strcpy(m_str,str.m_str); }

mystring & operator=(mystring& str){

//错误3:缺少赋值重载函数 if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str.m_str)+1];

//错误2:长度应该+1 strcpy(m_str,str.m_str); } mystring & operator=(const char *str){ if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str)+1]; strcpy(m_str,str); } ~mystring(){ if(m_str!=NULL){ delete []m_str;

//错误4:析构函数中,应该析构数组 } } private: char *m_str; }; int main(){ mystring str1; str1="hello world"; mystring str2; str2=str1; mystring str3=str2; return 0; } ~


7:100个乒乓球取胜之道,A,B两个人轮流拿,A先拿,一次只能拿[1,5]个,获胜者为拿到最后一个球的人。请问A第一次该拿几个?以后又该怎么拿,才能够确保获胜?

答案:A先拿4个,然后B拿,设B拿x个,则每次A拿6-x个即可。


8:有编号1-50的人,依次排列,然后单号出列,然后剩下的人重新编号,单号出列,依次类推,最后剩下一个人,请问这个人原来编号是多少号?如果是每一次双号出列,请问这个人原来编号是多少?

答案:单号出列:32号

双号出列:1号

个人工具
公司索引
  • A   B   C   D   E   F   G
  • H   I   J   K   L   M   N
  • O    P
  •     Q    R    S    T
  • U    V    W    X    Y    Z
工具箱