捷通华声笔试和面试题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
return NULL;
ArrayStruct *pReturn;
pReturn=new ArrayStruct;
if(pReturn == NULL)
return NULL;
pReturn->pHead = new int[iStartElementCount];
if(pReturn->pHead == NULL)
//参数:ArrayStruct *pArray要处理的数组结构体指针
//const int iAppendElement要增加的元素
//返回:成功时返回true,失败时返回false(10分)
bool Array_AddElement(ArrayStruct*pArray const int iAppendElement)
2C++中vector和数组的区别,好处是什么。
vector是动态数组,大小是可变的,但是数组不是。好处是更好的利用内存之类的,其它我也答不上来。
3.C++中的模板是什么,什么时候用模板
在功能相同,数据类型(class)不用的时候用。
4.泛型算法是什么
{
public:
int b;
pubFra Baidu bibliotekic:
CClassB(int ib):b=ib,a=ib
{
cout<<”create CClassB”<<b<<endl;
}
~CClassB()
{
cout<<”delete CClassB”<<endl;
}
}
main()
{
CClassA *pa=new CClassA;
{
return NULL;
}
pReturn->iCurMaxElementCount = iStartElementCount;
pReturn->iCurElementCount = 0;
return pReturn;
}
//================完成下面的函数
//功能:向数组添加一个元素,如果元素超过上述Array_Init函数的iStartElementCount参数时,请考虑如何适应。可以假定一次增加ARRAY_GROWUP个元素容量,但是要保证在内存中数据为线性存放(也就是说连续的,像数组一样,而不是链表)
3、大小写不敏感查找字符串,知道用’A’-’a’就差不多了。
面试部分:
1说出这4个都对不对,分别代表什么
const int a:代表整型a只读
const int *a:代表a指向一个整型变量,这个整型变量通过a访问是只读的
int const *a:同上
int * const a:说明指针能改,但是指针指向的东西不行
1写出以下代码的输出结果。
classCClassA
{
public:
int a;
public:
CClassA();
CClassA(int a=0)
{
cout<<”create CClassA”<<a<<endl;
}
~CClassA()
{
cout<<”delete CClassA”<<endl;
}
}
class CClassB:public CClassA
提示:malloc不调构造函数,而new出来的是调构造函数的。
3
int i=10;
int *pint1=new int(10);
int *pint2=new int[10];
int aint[10];
计算一下下面四个值:
sizeof(i),sizeof(pint1),sizeof(pint2),sizeof(aint)
{
}
//功能:删除一个数组
//参数:自己定义
//返回:无(10分)
void Array_Release(/*请在这里填上参数*/)
{
}
我的想法:和C++的vector的思路一样,这里添加元素的时候,如果需要新分配内存,而且还是连续的内存,所以不能简单地用malloc或不能用malloc了,用malloc的话,要重新分配一段连续内存,再把原内容拷过来,再释放原来的连续内存,这样显然不太好。这里可以用realloc来实现。删除和查找都比较简单,要注意的是,删除元素里直接用memcpy,目标地址写要删除元素的地址,源地址写它下一个的地址就可以了。
{
}
//功能:返回指定索引的元素
//参数:const ArrayStruct *pArray要处理的数组结构体指针
//const intiIndex要取得索引值
//int & iReturn成功时的值
//返回:成功为true失败为false
bool Array_GetElement(const ArrayStruct *pArray,const int iIndex,int & iReturn)
int *pHead;//指针头部
};
//功能:生成一个数组,参数为最初元素个数
//参数:int iStartElementCount数组初始化大小
//返回:成功返回指针,否则返回NULL
ArrayStruct *Array_Init(int iStartElementCount)
{
if(iStartElementCount <= 0)
{
}
//功能:删除指定索引的元素,要保证元素在内存为线性不间隔存放
//参数:ArrayStruct *pArray要处理的数组结构体指针
//const intiRemovedIndex要删除的元素索引
//返回:成功时返回true,失败时返回false(10分)
bool Array_RemoveElement(ArrayStruct *pArray,const int iRemovedIndex)
deletepa;
}
提示:事实上原题我记不太清了,反正是考继承类与非继承类的构造与析构顺序:先构造父类,再构造子类,析构反过来。(有可能还考了多态,就是指针与new出来的可能不一样,记不太清了)
2上题main()函数第一句用new开辟了pa的内存,如果使用malloc分配,即pa=(CClassA*)malloc(sizeof(CClassA));会出现什么问题,为什么?并请说明new和malloc之间的区别。
提示:4,4,4,40
4实现一个整数的动态数组
//下面是代码,完成相应函数
const int ARRAT_GROWUP = 10;
//数组结构体定义
struct ArrayStruct
{
int iCurMaxElementCount;//当前数组最大能容纳元素的个数
int iCurElementCount;//当前元素数
选做题(任选1道还是2道忘了):
1、是5个人,5个任务,每个人只能干一个任务,同时已知每个人完成任务所花的资源,求出5个任务都完成所需要花费的资源。(大概是这样)
2、就是叫你实现互斥锁,但是不能用pthread_的那些函数,不过可以用信号量什么的,实现读读共享,读写互斥,写写互斥。思路应该就是信号量那些,sem_op sem_ctl这些吧。
ArrayStruct *pReturn;
pReturn=new ArrayStruct;
if(pReturn == NULL)
return NULL;
pReturn->pHead = new int[iStartElementCount];
if(pReturn->pHead == NULL)
//参数:ArrayStruct *pArray要处理的数组结构体指针
//const int iAppendElement要增加的元素
//返回:成功时返回true,失败时返回false(10分)
bool Array_AddElement(ArrayStruct*pArray const int iAppendElement)
2C++中vector和数组的区别,好处是什么。
vector是动态数组,大小是可变的,但是数组不是。好处是更好的利用内存之类的,其它我也答不上来。
3.C++中的模板是什么,什么时候用模板
在功能相同,数据类型(class)不用的时候用。
4.泛型算法是什么
{
public:
int b;
pubFra Baidu bibliotekic:
CClassB(int ib):b=ib,a=ib
{
cout<<”create CClassB”<<b<<endl;
}
~CClassB()
{
cout<<”delete CClassB”<<endl;
}
}
main()
{
CClassA *pa=new CClassA;
{
return NULL;
}
pReturn->iCurMaxElementCount = iStartElementCount;
pReturn->iCurElementCount = 0;
return pReturn;
}
//================完成下面的函数
//功能:向数组添加一个元素,如果元素超过上述Array_Init函数的iStartElementCount参数时,请考虑如何适应。可以假定一次增加ARRAY_GROWUP个元素容量,但是要保证在内存中数据为线性存放(也就是说连续的,像数组一样,而不是链表)
3、大小写不敏感查找字符串,知道用’A’-’a’就差不多了。
面试部分:
1说出这4个都对不对,分别代表什么
const int a:代表整型a只读
const int *a:代表a指向一个整型变量,这个整型变量通过a访问是只读的
int const *a:同上
int * const a:说明指针能改,但是指针指向的东西不行
1写出以下代码的输出结果。
classCClassA
{
public:
int a;
public:
CClassA();
CClassA(int a=0)
{
cout<<”create CClassA”<<a<<endl;
}
~CClassA()
{
cout<<”delete CClassA”<<endl;
}
}
class CClassB:public CClassA
提示:malloc不调构造函数,而new出来的是调构造函数的。
3
int i=10;
int *pint1=new int(10);
int *pint2=new int[10];
int aint[10];
计算一下下面四个值:
sizeof(i),sizeof(pint1),sizeof(pint2),sizeof(aint)
{
}
//功能:删除一个数组
//参数:自己定义
//返回:无(10分)
void Array_Release(/*请在这里填上参数*/)
{
}
我的想法:和C++的vector的思路一样,这里添加元素的时候,如果需要新分配内存,而且还是连续的内存,所以不能简单地用malloc或不能用malloc了,用malloc的话,要重新分配一段连续内存,再把原内容拷过来,再释放原来的连续内存,这样显然不太好。这里可以用realloc来实现。删除和查找都比较简单,要注意的是,删除元素里直接用memcpy,目标地址写要删除元素的地址,源地址写它下一个的地址就可以了。
{
}
//功能:返回指定索引的元素
//参数:const ArrayStruct *pArray要处理的数组结构体指针
//const intiIndex要取得索引值
//int & iReturn成功时的值
//返回:成功为true失败为false
bool Array_GetElement(const ArrayStruct *pArray,const int iIndex,int & iReturn)
int *pHead;//指针头部
};
//功能:生成一个数组,参数为最初元素个数
//参数:int iStartElementCount数组初始化大小
//返回:成功返回指针,否则返回NULL
ArrayStruct *Array_Init(int iStartElementCount)
{
if(iStartElementCount <= 0)
{
}
//功能:删除指定索引的元素,要保证元素在内存为线性不间隔存放
//参数:ArrayStruct *pArray要处理的数组结构体指针
//const intiRemovedIndex要删除的元素索引
//返回:成功时返回true,失败时返回false(10分)
bool Array_RemoveElement(ArrayStruct *pArray,const int iRemovedIndex)
deletepa;
}
提示:事实上原题我记不太清了,反正是考继承类与非继承类的构造与析构顺序:先构造父类,再构造子类,析构反过来。(有可能还考了多态,就是指针与new出来的可能不一样,记不太清了)
2上题main()函数第一句用new开辟了pa的内存,如果使用malloc分配,即pa=(CClassA*)malloc(sizeof(CClassA));会出现什么问题,为什么?并请说明new和malloc之间的区别。
提示:4,4,4,40
4实现一个整数的动态数组
//下面是代码,完成相应函数
const int ARRAT_GROWUP = 10;
//数组结构体定义
struct ArrayStruct
{
int iCurMaxElementCount;//当前数组最大能容纳元素的个数
int iCurElementCount;//当前元素数
选做题(任选1道还是2道忘了):
1、是5个人,5个任务,每个人只能干一个任务,同时已知每个人完成任务所花的资源,求出5个任务都完成所需要花费的资源。(大概是这样)
2、就是叫你实现互斥锁,但是不能用pthread_的那些函数,不过可以用信号量什么的,实现读读共享,读写互斥,写写互斥。思路应该就是信号量那些,sem_op sem_ctl这些吧。