点成双根算法
1. 试写一个建立二叉树在内存的双链表示算法,并实现先根、中根、后根以及层序遍历算法。
你先把三元组化为链表,然后按下述算法:
/*二叉树的建立、递归遍历sy6_1.c*/
#include <stdio.h>
#include <alloc.h>
#include <stdlib.h>
#define MAXSIZE 30
typedef struct btnode
{
char c;
struct btnode *l,*r;
}BTNode;
BTNode *Create_BiTree()/*二叉树的建立*/
{/*用辅助数组建立二叉树*/
int i,j;
char ch;
BTNode *s,*t,*p[MAXSIZE];
printf("输入顶点编号及信息,输入0和#结束:i,ch");
scanf("%d,%c",&i,&ch);
while(i!=0 &&ch!='#')/*建立二叉树的存储结构*/
{s=(BTNode*)malloc(sizeof(BTNode));
s->c=ch;
s->l=s->r=NULL;
p[i]=s;
if(i==1) t=s;/*判断输入结点是根结点、左孩子还是右孩子*/
else
{j=i/2;
if(i%2==0) p[j]->l=s;
else p[j]->r=s;
}
printf("输入顶点编号及信息,输入0和#结束:i,ch");
scanf("%d,%c",&i,&ch);
}
return t;
}/* Create_BiTree1*/
void DLR(BTNode *bt)
{/*前序递归遍历*/
if(bt)
{
printf("%c",bt->c);
DLR(bt->l);
DLR(bt->r);
}
}/* DLR*/
void LDR(BTNode *bt)
{/*中序递归遍历*/
if(bt)
{
LDR(bt->l);
printf("%c",bt->c);
LDR(bt->r);
}
}/* LDR*/
void LRD(BTNode *bt)
{/*后序递归遍历*/
if(bt)
{
LRD(bt->l);
LRD(bt->r);
printf("%c",bt->c);
}
}/* LRD*/
void LevelOrder(BTNode *bt) /*层次遍历二叉树bt*/
{ BTNode* queue[MAXSIZE];
int front,rear;
if (bt==NULL) return;
front=0; /*非循环队列*/
rear=0;
queue[rear++]=bt;
while(front!=rear)
{printf("%c",queue[front]->c); /*访问队首结点的数据域*/
if (queue[front]->l!=NULL) /*队首结点左孩子指针入队*/
{ queue[rear]=queue[front]->l;rear++;}
if (queue[front]->r!=NULL) /*队首结点右孩子指针入队*/
{ queue[rear]=queue[front]->r; rear++; }
front++;
}
}
void main()
{
int i,j=1;
BTNode *t;
t=Create_BiTree();
while(j)
{
printf("\n"); /*功能菜单*/
printf("请选择操作:\n");
printf("1: 二叉树的前序遍历\n");
printf("2: 二叉树的中序遍历\n");
printf("3: 二叉树的后序遍历\n");
printf("4: 二叉树的层次遍历\n");
printf("0: 退出程序\n");
scanf("%d",&j);
switch(j)
{
case 0: printf(" 程序退出!\n ");exit(0);
case 1: printf("前序遍历结果:\n"); DLR(t); break;
case 2: printf("中序遍历结果:\n"); LDR(t);break;
case 3: printf("后序遍历结果:\n"); LRD(t);break;
case 4: printf("按层遍历结果:\n");LevelOrder(t);break;
default : printf("\n输入无效,请重新选择操作!\n" );break;
}
}
}
2. 解析几何用点成双根算法有没有分
有分的,只要回答了至少都有一两分,祝考试成功,加油,同学!
解析几何(Analytic geometry),又称为坐标几何(Coordinate geometry)或卡氏几何(Cartesian geometry),早先被叫作笛卡儿几何,是一种借助于解析式进行图形研究的几何学分支。解析几何通常使用二维的平面直角坐标系研究直线、圆、圆锥曲线、摆线、星型线等各种一般平面曲线,使用三维的空间直角坐标系来研究平面、球等各种一般空间曲面,同时研究它们的方程,并定义一些图形的概念和参数。
3. 圆锥曲线双根点乘法是怎么回事,之前在乐学高考里面看到圆锥曲线里有一种叫双根点乘法。B站和百度可以搜
x1.x2=c/a
x1+x2=-b/a
这个是韦达定理.
4. 根号下的算法
根号下(1.46*0.58)*(3.46*2.58)
=根号下(0.8468)*(8.9268)
=根号下7.55921424
=2.......
5. 根号的算法啊
我“定义”a^b=a的b次方。
(10a+b)^2
=
100a^2+20ab+b^2
=
100a^2+b(20a+b)
a代表的是已经计算出来的结果,b代表的是当前需要计算的位上的数。在每次计算过程中,100a^2都被减掉,剩下b(20a+b)。然后需要做的就是找到最大的整数b'使b'(20a+b')<=b(20a+b)。
因此,我就照着书里的方法,推导开立方笔算法。
(10a+b)^3
=
1000a^3+300a^2*b+30a*b^2+b^3
=
1000a^3+b[300a^2+b(30a+b)]
如果每次计算后都能减掉1000a^3的话,那么剩下的任务就是找到最大的整数b',使b'[300a^2+b'(30a+b')]<=b[300a^2+b(30a+b)]。
于是,我就设计了一个版式。下面就开始使用这个版式来检验开立方笔算法。
例如:147^3=3176523
一开始,如下图所示,将3176523从个位开始3位3位分开。(3'176'523)
第一步,我们知道,1^3
<
3
<
2^3,所以,第一位应该填1。
1^3
=
1,3
-
1
=
2,余2,再拖三位,一共是2176。
接下来这一步就比较复杂了。因为我水平有限,我现在还不能把它改造得比较好。
依照“b[300a^2+b(30a+b)]”,所以:
1^2*300=300,1*30=30,如图上所写。
第二位就填4,所以上图3个空位都填4。
然后(34*4+300)*4=1744,2176-1744=432,再拖三位得432523。
然后就照上面一样,
14^2*300=58800,14*30=420,如上图所写。
第三位就填7,所以上图下边3个空位都填7。
然后(427*7+58800)*7=432523,432523-432523=0,到此开立方结束。
在我以后的一些实践中,发现越往后开,300*a^2与b(30a+b)的差距就越大,寻找b的工作就越容易,因为结果中有一项是300*a^2*b。
徒手开n次方根的方法:
原理:设被开方数为X,开n次方,设前一步的根的结果为a,现在要试根的下一位,设为b,
则有:(10*a+b)^n-(10*a)^n<=c(前一步的差与本段合成);且b取最大值
用纯文字描述比较困难,下面用实例说明:
我们求
2301781.9823406
的5次方根:
第1步:将被开方的数以小数点为中心,向两边每隔n位分段(下面用'表示);不足部分在两端用0补齐;
23'01781.98234'06000'00000'00000'..........
从高位段向低位段逐段做如下工作:
初值a=0,差c=23(最高段)
第2步:找b,条件:(10*a+b)^n-(10*a)^n<=c,即b^5<=23,且为最大值;显然b=1
差c=23-b^5=22,与下一段合成,
c=c*10^n+下一段=22*10^5+01781=2201781
第3步:a=1(计算机语言赋值语句写作a=10*a+b),找下一个b,
条件:(10*a+b)^n-(10*a)^n<=c,即:(10+b)^5-10^5<=2201781,
b取最大值8,差c=412213,与下一段合成,
c=c*10^5+下一段=412213*10^5+98234=41221398234
第4步:a=18,找下一个b,
条件:(10*a+b)^n-(10*a)^n<=c,即:(180+b)^5-180^5<=41221398234,
b取最大值7
说明:这里可使用近似公式估算b的值:
当10*a>>b时,(10*a+b)^n-(10*a)^n≈n*(10*a)^(n-1)*b,即:
b≈41221398234/n/(10*a)^(n-1)=41221398234/5/180^4≈7.85,取b=7
以下各步都更加可以使用此近似公式估算b之值
差c=1508808527;与下一段合成,
c=c*10^5+下一段=1508808527*10^5+06000=150880852706000
第5步:a=187,找下一个b,
条件:(10*a+b)^n-(10*a)^n<=c,即:
(1870+b)^5-1870^5<=150880852706000,
b取最大值2,差c=28335908584368;与下一段合成,
c=c*10^5+下一段=2833590858436800000
第6步:a=1872,找下一个b,
条件:(10*a+b)^n-(10*a)^n<=c,即:
(18720+b)^5-18720^5<=2833590858436800000,
b取最大值4,差c=376399557145381376;与下一段合成,
c=c*10^5+下一段=37639955714538137600000
.............................
最后结果为:18.724......
6. 双根公式怎么使用
∵y轴交于(0,4)
∴c=4
∵过(-3,0),(1,0)
∴-3*1=c/a=4/a -3+1=-b/a
∴a=-4/3 b=-8/3
∴y=(-4/3)x²-(8/3)x+4
7. 根号的算法
这个问题一言难尽。现在中学已不教开平方了,因为计算器已普及,改教用计算器开平方了。如果你想学开方,华罗庚先生的高等数学教程第一卷上有。
8. 根号2的计算方法
可以使用除法来计算的,不过方法比较繁琐
第一步:整数部分,直接开方,算出最接近数字,可以得到余数
第二步:计算开方的小数部分了,这是最繁琐的部分,比较麻烦
首先余数部分直接扩大一百倍,除数部分直接乘以20倍,再加上另一个除数
过程如下:
整数部分
后面的部分可以继续计算下去的,越到后面计算的难度越大,前面的文字解释部分可能不太清楚,请大家原谅,可以看看计算的部分,自己找找规律的