我看了一些资料,找到一些在笔试中常用到的题目的解析,自己从中挑了一些作为练习,拿出来供大家参考!
直接以代码的形式给出了部分题目的解析代码!与君共勉之!
//在C++笔试中常见的题目解析
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
//1.链表反转
class ReverseLink
{
public:
ReverseLink()
{
head=NULL;
}
~ReverseLink()
{
while(head)
{
LinkNode* tmp=head->next;
delete head;
head=tmp;
}
}
public:
void createLink()
{
head=new LinkNode();
LinkNode* pH=head;
srand((unsigned int)time(NULL));
for(int i=0;i<10;i++)
{
LinkNode* pTmp=new LinkNode();
pTmp->next=NULL;
pTmp->data=rand();
pH->next=pTmp;
pH=pTmp;
}
pH->next=NULL;
}
void OutPut()
{
LinkNode* pH=head->next;
while(pH!=NULL)
{
cout << pH->data << " ";
pH=pH->next;
}
cout << endl;
}
void MyReverse()
{
if(head==NULL || head->next==NULL)
return ;
LinkNode *next,*cur;
cur=head->next;
head->next=NULL;
while(cur)
{
next=cur->next;
cur->next=head->next;
head->next=cur;
cur=next;
}
}
private:
typedef struct _Link
{
int data;
struct _Link* next;
}LinkNode;
LinkNode* head;
};
//2.自定义实现String类的功能
#include <string>
#include <string.h>
using namespace std;
class MyString
{
public:
MyString(){ m_data=NULL; }
MyString(const char*str=NULL)
{
if(str==NULL)
{
m_data=new char[1];
m_data[0]='\0';
}
else
{
if(m_data)
delete []m_data;
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
}
MyString(const MyString&another)
{
if(another.m_data!=NULL)
{
if(m_data!=NULL)
delete []m_data;
m_data=new char[strlen(another.m_data)+1];
strcpy(m_data,another.m_data);
}
}
~MyString()
{
if(m_data!=NULL)
delete []m_data;
}
public:
MyString& operator=(const MyString&rhs)
{
if(this==&rhs)
return *this;
if(m_data!=NULL)
delete []m_data;
m_data=new char[strlen(rhs.m_data)+1];
strcpy(m_data,rhs.m_data);
return *this;
}
private:
char* m_data;
};
//3.请编写自己的strcpy()
char* MyStrcpy(char* strDest,const char* strSrc)
{
if(strDest == NULL || strSrc == NULL)
return NULL;
if(strDest == strSrc)
return strDest;
char* tmp=strDest;
while((*strDest++=*strSrc++) != '\0')
return tmp;
return NULL;
}
/*
4.C++是不是类型安全的?
C++不是类型安全的,两个不同类型的指针之间可以进行强制转换
*/
/*
5.描述内存分配的方式以及他们的区别?
(1).从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运
行期间都存在。例如全局变量,static 变量。
(2).在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行
结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。
(3).从堆上分配,亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的
内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,
使用非常灵活,但问题也最多。
*/
/*
6.说说const与#define相比的区别于联系?
const常量是有数据类型的,而宏变量是没有数据类型的;
编译器可以对const进行类型检查,而对后者仅仅是进行字符串的替换,可能会产生不可以预料的错误
有些集成化的调试工具可以对const常量进行调试 ,而对于#define类的宏常量不能进行替换。
*/
int main()
{
ReverseLink rLink;
rLink.createLink();
rLink.OutPut();
rLink.MyReverse();
rLink.OutPut();
//7.打印出文件目录已经成本语句所在的行号
cout << __FILE__ << endl;
cout << __LINE__ << endl;
//8.打印出本文件是有那个编译器编译的
#ifdef __cplusplus
cout << "c++" << endl;
#else
cout << "C" << endl;
#endif // __cplusplus
return 0;
}