数据结构课程设计(算术表达式求值)-计算器讲课稿

数据结构课程设计(算术表达式求值)-计算器讲课稿
数据结构课程设计(算术表达式求值)-计算器讲课稿

数据结构课程设计(算术表达式求值)-计算

高级语言程序设计

《算术表达式求值》

课程设计报告

算术表达式求值

系统可以实现实现对算术四则混合运算表达式求值,并打印求值过程中运算符栈、操作数栈的变化过程。

第二章系统分析

开始运行时界面如下:

你可以输入一个表达式,按E对其进行求值。

第四章系统实现

#include

#include

#include

#include

#define N 100

double numStack[N]={0};//操作数栈

int numTop;

char opStack[N];//运算符栈

int opTop;

void print_num(double str1[],int n)

{

int i;

printf("\n操作数栈:\n");

for(i=0;i

printf("%g ",str1[i]);

}

void print_op(char str2[],int m)

{

int j;

printf("\n运算符栈:\n");

for(j=0;j

printf("%c ",str2[j]);

}

int op(char ch)//判断运算符优先级

{

if(ch=='+'||ch=='-') return 2;

if(ch=='*'||ch=='/') return 3;

if(ch=='(') return -1;

return 0;

}

double result(double num1,char op,double num2)//计算

{

if(op=='+') return num1+num2;

if(op=='-') return num1-num2;

if(op=='*') return num1*num2;

if(op=='/') return num1/num2;

return 0;

}

int compute(char str[])

{

double num=0;

int i=0,j=1,k=1;

numTop=opTop=0;

while(str[i]!='\0'||opTop>0)

{

if(str[i]>='0'&&str[i]<='9')

num=num*10+str[i]-'0';

else if( k==1&&str[i]=='-'&&(i==0||op(str[i-1])) )

k=-1;

else

{

if(i>0&&!op(str[i-1])&&str[i]!='('&&str[i-1]!=')')

{

numStack[numTop++]=num*k;

if(opTop!=0&&numTop!=0)

print_num(numStack,numTop);

num=0; j=1; k=1;

}

if(opTop==0||str[i]=='(')

{opStack[opTop++]=str[i];print_op(opStack,opTop);}

else if(str[i]==')')

{

while(opTop>0&&opStack[--opTop]!='(')

{

numStack[numTop-2]=result(numStack[numTop-2],opStack[opTop],numStack[numTop-1]);

if(opTop!=0&&numTop!=0)

{

print_num(numStack,numTop);

print_op(opStack,opTop);

}

numTop--;

}

if(opStack[opTop]!='(') return 0;

}

else

{

if(str[i]=='\0'&&numTop==0) return 0;

while(opTop>0&&op(str[i])<=op(opStack[opTop-1])) {

numStack[numTop-2]=result(numStack[numTop-2],opStack[--opTop],numStack[numTop-1]);

if(opTop!=0&&numTop!=0)

{

print_num(numStack,numTop-1); print_op(opStack,opTop);

}

numTop--;

}

if(str[i]!='\0')

opStack[opTop++]=str[i];

if(opTop!=0&&numTop!=0)

print_op(opStack,opTop);

}

}

if(str[i]!='\0')

i++;

}

if(numTop!=1||opTop!=0)

return 0;

return 1;

}

void menu()

{

system("cls");

printf("_______________________________\n");

printf(" Clear(C) | Equal(E) | Quit(Q) \n");

printf("-------------------------------\n");

}

int main(void)

{

int i=0,j=0,k;

char str[N]="\0";

char num[N]="\0";

char save[N]="\0";

char ch;

double temp;

unsigned long temp2;

menu();

printf("input an expression,press key 'E' to compute\n");

ch=getch();

while( 1 )

{

if(ch==')'||op(ch)||ch>='0'&&ch<='9')

{

str[i++]=ch;

str[i]='\0';

menu();

printf("input an expression,press key 'E' to compute\n"); printf("%s",str);

if( ch=='-'&&(i==1||op(str[i-2]))||ch>='0'&&ch<='9' )

{

num[j++]=ch;

num[j]='\0';

}

else

j=0;

}

if(ch=='C'||ch=='c')

{

if(strlen(str))

str[--i]='\0';

menu();

printf("input an expression,press key 'E' to compute\n"); printf("%s",str);

}

if(ch=='E'||ch=='e')

{

if(compute(str))

{

printf("\n=%g\n",numStack[0]);

j=0; temp=numStack[0];

if(temp<0)

{

temp=-temp;

num[j++]='-';

num[j]='\0';

}

temp2=(unsigned long)temp;

k=1;

while(temp2/k>=10) k*=10;

while(k)

{

num[j++]=temp2/k+'0';

num[j]='\0';

temp2=temp2%k;

k/=10;

}

temp=temp-(int)temp;

if(temp!=0)

{

num[j++]='.';

num[j]='\0';

temp+=0.0000005;

}

for(k=6;k>0;k--)

{

if(temp==0) break;

temp*=10;

num[j++]=(int)temp+'0';

num[j]='\0';

temp=temp-(int)temp;

}

}

i=0; j=0; str[0]='\0';

}

if(ch=='Q'||ch=='q')

{

printf("\nare you sure to quit?(Y/N)\n");

ch=getch();

if(ch=='Y'||ch=='y') break;

else

{

menu();

printf("input an expression,press key 'E' to compute\n"); printf("%s",str);

}

}

ch=getch();

}

return 0;

}

第五章系统测试

1.先输入: 3+2*5 后按E求值

2.再输入:12/4-5 后按E求值

3.再输入Q

4.输入Y,退出系统。

第六章设计心得

收获:经过这次课程设计我重新回忆起许多以前学过的知识,如:栈,字符串等等。也学习到了一些新的知识,如:%g是数值输出时去掉无用的零,等等。

疑问:如何进行函数运算,如:log,sin等等。

第七章参考文献

杨升,数据结构,厦门出版社,2009

教师评语和成绩

2010 年 7月

实验四 计数器电路设计

实验四、计数器电路的设计 一、实验目的 1、掌握计数器电路的设计方法; 2、进一步掌握电路的设计、编译、仿真和下载测试的方法。 二、实验要求 1、基本要求 1)设计一个具有异步复位和同步使能的4位二进制加法计数器 2)设计一个具有异步复位和同步使能、并行置数的加减可控的8位二进制计数器 3)设计一个具有异步复位和同步使能的BCD码加法计数电路, 2、扩展要求 1)设计一个具有异步复位和同步使能的六十进制加法计数电路 2)设计一个具有异步复位和同步使能的二十四进制加法计数电路 三、实验原理 四、实验内容及步骤 1、建立一个工程项目,路径如:D:\A0512301\forth,项目名和顶层实体名为count。 2、设计一个具有异步复位和同步使能的4位二进制计数器,并进行编译仿真与下载测试; 3、设计一个具有异步复位和同步使能、并行置数的加减可控的8位二进制计数器,并进行编译仿真与下载测试; 4、设计一个具有异步复位和同步使能的十进制加法计数电路,并进行编译仿真与下载测 试; 五、参考程序 1、四位加法计数器 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1 + 1 ; END IF; END PROCESS ; Q <= Q1 ; END bhv; 2、异步复位,同步使能十进制加法计数器 LIBRARY IEEE;

数据结构表达式求值实验报告

竭诚为您提供优质文档/双击可除数据结构表达式求值实验报告 篇一:数据结构实验二——算术表达式求值实验报告 《数据结构与数据库》 实验报告 实验题目算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系pb0920603 姓学 邮名:李维谷号:pb09206285箱: liwg@https://www.360docs.net/doc/9c13624987.html,指导教师:贾伯琪 实验时间:20XX年10月10日 一、需要分析 问题描述: 表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。

问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个(:数据结构表达式求值实验报告)算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)#

数据结构实验二——算术表达式求值实验报告

《数据结构与数据库》 实验报告 实验题目 算术表达式求值 学院:化学与材料科学学院 专业班级:09级材料科学与工程系PB0920603 姓名:李维谷 学号:PB09206285 邮箱:liwg@https://www.360docs.net/doc/9c13624987.html, 指导教师:贾伯琪 实验时间:2010年10月10日 一、需要分析 问题描述:

表达式计算是实现程序设计语言的基本问题之一,它的实现是栈的应用的一个典型例子。设计一个程序,演示通过将数学表达式字符串转化为后缀表达式,并通过后缀表达式结合栈的应用实现对算术表达式进行四则混合运算。 问题分析: 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 设置运算符栈(字符型)和运算数栈(浮点型)辅助分析算符优先关系。在读入表达式的字符序列的同时完成运算符和运算数的识别处理,然后进行运算数的数值转换在进行四则运算。 在运算之后输出正确运算结果,输入表达式后演示在求值中运算数栈内的栈顶数据变化过程,最后得到运算结果。 算法规定: 输入形式:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为使实验更完善,允许操作数为实数,操作符为(、)、.(表示小数点)、+、-、*、/、^(表示乘方),用#表示结束。 输出形式:演示表达式运算的中间结果和整个表达式的最终结果,以浮点型输出。 程序功能:对实数内的加减乘除乘方运算能正确的运算出结果,并能正确对错误输入和无定义的运算报错,能连续测试多组数据。 测试数据:正确输入:12*(3.6/3+4^2-1)# 输出结果:194.4

数字电路设计--------二十四进制计数器

数字电路设计 姓名:*** 学号:****************** 班级:电信111 专业:电子信息科学与技术 一.设计题目 二十四进制计数器的设计 二.设计要求 (1)要求学生掌握74系列的芯片和LED的原理和使用方法。 (2)熟悉集成电路的使用方法,能够运用所学的知识设计一规定的电路。三.设计任务 (1)完成一个二十四进制的计数器。 (2)LED显示从00开始,各位计数从0—9,逢10 进1,是为计数0—5。23显示后,又从00重新开始计数。 四.设计思路与原理 (一)设计思路框图 →→→ → (二)LED简介 LED是一种显示字段的显示器件,7个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。七段发光管分别称为a、b、c、d、e、f,g,构成字型“8”,如图(a)

所示,当在某段发光二极管上施加一定的电压时,某些段被点亮发光。不加电压则变暗,为了保护各段LED不被损坏,需外加限流电阻。 其真值表如下:

(三)原件总汇表:计数器74LS00D(U7A,U7B),74HC390N-6V(U3A,U6A),74LS47N(U1,U5);与门:时钟脉冲:显示器:发光二极管:电感:电容:电源 五.电路图仿真 二十四进制计数器电路仿真

六.心得体会 通过这一次的数字电路设计,是我更深的了解到了数字电路的基础知识,电路分析与计算的方法。利用仿真软件对电路进行一系列的分析仿真,更加抽象的将理论知识与实际电路结合在一起,加深了对数电一些基本定理的理解与运用。虽然在这学期中,数字电子技术基础学的不是很好,但是在这次的课程设计中通过同学的帮组还是完成了。虽然做的不是很好,但是从中也让我明白了:要想做好这个课程设计,就必须认认真真地去做,不要怕麻烦,遇到不懂的问题就要主动去问同学或者老师。和查阅材料,保持着一个积极向上的心态,发挥我们自己的主观能动性和创造了才能让我们做的更好。在这次课程设计中让我学到了很多东西,在经过我们一个学期的数字电子技术基础课后,我们已经对数字电子技术有一定的了解,让我们有了一定的基础可以独立完成数字电子技术基础课程设计了,不过当中还是遇到许多不懂的问题。

