# C++ Exercises（十八）

+关注继续查看

1．完成下列程序

*

*.*.

*..*..*..

*...*...*...*...

*....*....*....*....*....

*.....*.....*.....*.....*.....*.....

*......*......*......*......*......*......*......

*.......*.......*.......*.......*.......*.......*.......*.......

#include <iostream>
using namespace std;
const int ROWS = 8;//行数

void DoPrint()
{
int i,j,k;
for(i=1;i<=ROWS;++i)
{
for(j=1;j<=i;++j)
{
cout<<"*";
for(k=1;k<=i-1;++k)cout<<".";
}
cout<<endl;
}
}
int main()
{
DoPrint();
return 0;
}

2．完成程序，实现对数组的降序排序

#include <iostream>
using namespace std;

void printArray(int a[],int n)
{
for(int i=0;i<n;++i)
cout<<a[i]<<"\t";
cout<<endl;
}
int partion(int a[],int left,int right)
{//分割
int temp = a[left];
while (left<right)
{
while (left<right && a[right]<=temp)--right;
a[left] = a[right];
while (left<right && a[left]>=temp)++left;
a[right] = a[left];
}
a[left] = temp;
return   left;
}

void quicksort(int a[],int left,int right)
{//快速排序
if(left>=right)
return;
int pivotloc;
pivotloc = partion(a,left,right);
quicksort(a,left,pivotloc-1);
quicksort(a,pivotloc+1,right);
}

int main()
{
int array[] = {45,56,76,234,1,34,23,2,3};
int size = sizeof(array)/sizeof(array[0]);
quicksort(array,0,size-1);
printArray(array,size);
return 0;
}

3，费波那其数列，1，1，2，3，5……编写程序求第十项。可以用递归，也可以用其他

#include <iostream>
using namespace std;

int Pheponatch(int N)
{//返回斐波那契数列第N项
int a[100]={1,1};
for (int i=2;i<N;++i)
{
a[i] = a[i-1]+a[i-2];
}
return a[N-1];
}
int main()
cout<<Pheponatch(4)<<endl;
return 0;
}

4，错误原因：指针未初始化，

#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;

struct TNode
TNode* left;
TNode* right;
int value;
};

TNode* root=NULL;

void append(int N)
TNode* NewNode=(TNode *)malloc(sizeof(TNode));
NewNode->value=N;
NewNode->left = NULL;
NewNode->right = NULL;
if(root==NULL)
{
root=NewNode;
return;
}
else
{
TNode* temp;
temp=root;
while((N>=temp->value && temp->left!=NULL) || (N<temp->value && temp->right!=NULL))
{
while(N>=temp->value && temp->left!=NULL)
temp=temp->left;
while(N<temp->value && temp->right!=NULL)
temp=temp->right;
}
if(N>=temp->value)
temp->left=NewNode;
else
temp->right=NewNode;
return;
}
}

void printTree(TNode* t)
{
if (t!=NULL)
{
printf("%d\n",t->value);
printTree(t->left);
printTree(t->right);
}
}
int main()
append(63);
append(45);
append(32);
append(77);
append(96);
append(21);
append(17); // Again,  数字任意给出
printTree(root);
return 0;

5，设计函数 int atoi(char *s) 。

复制代码
#include <iostream>
using namespace std;

int my_aoti(char* s)
{//字符串转化为整数
int len = strlen(s);
int result = 0;
for (int i=0;i<len;++i)
{
result = result*10+s[i]-'0';
}
return result;
}
int main()
char* str = "123";
int num = my_aoti(str);
cout<<num<<endl;
return 0;
}

6，实现双向链表删除一个节点P，在节点P 后插入一个节点，写出这两个函数

//双向链表节点
{
int value;
};

{//在双向链表（带头节点）中删除第一个值为num的节点
{//表中有节点存在
while (p!=NULL&&p->value!=num)
{
pre = p;
p = p->next;
}
if (p==NULL)
{//没找到
return false;
}
else if (p->next==NULL)
{//待删除的是最后一个节点
pre->next = NULL;
delete p;
p = NULL;
}
else
{//待删除的不是最后一个
pre->next = p->next;
p->next->prev = pre;
delete p;
p = NULL;
}
return true;
}
else
{
return false;
}

}

{//在节点target后插入节点num
{//表中有节点存在
newNode->value = num;
newNode->next = NULL;
newNode->prev = NULL;
while (p!=NULL && p->value!=num)
{
p = p->next;
}
if (p==NULL)
{
free(newNode);
newNode = NULL;
return false;
}
else if (p->next==NULL)
{//目标节点是最后一个节点，新节点插入为尾节点
p->next = newNode;
newNode->prev = p;
}
else
{//目标节点不是最后一个
newNode->next = p->next;
p->next->prev = newNode;
p->next = newNode;
newNode->prev = p;
}
return true;
}
else
{
return false;
}
}

+关注

GPON Class C++ SFP OLT Transce