首页 > 精品范文库 > 1号文库
表达式用二叉树表示
编辑:紫云飞舞 识别码:10-1197631 1号文库 发布时间: 2024-11-04 21:16:21 来源:网络

第一篇:表达式用二叉树表示

数据结构程序报告(3)

202_.3.29

2.需求分析:

(1)功能:表达式可以用二叉树表示,对于简单的四则运算,请实现以下功能

【1】对于任意给出的前缀表达式(不带括号)、中缀表达式(可以带括号)或后缀表达式(不带括号),能够在计算机内部构造出一棵表达式二叉树,并且图示出来(图形的形式)。【2】对于构造好的内部表达式二叉树,按照用户的要求输出相应的前缀表达式(不带括号)、中缀表达式(可以带括号,但不允许冗余括)或后缀表达式(不带括号)。

提示:所谓中缀表达式中的冗余括号,就是去掉括号后不影响表达式的计算顺序。例如:“(c+b)+a”中的括号是冗余的,可以表示成不冗余的“c+b+a”。(2)输入输出要求:请输入字符串表达式:

树形二叉树(图形显示)中缀表达式为: 前缀表达式为: 后缀表达式为:

3.概要设计:(算法)

分成两部分完成:

【1】前缀、中缀、后缀表达式->二叉树表达式

前缀表达式->二叉树表达式:(a)碰到操作数则把其值赋给相应的新申请的二叉树结点,地址压栈;(b)碰到操作符则把其值赋给相应的新申请的二叉树,并从栈中弹出两个地址,分别作为其右指针和左指针,然后再把其地址压栈,最后一个地址即为二叉树的根结点地址。

中缀表达式->二叉树表达式:把中缀表达式转换成后缀表达式,然后再建立二叉树。

后缀表达式->二叉树表达式:(a)碰到操作数则把其值赋给相应的新申请的二叉树结点,若栈为空则地址压栈,若非空则取栈顶元素,若栈顶元素的左孩子为空则当前结点设为其左孩子,左孩子为满则设为其右孩子再压栈;(b)碰到操作数则把其值赋给相应的新申请的二叉树结点,取栈顶元素,若栈顶元素的左孩子为空则设为其左孩子,左孩子为满则设为其右孩子开始那个元素地址为根结点地址,开始时用变量root保存。

【1】二叉树表达式->前缀、中缀、后缀表达式

二叉树表达式->前缀表达式:对二叉树表达式进行前序遍历。

二叉树表达式->中缀表达式:对二叉树表达式进行中序遍历,若结点操作符的优先级高于其左或右子树,在打印相应的子树之前先打印开括号,在打印相应的子树最后在打印一个闭括号。

二叉树表达式->后缀表达式:对二叉树表达式进行后序遍历。

建立表达式树就是建立树中的每一个结点,将每一个结点链接起来就是整棵树。而在建立深度低的结点时要将其左右指针指向之前建立的深度比它高一级的结点(如’*’要指向’2’和’3’,而’+’又要指向’*’)。这样我们可以用栈来存放每次建立的结点,按照优先级(表达式为中缀型)或顺序扫描表达式(表达式为波兰式与逆波兰式)建立每一个结点。建立结点的顺序即为表达式求值的顺序。如果扫描到操作数则直接新建一个左右指针为空的结点,并压入结点栈中(存放结点指针)。遇到运算符时首先新建一个结点,然后从栈中依次弹出两个结点,并让新建立的结点的左右指针域指向它们。当所有结点建立完毕时,如果表达式没有错误(这里假设输入表达式正确),这时栈中应该只剩下一个结点,它就是所建立的表达式的根结点。

4.详细设计:(具体方法)

首先创建一个节点类TNode:包含操作符oper、左孩子left、右孩子right,isOper()判断是否为操作符,getOperOrder()返回运算符op所对应的优先级,freeTree()程序结束销毁二叉树,postOrder()先序遍历,preOrder()后序遍历,inOrder()中序遍历,ExpTree1()后缀表达式生成二叉树,ExpTree3()前缀表达式生成二叉树,ExpTree2()中后缀表达式生成二叉树,count()求值函数,paint()输出函数 附程序:

#include

#include #include #include #include using namespace std;class TNode//节点类 {public: charoper;TNode *left;TNode *right;int s; int t; TNode(){

left=right=NULL;oper=0;} TNode(char op){

left=right=NULL;oper=op;}};boolisOper(char op)//判断是否为运算符 { charoper[]={'(',')','+','-','*','/','^'};for(int i=0;i

{if(op==oper[i])

{ return true;

}} return false;}

intgetOperOrder(char op)//返回运算符op所对应的优先级 {switch(op){case '(': return 1;case '+': case '-': return 2;case '*': case '/': return 3;case '^': return 4;default: //定义在栈中的右括号和栈底字符的优先级最低

return 0;

} }

void freeTree(TNode *&p)//释放树 {if(p->left!=NULL)freeTree(p->left);if(p->right!=NULL)freeTree(p->right);delete(p);cout<<“Memory free ”;}

void postOrder(TNode *p)//先序遍历 {if(p){postOrder(p->left);postOrder(p->right);cout<

oper;}}

void preOrder(TNode *p)//后序遍历 {if(p){cout<

oper;preOrder(p->left);preOrder(p->right);}}

void inOrder(TNode *p)//中序遍历 {if(p){ if(p->left){ if(isOper(p->left->oper)&&getOperOrder(p->left->oper)oper)){cout<<“(”;inOrder(p->left);cout<<“)”;}else{ inOrder(p->left);

} } cout<

oper;if(p->right){ if(isOper(p->right->oper)&&getOperOrder(p->right->oper)<=getOperOrder(p->oper)){cout<<“(”;inOrder(p->right);cout<<“)”;}else{ inOrder(p->right);

} } } }

void ExpTree1(TNode *&p,stringstr)//后缀表达式生成二叉树 {stacknodeStack;char temp;int i=0;temp=str[i++];while(temp!=''){ if(temp!=''&&!isOper(temp))//不是运算符,则进栈

{ p=new TNode(temp);//以temp为结点值构造二叉树结点 nodeStack.push(p);temp=str[i++];} else {

p=new TNode(temp);if(nodeStack.size())

{p->right=nodeStack.top();//若非空则弹栈并设为结点的右孩子 nodeStack.pop();} if(nodeStack.size())

{p->left=nodeStack.top();//若非空则弹栈并设为结点的左孩子 nodeStack.pop();} nodeStack.push(p);temp=str[i++];

} } } void ExpTree3(TNode *&p, string str)//前缀表达式生成二叉树 {stacknodeStack;char temp;int i=str.size()-1;temp=str[i--];while(temp!=''){ if(temp!=''&&!isOper(temp))

{ p=new TNode(temp);//以temp为内容来建立新的结点 nodeStack.push(p);temp=str[i--];} else { p=new TNode(temp);

if(nodeStack.size())//若栈顶指针所指结点左孩子为空

{ p->left=nodeStack.top();//则当前结点设置成其左孩子 nodeStack.pop();

} if(nodeStack.size())//若栈顶指针所指结点右孩子为空

{p->right=nodeStack.top();//则当前结点设置成其右孩子 nodeStack.pop();//栈顶元素左右孩子指针设置完毕弹出 } nodeStack.push(p);} } } temp=str[i--];

void ExpTree2(TNode *&p, string str)//中缀表达式转换成后缀表达式生成二叉树 {stack a;char temp;stringPostfixexp=“";int i=0;temp=str[i++];while(temp!=''){ if(!isOper(temp)){Postfixexp+=temp;temp=str[i++];} else if(temp=='(')//进栈

{a.push(temp);temp=str[i++];}

else if(temp==')'){ while(a.top()!='(')//脱括号

{ Postfixexp+=a.top();a.pop();//在碰到开括号和栈为空前反复弹出栈中元素 } a.pop();temp=str[i++];

}else if(temp=='+'||temp=='-'||temp=='*'||temp=='/')//出栈{ while(!a.empty()&&a.top()!='('&&getOperOrder(a.top())>=getOperOrder(tem

p))//若栈非空栈顶不是左括号且栈顶元素优先级不低于输入运算符时,//将栈顶元素弹出到后缀表达式中,并且str下标加1

{ Postfixexp+=a.top();a.pop();} a.push(temp);temp=str[i++];

}} while(!a.empty()){Postfixexp+=a.top();a.pop();} ExpTree1(p,Postfixexp);} void count(TNode *p,int&height,int n)//求值函数 { if(p->left==NULL&&p->right==NULL)

{if(n>height)height=n;} if(p->left!=NULL)count(p->left,height,n+1);if(p->right!=NULL)count(p->right,height,n+1);} void paint(TNode *p)//输出函数 {int height=0;

int h=0;int i;usingstd::queue;queueaQueue;count(p,height,1);TNode *pointer=p;TNode *lastpointer;if(pointer){ pointer->s=1;pointer->t=1;aQueue.push(pointer);} while(!aQueue.empty()){ lastpointer=pointer;pointer=aQueue.front();aQueue.pop();if(pointer->s>h){cout<

h=pointer->s;} if(pointer->t==1){for(i=0;i

s)-1;i++)cout<<” “;} else if(lastpointer->s!=pointer->s){

for(i=0;i<(pointer->t-1)*(pow(2,height-pointer->s+1)-1)+(pointer->t-1)-1+pow(2,height-pointer->s);i++)cout<<” “;} else {for(i=0;i<(pointer->t-lastpointer->t)*(pow(2,height-pointer->s+1)-1)+(pointer->t-lastpointer->t)-1;i++)cout<<” “;} cout<

oper;if(pointer->left!=NULL){

pointer->left->s=pointer->s+1;pointer->left->t=pointer->t*2-1;aQueue.push(pointer->left);} if(pointer->right!=NULL){ pointer->right->s=pointer->s+1;pointer->right->t=pointer->t*2;aQueue.push(pointer->right);

} }} int main(){string expression;TNode *tree;cout<>expression;

if(isOper(expression[0]))ExpTree3(tree,expression);

else if(isOper(expression[1]))ExpTree2(tree,expression);

else ExpTree1(tree,expression);

paint(tree);cout<

cout<<”前缀表达式为:“;preOrder(tree);cout<

cout<<”后缀表达式为:“;postOrder(tree);cout<

(1)请输入字符串表达式:-+1*234

+

1

*

中缀表达式为:1+2*3-4 前缀表达式为:-+1*234 后缀表达式为:123*+4-memory freememory free memory free memory freememory free 请按任意键继续………………………..(3)请输入字符串表达式:123*+4-

+

1

*

中缀表达式为:1+2*3-4 前缀表达式为:-+1*234 后缀表达式为:123*+4-memory freememory free memory free memory freememory free 请按任意键继续………………………..测试截图:

6.总结:

程序调试中的问题及解决方法:前缀表达式建树,通过入栈出栈操作求出前缀表达式的逆序,针对得到的逆序表达式通过后缀表达式建立二叉树的方法,遇到操作数则入栈,遇到操作符则从栈中弹出两个操作数构建一棵小的二叉树,然后将小树的根节点入栈以便于下次操作。经过循环,小树“长成”大树,表达式读完二叉树即建成。

心得体会:由于之前的上机较简单,经过这次作业我才深深感受到编程的滋味,真是苦中有乐,完成之后觉得知识点掌握的更加透彻了,因为有好多问题是不上机根本想不到的,只有经过了实践才会有提高,自己还是太缺乏锻炼,应该多动手编程,从整理思路、编写代码、调试程序修改错误等各方面不断完善自己 7.使用说明:

请输入字符串表达式:可为前缀、中缀、后缀表达式(程序自动判断)

第二篇:用算盘表示数

用算盘表示数

上课日期:___月___日

【教学内容】

教材第34-35页例

4、“试一试”、“想想做做”第1-4题和“你知道吗”。【教学目标】

1.使学生人数算盘和算盘的结构,了解在算盘上表示数的方法,能说出算盘上表示的数是多少;能在算盘上拨珠表示数,能说出算盘上数的组成并能读、写算盘上的数。

2.使学生通过用算盘表示数,感受记数工具的科学和方便,体会记数工具和数的表示方法的多样性,进一步发展数感;感受我国劳动人民的聪明才智,初步体会中华文化的悠久与深厚,逐步产生热爱中华文化的积极情感。

【教学重难点】

用算盘表示数。掌握上珠以一作五的记数方法。【教学准备】

师生每人准备算盘、计数器,要求学生事先在算盘上从右边一档起表示出个、十、百、千位。

【教学过程】

一、拨珠引入 1.看珠读数。

出示计数器(或在黑板上画出计数器)让学生说一说数位顺序。

在计数器上分别拨出(或在画出的计数器上用磁性算珠表示)四百、三百二十四、一千先指名读出计数器上的数,并说出各数的组成,再集体读一读计数器上的数。

追问:计数器百位上拨4个珠表示多少?第二个计数器上为什么是三百二十四?在计数器上表示一千?

2.拨珠写数。

板书:五百、二百三十、四百二十五。

让学生在计数器上拨一拨,并写出相应的数。

交流:这三个数在计数器上是怎样拨的?又是怎样写是?(结合交流,教师演示拨珠并板书写数)

3.引入课题。

小朋友已经能熟练地看计数器上拨出的数珠读出表示的数,能在计数器上拨珠表示一个数,看数珠写出计数器上的数。在表示数的时候,除了以前用过的小棒、计数器,还有我国劳动人民创造的计算工具——算盘,用算盘不仅可以表示数,还可以计算加、减法和乘、除法。今天,我们就来学习用算盘表示数。(板书课题)

二、学习新知 1.学习例4.(1)认识算盘。

出示算盘并提问:有哪些小朋友见过算盘,举手给大家看一看。

你知道算盘是谁发明的?它有什么用处?看一看你带来的是七珠算盘还是五珠算盘,告诉老师。(选择七珠和五珠算盘介绍给学生观察)

指出:算盘是1000多年前由我国古代劳动人民发明的,它可以用来记数和计算。算盘原来每档七个珠,后来出现了每档五个珠的算盘,使用方法是一样的。现在我们来认识算盘。

出示教具算盘,介绍算盘各部分名称,了解结构,再让同桌小朋友互相数一数自己的算盘有几档,指一指梁和上珠、下珠。(2)认识记数方法。

引导:认识了算盘,我们就学习用算盘记数。算盘上也要按数位记数,可以把最右边一档作为个位,按顺序接着是——(十位、百位、千位)。(在教具算盘上表示出数位)请小朋友看自己算盘上的数位,从右边起一起按顺序说一说数位。

说明:在算盘上记数,要拨珠靠梁。拨一个下珠表示1(教师在个位上拨一个下珠),再添一个(拨珠)表示2。请小朋友在个位上拨3个 下珠,你拨出的表示几?你再添一个下珠,现在表示几呢?

接下来的5要用上珠,拨一个上珠表示5(教师在个位上拨一个上珠)追问:老师算盘上这一个上珠表示的是几?

引导:小朋友伸出5个手指,再 握成一个拳头。这一个拳头里有几个指头?这一个上珠就像一个拳头一样,一个就表示5。你看我国古代劳动人民多聪明,想到了用一个上珠表示5的好办法,这样拨珠就比刚才的计数器上简单了许多,方便了许多。现在你能在个位上拨出5吗?(学生操作)你是怎样拨珠表示5的?

你知道6怎样拨吗?同桌讨论讨论,在个位上拨一拨,等会和大家交流。

交流:6要怎样拨珠?(教师示范,错误的纠正)为什么这样拨?(上珠是5,下珠是1,合起来表示6)

再拨一个下珠(教师拨珠)是几?为什么是7?请小朋友在算盘上拨珠表示7.接下来大家跟老师一起拨下来。再添一个表示——(8),再添一个表示——(9)。教师在算盘上拨出3、8、5、7,让学生说一说各表示的是几。让学生在算盘上拨珠表示4、6、9、5.现在跟老师一起,从1拨到9,能行吗?我们一起来!(师生边数边一起拨珠,拨到4提问接下来5怎样拨?再拨珠表示5,然后依次拨到9)

追问:再数一个是几?算盘上怎样拨?(教师演示个位上去9向十位进1,表示10)拨珠:请一位小朋友到上面拨珠,其余小朋友一起在下面拨数:拨出30,再拨70;现在拨150、620。(学生拨数,教师巡视指导,并对照板演交流)

(3)看算盘读数、写数。出示例4里算盘上表示的数,指名说一说各表示多少,选择两个数说说怎样看出表示多少的;再集体读出每个算盘上表示的数。

让学生对照算盘写数(指名一人板演),交流写的数并读一读。2.学习“试一试”。

学生和教师一起完成第(1)题数数、拨数,注意89后面数90怎样拨珠,99后面数100怎样拨珠。

指名学生板演完成第(2)题数数、拨数;再师生一起数数,学生独立拨数,教师巡视指导。

教师按第(3)题数数,学生拨数,拨到1000.追问:800在算盘上怎样表示?1000呢? 3.回顾比较。

提问:算盘上表示数和计数器上有什么相同的地方?(数位顺序一样,都是按各个数位上是几拨数)有什么不同的地方?(计数器上一个珠表示1;算盘上一个下珠表示1,一个上珠表示5)

三、巩固练习

1.做“想想做做”第1题。

让同桌小朋友互相说一说组成,读一读各是多少。

交流:谁来说说算盘上的数的组成,并读一读每个数是多少? 说明:算盘上读数,和计数器上一样,先按数位看清由几个百、几个十和几个一组成,就可以正确地读出这个数。

2.做“想想做做”第2题。

出示“想想做做”第2题用算盘表示的数,指名学生读一读算盘上的数,结合提问第二个数为什么读九百,第三个数为什么读四百零八。

集体依次读一读这四个数,再让学生独立写数。(指名一人板演)

交流写出的数,结合提问900为什么末尾写两个0,408为什么中间写0。让学生集体读写出的数。

说明:根据算盘上的数写数,和上节课学习的写数一样。算盘上哪一位上是几就写几,如果哪个数位上一个也没有,就在那一位写0。

3.“想想做做”第3题。

指名学生读数,再集体读一遍。

教师依次读数,让学生拨数(指名一人板演),每次校对拨的数,同桌交互检查、纠错,注意数位上满5的数的拨法。

4.“想想做做”第4题。

谈话:现在你也能一边报数、一边拨数了吗?那请小组里的小朋友确定一人报数,其他小朋友按照报数拨出来。

学生在小组里报数、拨数,教师巡视、检查。

四、全课总结

提问:我们今天学习的什么内容?你对算盘有哪些认识?在算盘上怎样表示数?

第三篇:用算盘表示数

用算盘表示数

教学内容:书p34-35。教学目标:

1.使学生初步认识算盘的结构,了解用算盘表示数的方法,能读出和写算盘上表示的千以内的数,能按要求在算盘上拨数。

2.通过拨数练习,掌握用算盘表示数的方法,形成相应的技能,同时还能激发学生对算盘的兴趣。

3.感觉中华文明的悠久历史,激发民族自豪感,培养爱国热情。教学重点:用算盘表示数的方法。

教学难点:从4到5,从9到10的拨珠方法。教学准备:教师:光盘、课件、教具算盘。学生:学具算盘。教学过程:

一、情景引入:

我国古代劳动人民通过劳动发明和创造出许多使用工具,早在1000多年前,古代劳动人民开始用算盘记数和计算。今天让我们一起走近算盘,了解算盘,应用算盘。

二、探究学习:

模块一:学习算盘的结构及表示数的方法。1.自主先学:

(1)关于算盘,你知道它是怎样组成的吗?

(2)在算盘上尝试定好个位、十位、百位、千位。

(3)你知道算盘上的珠子是怎样表示数的? 2.学情预判:

学生对算盘是既好奇又陌生,由于当今天信息化的飞速发展,人们对用算盘计数早已淡忘。学生在家长的指导下可能粗略地知道了一些关于算盘的知识,但是这些知识不完整是零星的。所以教学中采用集体交流的形式,教师帮助学生把零星的知识串起来,形成完整的认知。3.后教预设:

集体交流:算盘的组成,算盘上的定位,算盘上的珠子是怎样表示数的。

借助媒体或实物,认识框、梁、档、上珠、下珠。

记数时,拨珠靠梁,一个下珠表示1,一个上珠表示5.拨珠方法:上珠用中指拨上、拨下。下珠用大拇指拨上、用食指拨下。

为了表示数的方便,一般在算盘的梁上定好档位,标上个位、十位、百位、千位。

模块二:学习用算盘表示数。1.自主先学:(1)在小组内照书上的样子拨出数4、37、60、802、900,拨好一个数后,一起说一说是怎样拨的?学习组长注意关注小组内的成员是否拨正确。然后写一写这个数。

(2)一个一个地拨数,从1到18,从85到100.再一十一十地拨数,从280到350,再一百一百地拨数,从100到1000.然后相互说说方法。2.学情预判:

学生照着书上的图拨数,并说拨法及写数在充分认识算盘后是易操作的,但一个一个地拨、数,一十一十地拨、数,一百一百地拨、数对学困生可能一下有些跳跃,思维会跟不上,同时边操作,通过操作体会归纳出一般方法也是学生学习中的一个重难点所在。3.后教预设:

(1)小组上台展示交流:4,拨在哪一位?拨几颗珠?怎样拨?表示什么? 37,在算盘上拨在几位?与拨4有什么不同?

60,也是一个两位数,为什么在算盘上只拨了个6?这个6能拨在个位或百位上吗?

802,又是怎样拨的?为什么十位上一个珠子都不拨? 900,这个数是怎样拨的?9拨在哪一位,表示什么?

体会一位数、两位数、三位数在算盘上的拨数方法,中间有0,或末位有0的要注意,哪一位是0就在哪一位上空档不拨珠。

(2)一个展示,集体跟着拨,并思考拨数方法:

一个一个地数,从4到5是怎样拨的?上档拨下一颗珠表示5,下档原来的4颗珠都拨去。从9到10又是怎样拨珠的?9加1满10了要向前一位进1,所以个位上拨去9,在十位上拨上1.同例交流出一十一十地拨数方法,如40到50是怎样拨的?90到100是怎样拨的?一百一百地拨数方法,400到500的拨法,900到1000的拨法。

三、反馈完善: 1.想想做做1.学生照书上的样子在算盘上拨一拨数,同桌说一说数的组成,并读出这个数。2.想想做做2.读出算盘上表示的数,指名上黑板写出数。其余学生在自练习本上写。

集体校对,有错的说出错在哪儿了,并纠正。3.想想做做3.指一生报数,其余学生在算盘上拨出来。再指名说出是怎样拨的? 4.想想做做4.小组活动:一人说数,三人拨数,比比谁拨得又对又快。5.读一读“你知道吗?”

说说你的读后体会。

四、课堂总结: 通过本节课的学习,你学会了些什么新知识?

五、课堂作业:

补充习题 页。

第四篇:AE 表达式

表达式中英对照

全局对象

Comp comp(name)用另一个名字给合成命名。

Footage footage(name)用另一个名字给脚本标志命名。

Comp thisComp 描述合成内容的表达式。例如:thisComp.layer(2)

Layer, Light, or Camera thisLayer 是对层本身的描述,thisLayer是一个默认的对象,对它的应用是可选的。例如, 用表达式 thisLayer.width 或 width 可获得同样的结果。

Property thisProperty 描述属性的表达式。例如,如果写一个旋转属性的表达式就能获取旋转属性的值。

Number time 描述合成的时间, 单位是秒。

Number colorDepth 返回8或16表示的彩色深度位数值。例如, 当项目的每通道的彩色深度为16位时colorDepth 返回16。

Number posterizeTime(framesPerSecond){framesPerSecond 是一个数}返回或改变帧率。允许用这个表达式设置比合成低的帧率。

向量数学方法

Array add(vec1, vec2){vec1 和 vec2 是数组} 两个向量相加。

Array sub(vec1, vec2){vec1 和 vec2 是数组}两个向量相减。

Array mul(vec1, amount){vec1 是数组, amount 是数} 向量的每个元素被 amount相乘。

Array p(vec1, amount){vec1 是数组, amount 是数}向量的每个元素被 amount相除。

Number or Array Clamp(value, limit1, limit2)限制value中每个元素的值在 limit1 到 limit2之间。

Number dot(vec1, vec2){vec1 和 vec2 是数组} 返回点积, 结果为两个向量相乘。

Array [2 or 3] cross(vec1, vec2){vec1 和 vec2 是数组 [2 or 3]} 返回向量的交积。Array normalize(vec){vec 是数组} 格式化一个向量,如某长度表示为1.0.Number length(vec){vec是数组}返回向量的长度。

Number length(point1, point2){point1 and point2 是数组}

随机数方法

Nothing seedRandom(seed, timeless=false){seed 是一个数, 默认 timeless 为 false} 取现有的seed 增量一个随机值,这个随机值依赖于层的 index(number)和 stream(property),但不总是这样.例如, seedRandom(n, true)通过给第二个参数赋值 true ,seedRandom()获取一个0到1间的随机数.Number random()返回0和1间的随机数.Number or Array random(maxValOrArray){maxValOrArray 是一个数或数组}返回0到maxVal间的数,维度 与 maxVal相同;或返回与maxArray相同维度的数组, 数组的每个元素在 0 到 maxArray之间

Number or Array random(minValOrArray, maxValOrArray){minValOrArray 和 maxValOrArray 是一个数或数组} 返回一个minVal 到 maxVal间的数, 或返回一个与 minArray和maxArray有相同维度的数组,其每个元素的范围在 minArray 与 maxArray之间.例如, random([100, 200], [300, 400])返回数组的第一个值在 100 到300间, 第二个值在 200 到400间.如果两个数组的维度不同,较短的一个后面自动用0补齐.Number gaussRandom()返回一个0到1之间的随机数.结果为钟形分布,大约90%的结果在 0 到1之间, 剩余10%在边沿.Number or Array gaussRandom(maxValOrArray){maxValOrArray是一个数或数组}当用maxVal,它返回一个0到maxVal之间的随机数.结果为钟形分布,大约90%的结果在0到maxVal之间,剩余10%在边缘.当用maxArray,它返回一个与maxArray相同维度的数组, 结果为钟形分布,大约90%的结果在 0到maxArray之间, 剩余10%在边缘.Number gaussRandom(minValOrArray, maxValOrArray){minValOrArray和maxValOrArray是一个数或数组} 当用minVal和 maxVal, 它返回一个minVal到maxVal之间的随机数.结果为钟形分布,大约90%的结果在minVal到maxVal之间, 剩余10%在边缘.当用minArray和maxArray, 它返回一个与 minArray和maxArray相同维度的数组, 结果为钟形分布,大约90%的结果在 minArray到maxArray之间, 剩余10%在边缘.剩余10%在边缘.Number noise(valOrArray){valOrArray是一个数或数组 [2 or 3]}返回一个0到1间的数.噪声不是事实上的随机,但它是在样本附近相关的随机数.它基于花边噪声.例如, add(position, 2 noise(position)*50).插值方法

Number or Array linear(t, value1, value2){t 是一个数, value1 和 value2 是一个数或数组}当t的范围从0到1时,返回一个从value1到value2的线性插值。当 t <= 0时返回value1,当 t >= 1时返回 value2。.Number or Array linear(t, tMin, tMax, value1, value2){t, tMin和 tMax are 数, value1和value2 是数或数组} 当 t <= tmin时返回value1;当t >= tMax时,返回value2 ;当tMin < t < tMax 时,返回 value1和value2 的线性联合。

Number or Array ease(t, value1, value2){t 是一个数, value1 和 value2 是数或数组} 返回值与linear相似, 但在开始和结束点的速率都为0。这种方法的结果是动画非常平滑。

Number or Array ease(t, tMin, tMax, value1, value2){t, tMin, 和 tMax 是数, value1 和 value2 是数或数组} 返回 值与 linear相似, 但在开始和结束点的速率都为0。这种方法的结果是动画非常平滑。

Number or Array easeIn(t, value1, value2){t 是一个数, and value1 and value2 是数或数组} 返回 值与ease相似, 但只在切入点value1 的速率为0,靠近value2 一边是线性的。

Number or Array easeIn(t, tMin, tMax, value1, value2){t, tMin和tMax 是一个数, value1和value2 是数或数组}返回 值与ease相似, 但只在切入点tMin 的速率为0,靠近tMax 一边是线性的。

Number or Array easeOut(t, value1, value2){t 是一个数, value1和value2 是数或数组}.返回 值与ease相似, 但只在切入点value2 的速率为0,靠近value1 一边是线性的。

Number or Array easeOut(t, tMin, tMax, value1, value2){t, tMin和tMax 是数, value1 value2 是数或数组} 返回 值与ease相似, 但只在切入点tMax的速率为0,靠近tMin 一边是线性的。

彩色转换方法

Array [4] rgbToHsl(rgbaArray){rgbaArray 是数组 [4]} 转换 RGBA 彩色空间到 HSLA彩色空间。输入数组指定红、绿、蓝、透明,它们的范围都在 0.0 到 1.0之间。结果值是一个指定色调、饱和度、亮度和透明的数组,它们的范围都在 0.0 到 1.0之间。例如, rgbToHsl.effect(“Change Color”)(“Color To Change”)。

Array [4] hslToRgb(hslaArray){hslaArray 是数组[4]}.转换 HSLA彩色空间到RGBA 彩色 空间。其操作与rgbToHsl相反。

其它数学方法

Number degreesToRadians(degrees)转换度到弧度。

Number radiansToDegrees(radians)转换弧度到度。

Comp属性和方法

------------------Layer, Light, or Camera layer(index){index 是一个数} 得到层的序数(在时间线窗口中的顺序).例如, thisComp.layer(3).Layer, Light, or Camera layer(“name”){name是一个字串} 得到层名。指定的名字与层名匹配,或者在没有层名时与源名匹配。如果存在重名,After Effects 使用时间线窗口中的第一个.例如, thisComp.layer(“Solid 1”).Layer, Light, or Camera layer(otherLayer, relIndex){otherLayer 一 个层对象,relIndex 是一个数} 得到otherLayer(层名)上面或下面relIndex(数)的一个层。例如, layer(thisLayer,-2)返回 在时间线窗口中比写这个表达式的层高两层的一个层。

Number marker(markerNum){markerNum 是一个数}得到合成中一个标记点的时间。你可以用它减淡标记点的透明,实现淡出。例如, markTime = thisComp.marker(1);linear(time, markTimenearestKey(time).time);easeOut(d, 0,.1, 100, 0).Key key(markerName)用这个名字 返回标记的 key 对象。仅用于标记属性。

Key nearestKey(time)返回指定时间最近的关键帧对象。

Number numKeys 返回 在一个属性中 关键帧 的数目。

关键帧属性和方法

------------------

Number or Array value 返回关键帧的值。

Number time 返回关键帧的时间。

Number index 返回 关键帧的序号File菜单

新建 ← New

┗New Project → 新建项目

New Folder →新建文件夹

打开项目 ← Open Project

打开最近项目 ← Open Recent Projects

关闭 ← Close

保存 ← Save

另存为 ← Save As...保存副本 ← Save a Copy...恢复 ← Revert

导入 ← Import

┗File...→ 文件

Multiple Files...→多个文件

Placeholder...→输入占位符

Solid...→实色

导入最近镜头 ← Import Recent Footage

输出 ← Export

查找 ← Find...再次查找 ← Find Next

添加镜头到合成 ← Add Footage to Comp 选定脚本建立合成 ← New Comp From Selection...整理镜头 ← Consolidate All Footage

删除未用镜头 ← Remove Unused Footage

简化项目 ← Reduce Project

文件打包 ← Collect Files...浏览文件夹 ← Watch Folder...运行脚本 ← Run Script

建立代理 ← Create Proxy

┗Still...→ 静态图片

Movie...→ 影片

设置代理 ← Set Proxy

┗File...→ 文件

None

→无

解释镜头 ← Interpret Footage

┗Main...→ 常规

Proxy...→ 代理

Remember Interpretation →保存解释

Apply Interpretation

→应用解释

替换镜头 ← Replace Footage

┗File...→ 文件

Placeholder...→ 占位符

Solid..→ 实色

重载镜头 ← Reload Footage

显示所在文件夹 ← Reveal in Explorer

项目设置 ← Project Settings...打印 ← Print...退出 ← Exit Edit菜单

撤消 ← Undo Copy

重复 ← Redo Copy

历史记录 ← History

剪切 ← Cut

复制 ← Copy

粘贴 ← Paste

清楚 ← Clear

副本 ← Duplicate

分层图层 ← Split Layer 抽出工作区域 ← Lift Work Area 挤压工作区域 ← Extrace Work Area

选择全部 ← Select All

全部取消 ← Deselect All

标签 ← Label

清空 ← Pruge

┗All

→ 全部

Undo

→ 撤消

Image Caches → 图象缓存

Snapshot

→ 快照

Video Memory → 视频内存

编辑原稿 ← Edit Original

模版 ← Templates

┗Render Settings...→ 渲染设置

Output Module...→ 输出模式

预置 ← Preferences

┗General...→ 常规

Previews...→ 预演

Display

→ 显示

Import...→ 输入

Output

→ 输出

Grids & Guides...→ 辅助线及网络

Label Colors...→ 标签颜色

Label Defaults...→ 标签设置

Cache...→ 缓存

Video Preview...→ 视频预演

Animation菜单

添加关键帧 ← Add Keyframe

冻结关键帧 ← Toggle Hold Keyframe

关键帧插值 ← Keyframe Interpolation...关键帧速率 ← Keyframe Velcity...辅助关键帧 ← Keyframe Assistant

┗Convert Audio to Keyframes

→ 转换音频为关键帧

Convert Expression to Keyframes → 转换表达式为关键帧

Easy Ease

→ 缓和曲线

Easy Ease In

→ 缓和曲线进入

Easy Ease Out

→ 缓和曲线离开

Exponential Scale

→ 指数缩放

RPF Camera Import

→ RPF摄象机导入

Sequence Layers...→ 图层排序

Time-Reverse Keyframes

→ 反转关键帧

文字动画 ← Animate Text

┗Anchor Point

→ 轴心点

Position

→ 位置

Scale

→ 缩放

Skew

→ 倾斜

Rotation

→ 旋转

Opacity

→ 不透明度

All Transform

→ 所有变换

Fill Color

→ 填充色

Stroke Color

→ 描边色

Stroke Width

→ 描边宽度

Tracking

→ 追踪

Line Anchor

→ 线形频谱

Line Spacing

→ 线形间距

Character Offset → 字符位移

Character Value → 字符值率

添加文字选择器 ← Add Text Selector

┗Range →平行

Wiggly → 抖动

移除所有文字动画 ← Remove All Text Animators

添加表达式 ← Add Expression

追踪运动 ← Track Motion

稳定运动 ← Stabilize Motion

追踪当前属性 ← Track this property

显示关键帧 ← Reveal Animating Properties

显示被修改属性 ← Reveal Modified Properties 15

第五篇:实验报告:二叉树

实验报告 二叉树

一 实验目的

1、进一步掌握指针变量,动态变量的含义;

2、掌握二叉树的结构特性以及各种存储结构的特点及适用范围。

3、掌握用指针类型描述、访问和处理二叉树的运算。

4、熟悉各种存储结构的特征以及如何应用树结构解决具体问题。

二 实验原理

树形结构是一种应用十分广泛和重要的非线性数据结构,是一种以分支关系定义的层次结构。在这种结构中,每个数据元素至多只有一个前驱,但可以有多个后继;数据元素之间的关系是一对多的层次关系。树形结构主要用于描述客观世界中具有层次结构的数据关系,它在客观世界中大量存在。遍历二叉树的实质是将非线性结构转为线性结构。

三 使用仪器,材料 计算机 2 Wndows xp 3 VC6.0

四实验步骤

【问题描述】建立一个二叉树,请分别按前序,中序和后序遍历该二叉树。【基本要求】从键盘接受输入(按前序顺序),以二叉链表作为存储结构,建立二叉树(以前序来建立),并采用递归算法对其进行前序,中序和后序遍历,将结果输出。

【实现提示】按前序次序输入二叉树中结点的值(一个整数),0表示空树,叶子结点的特征是其左右孩子指针为空。

五实验过程原始记录 基本数据结构描述; 2 函数间的调用关系; 用类C语言描述各个子函数的算法; 附录:源程序。

六 试验结果分析

将实验结果分析、实验中遇到的问题和解决问题的方法以及关于本实验项目的心得体会,写在实验报告上。

表达式用二叉树表示
TOP