算术表达式求值演示程序

数理学院 课程设计报告书 课程名称数据结构课程设计 设计题目算术表达式求值演示 专业班级 学号 姓名 指导教师

2014 年12 月

4.2.2 基本操作: InitStack(&S) 操作结果:构造一个空栈S。 GetTop(S) 初始条件:栈S 已存在。 操作结 果: 用P 返回S的栈顶元素。Push(&S 初始条 件:,ch) 栈S 已存在。 操作结 果:插入元素ch 为新的栈顶元素。 Pop(&S) 初始条件:栈S 已存在。 操作结 果:删除S 的栈顶元素。 In(ch) 操作结果:判断字符是否是运算符,运算符即返回1 Precede(c1, c2) 初始条件:c1,c2 为运算符。操作结果:判断运算符优先权,返回优先权高的。Operate(a,op,b) 初始条件:a,b 为整数,op为运算符。操作结果: a 与 b 进行运算,op 为运算符,返回其值。num(n) 操作结果:返回操作数的长度。EvalExpr() 初始条件:输入表达式合法。操作结果:返回表达式的最终结果。}ADT Stack 主程序的流程:

EvaluateExpression() 函数实现了对表达式求值的功能,main() 函数直接调用EvaluateExpression() 对输入的表达式求值输出。 4.2.3 函数的调用关系图

4.3 详细设计 4.3.1 ① . Precede(char c1,char c2)判断运算符优先权,返回优先权高的 算符间的优先关系 如下: 算法伪代码如下: char Precede(char c1,char c2) { static char array[49]={ >', '>', '<', '<', '<', '>', '>', >', '>', '<', '<', '<', '>', '>', >', '>', '>', '>', '<', '>', '>', >', '>', '>', '>', '<', '>', '>', <', '<', '<', '<', '<', '=', '!', >', '>', '>', '>', '!', '>', '>', <', '<', '<', '<', '<', '!', '='}; // 用一维数组存储 49 种情况 switch(c1) { /* i 为下面 array 的横标 */ case '+' : i=0;break; case '-' : i=1;break; case '*' : i=2;break;

计算机应用基础说课稿(张旭红)

各位专家好,我是宁夏民族职业技术学院教育系的张旭红,《计算机应用基础》课程负责人,计算机应用基础是非计算机应用专业的公共基础课程。如何将工作岗位应用与课程学习有机融合起来,是这门课程一直探索、追寻的。今天,我所要汇报的题目是融工作、学习为一体的计算机应用基础课程设置思路与实施,将从六个方面来阐述:一、课程定位; 二、课程设计;三、实施条件;四、教学效果;五、课程特色;六、建设思路。 一、课程定位 我将从课程地位与课程目标来阐述课程的定位。

(一)、课程地位课程性质 是公共必修课,学时是128学 时,课程对象是非计算机专业的 学生,在一年级的第一学期和第 二学期开设。计算机应用基础课 程是我院学生入学后学习的首 门计算机类公共课程,它可以没 有前导课,但是如有中学信息技 术课程的基础,学习效果会更 佳。后续课程是服务于不同专业 学习或应用于不同专业或职业 6 10 的计算机技术应用型课程。如平 面设计、会计应用、机械CAD 制作、课件制作等课程。计算机 应用基础这门课程在高校有着 极其重要的地位,它是目前高校 开设最为普遍、受益面最广的一 门计算机基础课程,是非计算机 专业必修的一门公共基础课程, 是对非计算机专业的学生的起 始教育的一门课程,该课程内容 丰富、覆盖面广、适应性强及计

为了实现教学目标,我们对课程内容又进行了深化和提炼,这门课程的选择依据是:公司、企业和事业单位对计算机应用的基本要求以及计算机处理核心能力。具体表现为三大模块、七个项目、十九个典型工作任务。三大模块是:计算机基础知识、办公自动化软件应用基础、计算机网络与多媒体技术应用。对应的七个项目是:1、计算机基础知识;2、操作系统及应用;3、文字处理与编辑;4、数据处理与分析; 5、演示文稿与展示; 6、计算机网络及应用; 7、多媒体技术及应用。为了体现这门课程的教学目标,设置了十九个典型工作任务。分别是:1、认识计算机;2、购买计算机;3、

数字电路实验 计数器的设计

数字电路与逻辑设计实验报告实验七计数器的设计 姓名:黄文轩 学号:17310031 班级:光电一班

一、实验目的 熟悉J-K触发器的逻辑功能,掌握J-K触发器构成异步计数器和同步计数器。 二、实验器件 1.数字电路实验箱、数字万用表、示波器。 2.虚拟器件: 74LS73,74LS00, 74LS08, 74LS20 三、实验预习 1. 复习时序逻辑电路设计方法 ①根据设计要求获得真值表 ②画出卡诺图或使用其他方式确定状态转换的规律 ③求出各触发器的驱动方程 ④根据已有方程画出电路图。 2. 按实验内容设计逻辑电路画出逻辑图 Ⅰ、16进制异步计数器的设计 异步计数器的设计思路是将上一级触发器的Q输出作为下一级触发器的时钟信号,置所有触发器的J-K为1,这样每次到达时钟下降沿都发生一次计数,每次前一级 触发器从1变化到0都使得后一级触发器反转,即引发进位操作。 画出由J-K触发器组成的异步计数器电路如下图所示:

使用Multisim仿真验证电路正确性,仿真图中波形从上到下依次是从低位到高位 触发器的输出,以及时钟信号。: 可以看出电路正常执行16进制计数器的功能。 Ⅱ、16进制同步计数器的设计 较异步计数器而言,同步计数器要求电路的每一位信号的变化都发生在相同的时间点。

因此同步计数器各触发器的时钟脉冲必须是同一个时钟信号,这样进位信息就要放置在J-K 输入端,我们可以把J-K端口接在一起,当时钟下降沿到来时,如果满足进位条件(前几位触发器输出都为1)则使JK为1,发生反转实现进位。 画出由J-K触发器和门电路组成的同步计数器电路如下图所示 使用Multisim仿真验证电路正确性,仿真图中波形从上到下依次是从低位到高位触发器的输出,计数器进位输出,以及时钟信号。:

数据结构算术表达式求值实验报告

软件技术基础实验报告 实验名称:表达式计算器 系别:通信工程 年级: 班级: 学生学号: 学生姓名: 《数据结构》课程设计报告 题目简易计算表达式的演示 【题目要求】 要求:实现基本表达式计算的功能 输入:数学表达式,表达式由整数和“+”、“-”、“×”、“/”、“(”、“)”组成输出:表达式的值 基本操作:键入表达式,开始计算,计算过程和结果记录在文档中 难点:括号的处理、乘除的优先级高于加减

1.前言 在计算机中,算术表达式由常量、变量、运算符和括号组成。由于不同的运算符具有不同的优先级,又要考虑括号,因此,算术表达式的求值不可能严格地从左到右进行。因而在程序设计时,借助栈实现。 算法输入:一个算术表达式,由常量、变量、运算符和括号组成(以字符串形式输入)。为简化,规定操作数只能为正整数,操作符为+、-*、/、=,用#表示结束。 算法输出:表达式运算结果。 算法要点:设置运算符栈和运算数栈辅助分析算符优先关系。在读入表达式的字符序列的同时,完成运算符和运算数的识别处理,以及相应运算。 2.概要设计 2.1 数据结构设计 任何一个表达式都是由操作符,运算符和界限符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top 指示栈顶元素在顺序栈中的位置,base 为栈底指针,在顺序栈中,它始终指向栈底,即top=base 可作为栈空的标记,每当插入新的栈顶元素时,指针top 增1,删除栈顶元素时,指针top 减1。 2.2 算法设计 为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR ,用以寄存运算符,另一个称做OPND ,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进OPND 栈,若是运算符则和OPTR 栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR 栈的栈顶元素和当前读入的字符均为”#”)。 2.3 ADT 描述 ADT Stack{ 数据对象:D={ i a |i a ∈ElemSet,i=1,2,…,n, n ≧0} 数据对象:R1={< 1 ,-i i a a >| 1-i a ,D a i ∈,i=2,…,n}

算术表达式求值课程设计报告

课程设计 教学院 课程名称 题目 专业 班级 姓名 同组人员 指导教师 2013 年 6 月22 日 (完成时间)

目录 一.概述 (2) 二.总体方案设计 (4) 三.详细设计 (6) 四.程序的调试与运行结果说明 (14) 五.课程设计总结 (14) 六.附录 (16) 参考文献 (3233) (“目录”要求必须自动生成)

一概述(宋体,三号,加粗,居中) 1.课程设计的目的(小标题,宋体,四号,加粗,左对齐顶格) (1).理解和掌握该课程中的有关基本概念,程序设计思想和方法。 (2).培养综合运用所学知识独立完成课题的能力。 (3).培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 (4).掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 2.课程设计的要求 算术表达式求值程序实现以下功能: (1)构造一个空栈S,初始条件:栈S已存在 (2)用P返回S的栈顶元素 (3)插入元素ch为新的栈顶元素 (4)删除S的栈顶元素 (5)判断字符是否是运算符,运算符即返回1 (6)判断运算符优先权,返回优先权高的 (7)输入表达式 (8)返回表达式的最终结果。

二总体方案设计 a)需求分析 该程序能实现算术四则运算表达式的求值,显示运算过程。 输入的形式:表达式,例如5*(3+7)#。 包含的运算符只能有'+'、 '-'、'*'、 '/'、 ' (' ') '; 程序所能达到的功能:对表达式求值并输出。 b)总体设计 本程序使用的是编程工具是Visual c++ 6.0,实现了运算器的功能和仿真界面(大体界面如下图所示)。在基本要求的基础上,运算数可以是实数类型,同时增加了乘方运算的功能;可以实现对负数的运算,例如用户输入表达式6* (-0.25),则程序会在负号的前面自动加上一个0。 1)算符包括加(+)、减(-)、乘(*)、除(/)、乘方(^);另一个称作 OPND,用以寄存操作数和运算结果,操作数可以是float型的浮点数。 算法的基本思想是: 2)首先置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素; 依次读入表达式中的每个字符,若是操作数(浮点数)则进OPND栈, 若是运算符(+、—、*、/、^)则和OPTR栈的栈顶运算符比较优先权 后作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当 前读入的字符均为“#”)。 3)编写一个原型为void strtofloat(char str[ ],int n,int i),把一 个数字串转换为一个实型数,并压入运算数栈中。(整个程序的源代码 见附录,并有具体解释)

C语言_算术表达式求值_代码

源代码: //用来存储字符的结点类型 typedef struct CharNode { char c; struct CharNode *next; }CharNode; //用来存储数的结点类型 typedef struct IntNode { long double i; struct IntNode *next; }IntNode; //用来存储数的结点类型 typedef struct Node { long double n; struct Node_ys_char *next; }Node; //用来存储运算符的结点类型 typedef struct Node_ys_char { char c; struct Node_ys_char *next_c; struct Node *next; }Node_ys_char; char Precede(char x,char y)//运算符优先级判断{ int i,j; int from[5][5] ={ {0,0,-1,-1,0}, {0,0,-1,-1,0}, {1,1,0,0,1},

{1,1,0,0,1}, {0,0,-1,-1,0} };//定义一个二维数组存放算术符号的优先级 switch(x) { case '+':i=0;break; case '-':i=1;break; case '*':i=2;break; case '/':i=3;break; case '#':i=4;break; } switch(y) { case '+':j=0;break; case '-':j=1;break; case '*':j=2;break; case '/':j=3;break; case '#':j=4;break; } if(from[i][j]==1)//说明运算符i的优先级比j的优先级高return '>'; if(from[i][j]==-1) return '<'; else return '='; } //输入表达式,并对特殊情况做处理 CharNode *CreatRegister() { CharNode *top,*p,*q,*e; top=(CharNode *)malloc(sizeof(CharNode)); p=q=top; scanf("%c",&p->c); scanf("%c",&p->c);

计数器设计和原理

二.计数器设计 1.实验目的 计数器在数字逻辑设计中的应用十分广泛,可以对时钟信号进行计数,分频和产生序列信号,也可以用在计时器和串并转换等电路。这次实验我们就来学习一下如何用Robei和Verilog语言来设计一个4比特计数器。 2.实验要求 计数器对每个时钟脉冲进行技术,并将计数值输出出来。这个实验我们来设计一个4比特的计数器,其技术范围在0~F之间,也就是计数到最大值16. 设计波形要求如图1所示。 图1. 计数器输出波形要求 3.实验内容 3.1 模型设计 1)新建一个模型。点击工具栏上的图标,或者点击菜单“File”然后在下 拉菜单中选择“New”,会有一个对话框弹出来(如图2所示)。在弹出的对话框中设置你所设计的模型。

图2. 新建一个项目 参数填写完成后点击“OK”按钮,Robei就会生成一个新的模块,名字就是counter,如图3所示: 图3. 计数器界面图 2)修改模型。在自动生成的界面图上进行名称的修改,输入引脚为clock, enable 和reset,输出引脚修改成count。其中count引脚的“Datasize”为4比特,用户可以输入4,也可以输入3:0。为了区分每个引脚,我们可以修改每个引脚的Color值,并点回车保存。修改完成后如图4所示。如果选中模块,按“F1”键,就会自动生成一个Datasheet,如图5所示。

图4. 修改引脚属性 图5. “Datasheet”截图 3)输入算法。点击模型下方的Code(如图6所示)进入代码设计区。

图6. 点击Code输入算法 在代码设计区内输入以下Verilog代码: always @ (posedge clock) //学习always语句的写法,并设置敏感信号。时钟上升沿触发begin //学习Verilog if else语句的写法 if (reset == 1) begin count<= 0; end //if enable is 1, counter starts to count else if (enable == 1) begin count <= count + 1; end end 4)保存。点击工具栏图标,或者点击菜单“File”中的下拉菜单“Saveas”, 将模型另存到一个文件夹中。 5)运行。在工具栏点击或者点击菜单“Build”的下来菜单“Run”,执 行代码检查。如果有错误,会在输出窗口中显示。如果没有错误提示,恭喜,模型counter设计完成。 3.2测试文件设计

数电脉搏计数器电路课程设计

烟台南山学院 数字电子技术课程设计题目脉搏计数电路设计 姓名:___ XXXXXX ___ 所在学院:_工学院电气与电子工程系 所学专业:_ 自动化 班级:___电气工程XXXX 学号:___XXXXXXXXXXXXXX 指导教师:_____ XXXXXXXX ___ 完成时间:____ XXXXXXXXXXXXX

数电课程设计任务书 一、基本情况 学时:40学时学分:1学分适应班级:12电气工程 二、进度安排 本设计共安排1周,合计40学时,具体分配如下: 实习动员及准备工作:2学时 总体方案设计:4学时 查阅资料,讨论设计:24学时 撰写设计报告:8学时 总结:2学时 教师辅导:随时 三、基本要求 1、课程设计的基本要求 数字电子技术课程设计是在学习完数字电子课程之后,按照课程教学要求,对学生进行综合性训练的一个实践教学环节。主要是培养学生综合运用理论知识的能力,分析问题和解决问题的能力,以及根据实际要求进行独立设计的能力。初步掌握数字电子线路的安装、布线、焊接、调试等基本技能;熟练掌握电子电路基本元器件的使用方法,训练、提高读图能力;掌握组装调试方法。其中理论设计包括总体方案选择,具体电路设计,选择元器件及计算参数等,课程设计的最后要写出设计总结报告,把设计容进行全面的总结,若有实践条件,把实践容上升到理论高度。 2、课程设计的教学要求 数字电子技术课程设计的教学采用相对集中的方式进行,以班为单位全班学生集中到设计室进行。做到实训教学课堂化,严格考勤制度,在实训期间累计旷课达到6节以上,或者迟到、早退累计达到8次以上的学生,该课程考核按不及格处理。在实训期间需要外出查找资料,必须在指定的时间方可外出。 课程设计的任务相对分散,每3名学生组成一个小组,完成一个课题的设计。小组成员既有分工、又要协作,同一小组的成员之间可以相互探讨、协商,可以互相借鉴或参考别人

数据结构教学规划表达式求值【完全版】

XXXXXX大学《数据结构》课程设计报告 班级: 学号: 姓名: 指导老师:

目录 一算术表达式求值 一、需求分析 二、程序的主要功能 三、程序运行平台 四、数据结构 五、算法及时间复杂度 六、测试用例 七、程序源代码 二感想体会与总结

算术表达式求值 一、需求分析 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 二、程序的主要功能 (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 三、程序运行平台 Visual C++ 6.0版本 四、数据结构 本程序的数据结构为栈。 (1)运算符栈部分: struct SqStack //定义栈

{ char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈的长度 }; int InitStack (SqStack &s) //建立一个空栈S { if (!(s.base = (char *)malloc(50 * sizeof(char)))) exit(0); s.top=s.base; s.stacksize=50; return OK; } char GetTop(SqStack s,char &e) //运算符取栈顶元素 { if (s.top==s.base) //栈为空的时候返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK return OK; } int Push(SqStack &s,char e) //运算符入栈 { if (s.top-s.base >= s.stacksize) { printf("运算符栈满!\n");

算术表达式求值系统

数据结构课程设计报告 课设题目:算式表达式求值系统 班级: 软件1202 姓名: 学号: 指导教师: 李斌 成绩: 2013 年1月

目录 一、需求分析 (2) 二、概要设计 (2) (一)设计思想 (2) (二)实现方法 (2) (三)模块整体设计图 (3) (四)函数功能介绍 (3) 三、详细设计 (4) (一)数据结构设计 (4) (二)模块接口设计 (4) (三)盒图 (5) 四、调试分析 (7) 五、用户手册 (7) 六、测试结果 (8) 七、附录 (9) 附录一设计体会 (9) 附录二源程序 (9)

一、需求分析 算式表达式求值是程序设计语言编译中一个最基本的问题。本次任务要求完成一个四则算式表达式求值系统。具体需求为:当用户输入一个四则算式(包括加、减、乘、除和括号),如(12+3)*2+9*4,输出其计算结果。具体要求如下:(一)要实现栈的基本操作算法,包括初始化栈、进栈、出栈等。 (二) 在本程序中,表达式中的元素限定为char型,表达式长度不超过100,表达式以“#”号为结束标志。 (三)要求程序输出表达式的计算结果。 二、概要设计 (一)设计思想 本次四则算式表达式求值的程序采用的是中缀表达式的求值的方法。所谓中缀表达式,就是指每个二目运算符在两个运算量的中间,假设所讨论的算术运算符包括:+ 、- 、*、/、%、^(乘方)和括号()。而本次程序的编写只涉及四则运算(+、-、*、/)和括号()。 设运算规则为: .运算符的优先级为:()> *、/> +、- ; .有括号出现时先算括号内的,后算括号外的,多层括号,由内向外进行; 表达式作为一个满足表达式语法规则的串存储,如表达式“3*2^(4+2*2-1*3)-5”,它的的求值过程为:自左向右扫描表达式,当扫描到3*2时不能马上计算,因为后面可能还有更高的运算,正确的处理过程是:需要两个栈:对象栈s1和算符栈s2。当自左至右扫描表达式的每一个字符时,若当前字符是运算对象,入对象栈,是运算符时,若这个运算符比栈顶运算符高则入栈,继续向后处理,若这个运算符比栈顶运算符低则从对象栈出栈两个运算量,从算符栈出栈一个运算符进行运算,并将其运算结果入对象栈,继续处理当前字符,直到遇到结束符“#”。 根据运算规则,左括号“(”在栈外时它的级别最高,而进栈后它的级别则最低了; 乘方运算的结合性是自右向左,所以,它的栈外级别高于栈内; 就是说有的运算符栈内栈外的级别是不同的。当遇到右括号“)”时,一直需要对运算符栈出栈,并且做相应的运算,直到遇到栈顶为左括号“(”时,将其出栈,因此右括号“)”级别最低但它是不入栈的。对象栈初始化为空。根据以上分析,每个运算符栈内、栈外的级别如下: 算符栈内级别栈外级别 ^ 3 4 *、/、% 2 2 +、- 1 1 ( 0 4 ) -1 -1 (二)实现方法

计算机网络说课稿

计算机网络说课稿 一、教材分析 《计算机网络》选自《计算机应用基础》,这一节的主要内容是给学生介绍计算机网络的定义、特点、发展历史、几种分类方法;简要介绍计算机网络的拓扑结构;此外,还介绍了计算机简单局域网的组建方法。随着计算机网络在生活中的日益普及,本节内容满足了学生对计算机网络知识的了解,并学会如何组建简单的局域网,在日常生活中有很好的实用性。 二、学情分析 学生们在日常生活中,虽然对网络知识有很大的好奇心,但也仅仅把它作为上网玩游戏、聊天的工具。随着学生进入职业学校对计算机专业知识的加深学习,激发了他们对网络的学习兴趣,这也对本节内容的教授起到了很好的兴趣基础。 三、教学目标 1.知识目标 理解计算机网络的定义,特点,发展历史,基本分类方法。 了解计算机网络的基本拓扑结构。 掌握如何组建简单的计算机局域网 2.能力目标 能够在提供设备、工具的前提下自主建立简单局域网。 3.情感目标 (1)培养学生的知识、思想、精神的融合; (2)增进学习兴趣,培养学生动手能力; (3)培养学生传承中华民族的传统美德。 四、教学重点和难点 1.重点 计算机网络的定义,特点,发展历史,基本分类方法。如何组建简单的计算机局域网。 2.难点 如何组建简单的计算机局域网。 3.重点的突破 采用任务驱动法法来突破本节课的重点。但一开始并没有直接把这个重点作为一个任务展示给学生,而是先让学生结合自己对网络的了解来引出重点知识的学习。此知识点以教师讲授,学生交流为主。 4.难点的突破 有了对计算机网络定义,特点,历史,分类的学习,引出如何组建简单局域网,而在此之前还有一个知识需要了解,那就是日常生活中网络的几种拓扑结构,了解此知识后,采用演示法来突破本课的难点。组建工具,设备内容讲完后,教师通过实际演示方法引导学生学习水晶头、局域网的组建操作,继而让学生最终突破本课的难点。 五、教学方法和教学手段 本课采用“任务驱动----教师讲授----教师演示---任务完成----效果评价----归纳汇总”的五步教学模式。 六、学法指导 在活动中,学生通过自主学习,探究学习,协作学习等方式掌握基础知识和操作技能。教学中应该培养学生观察和动手的能力;培养学生大胆尝试,发现问题、解决问题的能力;培养学生知识迁移的能力。 七、教学过程

产品计数器的电路设计

河南城建学院 《安全检测技术》课程设计任务书 产品计数器的电路设计 班级0232111 姓名 学号023211128 专业安全监测技术 指导教师黄战峰、马斌 环境与市政工程系 2012年6月14日

摘要 计数器对某物件进行自动计数,在实际生产生活中具有广泛的应用,对通过的物体进行计数,实现统计数据的搜集,如在生产流水线包装数量控制等领域的应用,能节省劳动力有能高效地完成任务。光电计数器采用光电传感器构成的广电门实现对通过光电门的物体进行计数,是一种非接触式计数,在部分场合有着其无比的优越性,从而使其广泛应用于工业生产、实时监测、自动化控制等领域。 本设计为实现光电计数器的功能,采用模数结合的电路,以红外对射光电传感器为传感器件。电路主要分为信号采集电路、两位十进制计数电路、数码显示电路、报警电路四个模块,分别实现对通过光电门的物体感应,计数,显示,并按要求完成报警功能。计数范围为一百,可以预设计数数目,当计数达到设定后,停止计数并报警,可手动清除报警;还可以计数达一百时,闪灯报警两秒。 关键词:计数器光电传感器数码显示报警

目录摘要0 前言3 第一章设计内容及要求3 第二章设计方案4 第三章系统组成5 3.1 系统框图5 3.2 单元电路设计5 3.2.1 信号采集电路设计6 3.2.2 计数电路10 3.2.3 数码显示电路13 3.2.4 定数报警电路14 3.2.5 满百报警电路18 附录一总原理图19 附录二元件清单20 总结21 参考文献22

前言 工业生产中常常需要自动统计产品的数量,计数器在这里有其用武之地。而数字式电子计数器有直观和计数精确的优点,目前已在各种行业中普遍使用。数字式电子计数器有多种计数触发方式,它是由实际使用条件和环境决定的,通常分为接触式计数器和非接触式计数器两种。本设计的光电计数器为非接触式计数器中的一种。 光电计数器采用光电传感器利用光学原理实现对物件的数目统计。光电式传感器是将光信号转化为电信号的一种传感器。它的理论基础是光电效应。这类效应大致可分为三类。第一类是外光电效应,即在光照射下,能使电子逸出物体表面。利用这种效应所做成的器件有真空光电管、光电倍增管等。第二类是内光电效应,即在光线照射下,能使物质的电阻率改变。这类器件包括各类半导体光敏电阻。第三类是光生伏特效应,即在光线作用下,物体内产生电动势的现象,此电动势称为光生电动势。这类器件包括光电池、光电晶体管等。光电效应都是利用光电元件受光照后,电特性发生变化。敏感的光波长是在可见光附近,包括红外波长和紫外波长。市场上的光电计数器采用的光电传感器有摄像头、光电管等,采用的光的种类有普通光和激光,可见光和不可见光等。本文采用的传感器为红外光电传感器。 第一章设计内容及要求 利用发光二极管和光敏三极管作为光电计数器的传感器进行计数,用数码管显示计数值,当数码管显示值与设定值相同时报警,此外计数器停止计

《大数据结构》算术表达式求值

实用标准文档 二课程设计2——算术表达式求值 一、需求分析 二、程序的主要功能 三、程序运行平台 四、数据结构 五、算法及时间复杂度 六、测试用例 七、程序源代码 三感想体会与总结 算术表达式求值 一、需求分析 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正整数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。 二、程序的主要功能 (1)从键盘读入一个合法的算术表达式,输出正确的结果。 (2)显示输入序列和栈的变化过程。 三、程序运行平台

Visual C++ 6.0版本 四、数据结构 本程序的数据结构为栈。 (1)运算符栈部分: struct SqStack //定义栈 { char *base; //栈底指针 char *top; //栈顶指针 int stacksize; //栈的长度 }; int InitStack (SqStack &s) //建立一个空栈S { if (!(s.base = (char *)malloc(50 * sizeof(char)))) exit(0); s.top=s.base; s.stacksize=50; return OK; } char GetTop(SqStack s,char &e) //运算符取栈顶元素 { if (s.top==s.base) //栈为空的时候返回ERROR { printf("运算符栈为空!\n"); return ERROR; } else e=*(s.top-1); //栈不为空的时候用e做返回值,返回S的栈顶元素,并返回OK return OK; }

计算机应用基础说课稿

各位评委老师: 你们好!我是XXX学院的任课教师XXX,我今天说课的题目是《数据处理》,它是《计算机应用基础》第五章《Excel 2003电子表格》中的一节。我将从说教材、说教法学法、说教学过程几个方面来阐述这堂课,不当之处敬请批评指正! Excel 2003电子表格中《数据处理》说课稿 一、教材分析 (一)教材的地位与作用 1、本教材是中国铁道出版社出版的《计算机应用基础》,其内容难易适中,是高等学校计算机公共基础课规划教材; 2、Excel 2003是计算机应用基础教程中的一个重要组件,是一种以“表格”形式管理和分析数据的软件; 3、本节内容主要讲解怎样对数据排序、筛选、合并、分类汇总以及建立数据透视表,这个知识点在现代办公中应用广泛,也是Excel 2003数据应用中的一个重点也是难点。因此,无论是从教材编排来看,还是从实际需要来看,本节的内容都非常重要。 (二)教学对象分析 相当多的大一学生,通过半个学期的计算机学习,已经掌握了windows的基本操作,熟悉了word和Excel 2003的一些基本概念,这给我们逐步深入的学习本节内容打下了一个良好的知识基础。心

理上,学生对上机操作尤其感兴趣。我认为应抓住这些有利因素,以讲解—演示—实践为主线,并配以任务驱动法,引导学生身心投入课堂,激发学生学习兴趣,培养学生自主学习能力。 (三)教学目标:根据本节课教学内容以及学生的特点,结合学生现有知识水平和理解能力确定教学目标如下: 1、知识目标 让学生明确在电子表格中数据处理的重要性,通过对这一节课的教学,让学生掌握:(1)数据的排序和筛选。(2)数据合并计算和分类汇总。(3)建立数据透视表。 2、能力目标 通过培养学生的分析能力、抽象思维能力和动手能力,能对实际问题进行处理。 3、情感目标 通过教学,充分发挥学生学习的主观能动性,激发学生学习热情,增强学生的求知欲和对本课程的热爱,增加学生的团队意识。(四)教学重点,难点 通过对教材的分析,针对学生的实际。确定本节的教学重点是数据的排序、筛选和分类汇总,难点是建立数据透视表、理解数据透视表的作用。 二、教法和学法 教法:本节课以“讲解—演示—实践”为主线,通过“讲解—实验—观察—分组讨论—总结归纳—实践”的程序,过渡到知识应用和练

表达式求值程序设计说明书

汇编语言实训课程设计任务书 题目:表达式求值程序班级:计算机科学与技术一班 学生姓名:赵旭尧学号: 14730141 题目类型:软件工程(R)指导教师:刘树群 一.题目简介 该设计要求学生使用汇编语言,设计并开发出针对四则运算表达式进行求 值的命令行或窗口程序。 通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对汇 编语言基本语言要素和流程结构的理解,针对汇编语言中的重点和难点内容进 行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。 得到软件工程的综合训练,提高解决实际问题的能力。 二.设计任务 1、查阅文献资料,一般在5篇以上; 2、通过键盘输入表达式,进行针对整数的“加减乘除”四则运算表达式 进行求值,有良好的界面; 3、完成软件结构设计和算法设计; 4、完成系统的软件开发和测试工作; 5、撰写设计说明书; 6、做好答辩工作。 三.主要内容、功能及技术指标 1、实现功能及指标:①使用Win32的窗口程序模式,实现表达式求值程序 及测试界面程序的设计与开发;②支持整数的四则运算、位运算和小括号等; ③使用文本框对表达式进行交互式编辑和输出。 2、问题分析及解决方案框架确定:充分地分析和理解问题本身,弄清要求 做什么。在确定解决方案框架过程中,综合考虑系统功能,考虑怎样使系统结 构清晰、合理、简单和易于调试。最后确定每个过程和函数的简单功能,以及 过程(或函数)之间的调用关系,并画出函数之间的调用关系图。 3、详细设计和编码:定义相应的存储结构,确定各个函数的算法,并画出 流程图,在此基础上进行代码设计,每个明确的功能模块程序一般不超过200 行,否则要进一步划分。

c语言实现一.二叉树操作 二.用栈实现算术表达式求值 课设报告

目录 题目一.二叉树操作(1)二.算术表达式求 (1) 一、课程设计的目的 (1) 二、课程设计的内容和要求 (1) 三、题目一设计过程 (2) 四、题目二设计过程 (6) 五、设计总结 (17) 六、参考文献 (18)

题目一.二叉树操作(1)二.算术表达式求 一、课程设计的目的 本学期我们对《数据结构》这门课程进行了学习。这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。这次课程设计不但要求学生掌握《数据结构》中的各方面知识,还要求学生具备一定的C语言基础和编程能力。 (1)题目一的目的: 1、掌握二叉树的概念和性质 2、掌握二叉树的存储结构 3、掌握二叉树的基本操作 (2)题目二的目的: 1、掌握栈的顺序存储结构和链式存储结构 2、掌握栈的先进后出的特点 3、掌握栈的基本运算 二、课程设计的内容和要求 (1)题目一的内容和要求: 1、编写已知二叉树的先序、中序序列,恢复此二叉树的程序 2、编写求二叉树深度的程序 (2)题目二的内容和要求: 1、算术表达式由操作数、运算符和界限符组成。操作数是正整数,运算符为 加减乘除,界限符有左右括号和表达式起始 2、将一个表达式的中缀形式转化为相应的后缀形式 3、依据后缀表达式计算表达式的值

三、题目一设计过程 1、题目分析 现已知一棵二叉树的先序遍历序列和中序遍历序列,依次从先序遍历序列中取结点,由先序序列确定根结点(就是第一个字母),每次取出一个结点就与中序遍历的序列进行比较,当相等的时候,中序遍历序列就被分成以该结点为根的二叉树子树,该结点左部分为左子树,右部分为右子树,直到取完先序列里的所有结点,则二叉树构造完毕(树用链式存储结构存储),用递归实现! 由建好的二叉树,先判断这棵树是否为空,若不为空则找数的左子树,统计它的高度,然后找树的右子树,统计它的高度,比较左子树和右子树的高度,然后返回其中大的那个值加一,则求出数的高度。这里用递归实现! 2、算法描述 main ( )(主函数) 先构造一颗二叉树,初始化为空,用来存储所构造的二叉树,并输入一棵树的先序序列和中序序列,并统计这个序列的长度。然后调用实现功能的函数。 void CreateBiTree(BiTree *T,char *pre,char *in,int len)(由先序序列和中序序列构造二叉树) 根据前序遍历的特点, 知前序序列(pre)的首个元素(pre[0])为根(root), 然后在中序序列(in)中查找此根(pre[0]), 根据中序遍历特点, 知在查找到的根(root) 前边的序列为左子树, 后边的序列为右子树。设根前边有n个元素,则又有, 在前序序列中,紧跟着根(root)的n个元素序列(即pre[1...n]) 为左子树, 在后边的为右子树,而构造左子树问题其实跟构造整个二叉树问题一样,只是此时前序序列为pre[1...n]), 中序序列为in[0...n-1], 分别为原序列的子串, 构造右子树同样。这里用递归实现! int Depth(BiTree T)(求树的深度) 当所给的参数T是NULL时,返回0。说明这个树只有一个叶子节点深度为0,当所给的参数不是NULL时,函数调用自己看看这个参数的左分支是不是NULL,

相关文档
最新文档