C++笔试题目-带答案(2)

2019-09-01 09:25

if(str==NULL) {

m_data = new char[1]; // 若能加 NULL 判断则更好 *m_data = ?\\0?;

} else {

int length = strlen(str);

m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, str); } }

// 拷贝构造函数

String::String(const String &other) // 3分 {

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, other.m_data); }

// 赋值函数

String & String::operate =(const String &other) // 13分 {

// (1) 检查自赋值 // 4分 if(this == &other) return *this;

// (2) 释放原有的内存资源 // 3分 delete [] m_data;

// (3)分配新的内存资源,并复制内容 // 3分 int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, other.m_data);

// (4)返回本对象的引用 // 3分 return *this; }

2. 不调用C++/C的字符串库函数,请编写函数strcmp的实现(10)。

int strcmp ( const char * src, const char * dst )

char *strcpy(char *strDest, const char *strSrc) {

char *address = strDest; while (*strDest++ = * strSrc++) NULL ;

return address ; }

3.F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1.分别用递归和循环求F(5)(10)。

public int R(int num){ if(num<=0){ num=1;

}else if(num==1){ num=1; }else{

num=R(num-1)+R(num-2); }

return num; }

public int c(int num) { int a = 1; int b = 1; int c = 0;

for (int i = 0; i < num- 2; i++) { c = a + b; a = b; b = c; }

return c; }

4. 写一算法,对单链表实现就地逆置(不要构造新结点)(10)。

node *reserve(node*head) {

node*p1,*p2,*p3;

if((head==NULL)||(head->next==NULL)) return head;

p1=head; p2=p1->next; while(p2!=NULL)

{

p3=p2->next; p2->next=p1; p1=p2; p2=p3; }

head->next=NULL; p1=head; return head; }

5.从冒泡排序、直接插入排序、二分插入排序和选择排序四种排序算法中,选择其中一种算法,写出它的实现?(10)

#include #include #include #include

void BubbleSort(int *L,int N) { //冒泡 int i,j; int t;

for(i=1;i<=N;i++) {

for(j=N;j>i;j--) if(L[j]

t=L[j];

L[j]=L[j-1]; L[j-1]=t; } } }

int SelectMinKey(int *L,int N,int n) {

int i,min=n;

for(i=n+1;i<=N;i++) if(L[i]

return min; }

void SelectSort(int *L,int N) { //选择 int i,j; int t;

for(i=1;i

j=SelectMinKey(L,N,i); if(i!=j) {

t=L[i]; L[i]=L[j]; L[j]=t; } } }

void InsertSort(int *L,int N) { //插入 int i,j;

for(i=2;i<=N;i++) {

if(L[i]

L[0]=L[i]; L[i]=L[i-1];

for(j=i-2;L[0]

void ShellInsert(int *L,int N, int dk)

{ // 对顺序表L作一趟希尔插入排序。本算法对算法10.1作了以下修改: // 1. 前后记录位置的增量是dk,而不是1;

// 2. r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到。 int i,j;

for(i=dk+1;i<=N;++i) if(L[i]

{ // 需将L.r[i]插入有序增量子表

L[0]=L[i]; // 暂存在L.r[0] for(j=i-dk;(j>0&&L[0]

L[j+dk]=L[j]; // 记录后移,查找插入位置 L[j+dk]=L[0]; // 插入 }

} // ShellInsert

void ShellSt(int *L,int N, int dlta[], int t) { // 算法10.5

// 按增量序列dlta[0..t-1]对顺序表L作希尔排序。 for(int k=0;k

ShellInsert(L,N, dlta[k]); // 一趟增量为dlta[k]的插入排序 } // ShellSort

void ShellSort(int *L,int N) { //希尔

int t=(int)log(N); int k,*dlta;

dlta=(int*)malloc(t*4); //产生增量序列 for(k=0;k

dlta[k]=(int)pow(2,t-k)-1;

ShellSt(L,N,dlta,t); }

int main() {

int N=250; int i,j,k; int t;

int ti[16]; int *L;

srand(time(NULL));

printf(\长度\\t|冒泡\\t|选择\\t|插入\\t|希尔\\n\

printf(\---------\

for(j=0;N<100000;j++) {


C++笔试题目-带答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:WP3100状态代码表 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: