




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构课程设计报告栈的应丿:表达式求值的设计徐燕萍学生姓名指导教师 完成日期目录1设计内容2 设计分析2.1系统需求分析2.1.1系统目标2.1.2主体功能2.2系统概要设计2.2.1系统的功能模块划分 2.2.2系统流程图3 设计实践基本分析 中缀表达式求值 后缀表达式求值 中缀表达式转换成后缀表达式3.13.23.33.44 测试方法4.1 基本测试 4.2 拓展测试 4.3 容错测试 5 程序运行效果 6 设计心得 7 附录:源代码 .1.1.1.11.12.3.4.5.6.7.7.8.7.8.10栈的应用:表达式求值的设计1 设计内容设计一个表达式求值的程序。 该程序必须可以接受包含
2、 (,),+,- * , /, %和八(求幕运算符,a八b=ab)的中缀表达式,并求出结果。如 果表达式正确,则输出表达式的结果;如果表达式非法,则输出错误信 息。2 设计分析2.1 系统需求分析2.1.1 系统目标 利用栈设计一个程序,该程序能够用于表达式求值,程序将读入的 中缀表达式转换为后缀表达式,然后读取后缀表达式,输出结果。输入要求:程序从“ input.txt ”文件中读取信息,在这个文件中 如果有多个中缀表达式,则每个表达式独占一行,程序的读取操作在文 件的结尾处停止。输出要求:对于每一个表达式,将其结果放在“ output.txt ”文件 的每一行中。这些结果可能是值(精确到小
3、数点后两位) ,也可能是错 误信息“ ERROR IN INFIX NOTATIO”N。2.1.2 主体功能 能够处理以字符序列的形式输入的不含变量的实数表达式,正确处 理负数与小数, 判断表达式是否语法正确 (包含分母不能为零的情况) , 正确实现对算术四则混合运算表达式的求值, 能够将计算中遇到的问题 和结果以文件的形式予以存储。2.2 系统概要设计2.2.1 系统的功能模块划分1. 判断操作数的函数 isnum()判断当前所指字符是否属于数字, 是就返回1',不是就返回 0'。2. 求运算符优先级函数 priority()为了方便判断运算符优先级, 先利用 switch
4、函数将不同的运算符返 回不同的整型数字,在根据数字的大小判断优先级。 +',- '优先级 相同,返回数字相同 ,*',/ '也是。3. 表达式求值函数 infix_value() 此函数是直接按照设计思路完成问题要求的函数,其中要调用到判 断操作符的函数 isnum() 和求运算符优先级的函数 priority() 。循环结 束弹出栈 2 的数值,并返回。4. 主函数 main() 定义一个数组存储表达式整个字符串,将返回的数值直接赋值到浮 点型的 result ,输出 result 。5. 两个栈的函数设计:栈的初始化函数 charInit_SeqStack(
5、)Init_SeqStack()栈判空 Empty_SeqStack()char Empty_SeqStack()入栈函数 Push_SeqStack()charPush_SeqStack()出栈函数 Pop_SeqStack()charPop_SeqStack()取栈顶函数 GetTop_SeqStack()charGetTop_SeqStack()销毁栈 Destory_SeqStack()charDestory_SeqStack()2.2.2 系统流程图存放操作字符开始优先级比较算法建立栈zOp erate 算法计算1r存放数据Ui否合法yf输出错误提输出表达是值示表达式是结束图1系统流
6、程图3.1基本分析算术表达式的计算往往是通过使用栈来实现的。 所以,可以使用栈来存储输入在计算机中,本表达式求值程序的最主要的数据结构就是栈。 表达式的操作符和操作数。输入的表达式是由操作数和运算符以及改变运算次序的圆括号连 接而成的式子。表达式求值是高级语言编译中的一个基本问题,是栈的典型应用实例。任何一个表达式都是由操作数(op era nd)、运算符(op erator)和界 限符(delimiter) 组成的。操作数既可以是常数,也可以是被说明为变 量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运 算符三类;基本界限符有左右括号和表达式结束符等。3.2中缀表达式求值#。要
7、对一即:中缀表达式:每个二目运算符在两个运算量的中间,假设操作数是 整型常数,运算符只含加、减、乘、除等四种运算符,界限符有左右括 号和表达式起始、结束符“#”, 口: #(7+15)*(23-28/4)个简单的算术表达式求值,首先要了解算术四则运算的规则,(1)从左到右;先乘除,后加减; 先括号内,后括号外。OPS根据1运算符和界限符可统称为算符,它们构成的集合命名为 上述三条运算规则,在运算过程中,任意两个前后相继出现的算符0 和0 2之间的优先关系必为下面三种关系之一: 0 1<0 2,0 1的优先权低于0 2。0 1=0 2,0 1的优先权等于0 2 0 1>0 2,0 1
8、的优先权高于0 2实现算符优先算法时需要使用两个工作栈:一个称作operator ,用 以存放运算符;另一个称作operand,用以存放操作数或运算的中间结 果。算法的基本过程如下:首先初始化操作数栈operand和运算符栈operator ,并将表达式起 始符“#”压入运算符栈;依次读入表达式中的每个字符,若是操作数则直接进入操作数栈 operand,若是运算符,则与运算符栈operator的栈顶运算符进行优先 权比较,并做如下处理:(1) 若栈顶运算符的优先级低于刚读入的运算符,则让刚读入的运算符进operator栈;(2) 若栈顶运算符的优先级高于刚读入的运算符,则将栈顶运算符a、退栈,
9、送入0,同时将操作数栈operand退栈两次,得到两个操作数b,对a、b进行0运算后,将运算结果作为中间结果推入operand栈;说明 栈的 与表(3) 若栈顶运算符的优先级与刚读入的运算符的优先级相同,左右括号相遇,只需将栈顶运算符(左括号)退栈即可。op erator栈顶元素和当前读入的字符均为“ #”时,说明表达式起始符“ #” 达式结束符“ #”相遇,整个表达式求解结束。int Exp Evaluati on()*/ /*读入一个简单算术表达式并计算其值。In itStack (&operan d);In itStack(&op erator);PushStack(&a
10、mp;operator,'#'););printf( nn Please input an expression (Ending with #)ch=getchar();/*读入表达式中的一个字符*/while(ch!二 #' |GetTop(operator)!二#') if(!In(ch, OPS)/* 判断 ch 是否运算符 */ a=GetNumber(&ch); /*用ch逐个读入操作数的各位数码,并转化为十进制数a */Pu shStack (&operan d,a);elseswitch(Co mp are(GetT op(op e
11、rator),ch)case' < :Pu shStack(&op erator,ch);ch=getchar();break;case 二:Po p6tack(&op erator, &x);ch=getchar();break;case > :Pop Stack (&op erator,&op);Pop Stack(&op era nd, & b);Pop Stack (&op era nd, & a); v=Execute(a, op ,b);P ushStack (&operan d,v
12、);break;v=GetT op(operan d);return(v);为了处理方便,编译程序常把中缀表达式首先转换成等价的后缀表 达式,后缀表达式的运算符在运算对象之后。在后缀表达式中,不再引 入括号,所有的计算按运算符出现的顺序,严格从左向右进行,而不用 再考虑运算规则和级别。中缀表达式“(a+b*c)-d/e ”的后缀表达式 为:“ abc*+de/ - ”。3.3后缀表达式求值计算一个后缀表达式,算法上比计算一个中缀表达式简单的多。这 是因为表达式中即无括号又无优先级的约束。具体做法:只使用一个对 象栈,当从左向右扫描表达式时,每遇到一个操作数就送入栈中保存, 每遇到一个运算符就从
13、栈中取出两个操作数进行当前的计算,然后把结果再入栈,直到整个表达式结束,这时送入栈顶的值就是结果。下面是后缀表达式求值的算法,在下面的算法中假设,每个表达式是合乎语法的,并且假设后缀表达式已被存入一个足够大的字符数组A中,且以 #'为结束字符,为了简化问题,限定运算数的位数仅为一位且忽略了数字字符串与相对应的数据之间的转换问题。double calcul_exp(char *A) /* 本函数返回由后缀表达式 A 表示的表 达式运算结果 */ SeqStarck s;ch=*A+ ; InitStack(s);while(ch!= '#' ) if(ch!= 运算符 )
14、 PushStack(s, ch);else取出两个运算量 */: c=a+b; break ; : c=a-b; break ; : c=a*b; break ; PopStack(s, &a); PopStack(s, &b); /* switch(ch) case ch= ' + case ch= 'case ch= '*case ch= '/ ': c=a/b; break ; case ch= '%': c=a%b; break ;PushStack (s, c) ;ch=*A+ ;PopStack(s, res
15、ult) ;return result ;3.4 中缀表达式转换成后缀表达式 将中缀表达式转化为后缀表达式和前述对中缀表达式求值的方法 完全类似,但只需要运算符栈,遇到运算对象时直接放后缀表达式的存 储区,假设中缀表达式本身合法且在字符数组 A 中,转换后的后缀表达 式存储在字符数组 B 中。具体做法:遇到运算对象顺序向存储后缀表达 式的B数组中存放,遇到运算符时类似于中缀表达式求值时对运算符的 处理过程,但运算符出栈后不是进行相应的运算,而是将其送入B中存放。读者不难写出算法,在此不在赘述。程序的整体算法分两步:第一步,从 ”input.txt ”文件中读取中缀表达式,并应用运算符栈OpHo
16、lder把中缀表达式转换为后缀表达式,将输出结果存放在一个temp 文件中。第二步,从temp文件中读取中缀表达式,并应用操作栈 Operands计算后缀表达式结果,将结果输出到”out pu t.txt ”文件中。4测试方法设计针对程序的input.txt文件,并将运行结果与期望测试进行比较。5程序运行效果 5.1基本测试:2:则输出结果如下图3:在input文件中输入表达式如下图r Output, tit -记审本文件®編辑(I)格式辺查看电) 帮助匹|3.001*2+3-111 + 222*3旷 2.丁 3(2-4>3武八数据结构深程设计'春达式求值辺Ebu叭表达
17、式求值"富HEI PMess any key ta continue图45.2扩展测试:在input文件中输入表达式如下图5:则输出结果如下图6:C input-tHt - 记事本C Output-tHt -记事本匚回区文件疋褊辑屯)箱式见)查看如 帮肪妁2-5-3. V21*2(2.5)*(3-2)+5.6-19832"(1+1)1 + 2+31*2 *3(1 + 2J*34Uf(54l*ii*3.2fi37-缶了 *82.9*1 .24-0.5-1|%3/2*1*(5-5) 2*3-(f*2)Z7-?5 0-时 LZF宪 2-卄(3 (2)-3)2-522*(4.4-2
18、-4)2*(4-4-3-1)(2-4)"3(2-4)"(5-8)艾件(£)骗辑格式功査看边|2a-19.906.0 06.0012,708.3 9u_i*e-1.90-F2.0&-1.006-?54.002-Ufi-8-00-0.13V|5.3容错测试:在input文件中输入表达式如下图7:C Output.tit -记事本 匸叵区)丈件疋编辑 格式辺 直看 帮助迅)2/0酩0(2-4>*3-12.彌2V.52+3)(-5(2)-3)(C(CZ)-3)(5.6-2>35(3.2-2.1)3*8.24-11* + +11tt12 2+ +文件世)
19、骗辑 格式0)査看 帮肋龜)Error inError inError inError InError inError inError inErrffr inError inError inError inError inError inError inError inError InError ininfix infiw infTH infiK infix irifiw infix infiK InFiK infix iriFix infiK inFix infix infix infix infixnotation. notation. notation. notation. notati
20、on. notation. notzation _ notation. notation. notation. notation. notation. notation. notation. notation. notation. notation.6设计心得通过此次的课程设计,巩固和加深了我对栈、队列、字符串等理论知识的理解;掌握现实复杂问题的分析建模和解决方法(;提高利用计 算机分析解决综合性实际问题的基本能力。在细节问题的分析上,较以往有了很大的提高。在寻求最优解的问 题上,也能够找到多种解决方案来使自己的程序收放自如。如,在处理 实数的问题上,我采用的是每取得一个字符,就立刻对此字符进
21、行处理 的方法。其实,我们可以用一个字符数组,来存储连接着的一系列数字 字符,然后再通过 atof 函数,直接得到字符数组中所存储的数字。 再如, 对负数问题的处理上,我最初的想法是通过一个标志 mark 来记录前面 的字符是否是负号(或减号) ,再在后面取到除符号外的数字时,选择 是否添加负号。另外,与其他人不同的是, 在我的课程设计中, Compare ()函数与其他有着很大的区别。通常情况下,同学们参照课本,都会 采用占用 7*7=49 个空间的数组来分别存储对应两个字符的优先级符号, 并对两个字符进行预算之后得到数组中的位置。 虽然 7*7 的数组所占的 空间并不是非常大,但在我看来这
22、也是一种浪费,并且空间的浪费并没 有换回时间一定的节省。因此,我采用了一种常规的思路。将各种运算 符按照数学逻辑上的优先顺序进行排序, 并得到两个字符之间的优先级 关系。这样一来,我们将不再需要那 7*7 的数组,且时间复杂度并不大 幅增涨。在这个课程设计中,运用到的数据结构的知识主要是栈的知识。栈 在各种软件系统中,应用非常广泛。栈的的存储特性 (LIFO 先进后出 ), 使得在用栈来编程时,思路清晰明了。在使用递归算法时,栈也是一种 很好的选择。此外,这次的课程设计进一步加强了我们运用 C 语言进行编程,调 试,处理问题的能力,加深了我们对算法及数据结构的认识。同时我也 意识到,开发程序的
23、早期计划要做的充分,以免出现程序完成后发现不 足而带来的修改麻烦。虽然这只是一个小小的软件,但对我们之后的影 响确实很大的。7 附:源程序清单#include <stdio.h>#include <stdlib.h>#include <math.h>int PrintError = 0;/*全局变量, 0代表正常, 1代表表达式出错 */*/*char类型链表式堆栈,用来存放运算符号,以及用在中缀表达式转换等时候 typedef struct Node *PtrToNode;typedef PtrToNode Stack;int IsEmpty(Stack
24、S);void MakeEmpty(Stack S);void Push(char X,Stack S);char Top(Stack S);void Pop(Stack S);typedef struct Nodechar Element;PtrToNode Next;/*float 类型链表式堆栈,用来存放操作数 */ typedef struct FNode *Ptr_Fn;typedef Ptr_Fn FStack;int FisEmpty(FStack S);void FPush(float X,FStack S);float FTop(FStack S);void FPop(FSt
25、ack S);typedef struct FNodefloat Element;Ptr_Fn Next;void ConvertToPost(FILE *In, Stack Whereat,FILE *Temp); void Reverse(Stack Rev);void Calculate(FILE *Change, Stack Whereat,FILE *Temp);/* 主函数 */int main()/* 初始化变量 */FILE *InputFile, *OutputFile,*Temp;Stack Whereat; char sample;/*打开文件 */*给 Whereat分
26、配空间*/*错误处理 */InputFile = fopen("Input.txt","r");OutputFile = fopen("Output.txt","w");Whereat = malloc(sizeof(struct Node); Whereat->Next = NULL;if (!Input !OutputFile) printf("intput or output file(s) do not exist.n"); return(1);sample = getc(Inpu
27、tFile);/*生成Temp文件*/ /* put back samp le字符 */*中缀变后缀 */*错误处理 */while ( sample != EOF)Temp = fopen("Temp.txt","w+"); ungetc(sample,InputFile);ConvertToPost(Input);if (PrintError)fprintf(OutputFile,"Error in infix notation."); fscanf(InputFile,"n",&sample);Pri
28、ntError = 0;else if (IsEmpty(Whereat) = 1)else if (IsEmpty(Whereat) != 1)Reverse(Whereat);if (Top(Whereat) = 'B')/*跳过在input文件中的空格*/PrintError = 1;数而不是运算符号 */fclose(Temp);Temp = fopen("Temp.txt","r+");Calculate(OutputFile, Whereat,Temp);fclose(Temp);MakeEmpty(Whereat); put
29、c('n',OutputFile);sample = getc(InputFile);/*错误处理, */*A表示操作数B表示运算符*/* 后缀表达式第一个元素应是操作/*计算结果 */*/*清空Whereat用来处理下一行*/在输出文件中换行 */* While 循环结束 */free(Whereat);fclose(InputFile);fclose(OutputFile);/* 删除 Temp.txt*/remove("Temp.txt");return 1;/* 检查堆栈是否为空 */int IsEmpty(Stack S)return(S->
30、Next=NULL);/*检查float堆栈是否为空*/int FIsEmpty(FStack S)return(S->Next=NULL);/* 弹出栈顶元素 */void Pop(Stack S)PtrToNode FirstCell;if (IsEmpty(S)perror("Empty Stack");elseFirstCell = S->Next;S->Next = S->Next->Next;/*free(FirstCell);弹出float栈顶元素*/void FPop(FStack S) Ptr_Fn FirstCell;if
31、(FIsEmpty(S)perror("Empty Stack"); elseFirstCell = S->Next;S->Next = S->Next->Next; free(FirstCell);/* 将堆栈置空 */void MakeEmpty(Stack S) if (S = NULL) perror("Must use Createstack first");elsewhile (!IsEmpty(S) Pop(S);/* 将float 堆栈置空 */void FMakeEmpty(FStack S)if (S = NU
32、LL)perror("Must use Createstack first");elsewhile (!IsEmpty(S) Pop(S);/* 元素进栈 */void Push(char X, Stack S)PtrToNode TmpCell;TmpCell = (PtrToNode)malloc(sizeof(struct Node); if (TmpCell = NULL)perror("Out of Space!");elseTmpCell->Element = X;TmpCell->Next = S->Next;S->
33、Next = TmpCell;/*float 元素进栈 */void FPush(float X, FStack S)Ptr_Fn TmpCell;TmpCell = (Ptr_Fn)malloc(sizeof(struct FNode);if (TmpCell = NULL) perror("Out of Space!");elseTmpCell->Element = X; TmpCell->Next = S->Next; S->Next = TmpCell;/* char Top(Stack S)返回栈顶元素 */if (!IsEmpty(S)r
34、eturn S->Next->Element; perror("Empty Stack"); exit(1);return 0;/* 返回 float栈顶元素 */float FTop(FStack S)if (!FIsEmpty(S)return S->Next->Element;perror("Empty Stack");exit(1);return 0;/* 将堆栈元素倒置 */void Reverse(Stack Rev)Stack Tempstack;Tempstack = malloc(sizeof(struct No
35、de);Tempstack->Next = NULL;while (!IsEmpty(Rev)Push(Top(Rev),Tempstack); Pop(Rev);Rev->Next = Tempstack->Next;/* 将元素压栈到一个临时堆栈 */* 指向新的堆栈 */*Whereat 说明:Whereat记录了操作数和运算符号的位置,用 A和B区分。A = operand, B = operator. (例如1+2转换成12+,在whereat中的形式应该是 AAB)Op Holder说明:Cha类型的堆栈Op holder用来保存运算符号。*/* 将中缀表带式转换
36、为后缀表达式 */void ConvertToPost(FILE *In, Stack Whereat, FILE *Temp)Stack OpHolder;char holder;char lastseen;/*操作数的计数器 */*初始化*/int digitcounter = 0;OpHolder = malloc(sizeof(struct Node);OpHolder->Next = NULL;holder=getc(In);/* 用来防止输入格式错误, 例如两个小数点 */lastseen = ''putc(' ',Temp);while (h
37、older !='n') && (holder != EOF) if (holder = ' ') digitcounter = 0;/*如果holder不是操作数或运算符else if ( IsOperator(holder) = -1)号*/PrintError = 1;else if (IsOperator(holder)=0)if (lastseen = holder) && (lastseen = '.')/*错误处理 */PrintError = 1;else lastseen = holder;/*进
38、栈*/*计数器加一 */if (digitcounter = 0) Push('A',Whereat); digitcounter+; putc(' ',Temp); putc(holder,Temp);else digitcounter = 0;if (lastseen = holder) && (lastseen != '(') && (lastseen != ')')/*"(" 情况特殊对待 */PrintError = 1;else lastseen = holder;/
39、* 当 OpH older 为空 */if(IsEmpty(OpHolder)=1) Push(holder,OpHolder);else if(OperatorValue(Top(OpHolder) = 6) /*OpHolder 是"("的情况 */ if(OperatorValue(holder)=5) Pop(OpHolder);else Push(holder,OpHolder);else if(OperatorValue(holder) = 6) Push(holder,OpHolder);/* OpHolder是")"的情况 */ (Ope
40、ratorValue(Top(OpHolder) != else if(OperatorValue(holder) = 5)while(IsEmpty(OpHolder) != 1) && 6)putc(' ',Temp);Push('B',Whereat);putc(Top(OpHolder),Temp);Pop(OpHolder);/*错误处理,括号不匹配 */if (IsEmpty(OpHolder) = 1) PrintError = 1;elsePop(OpHolder);else if(OperatorValue(holder) =
41、OperatorValue(Top(OpHolder)/* 幂运算情况 */&& (OperatorValue(holder) = 3) Push(holder,OpHolder);else if(OperatorValue(holder) < OperatorValue(Top(OpHolder)&& OperatorValue(Top(OpHolder) = 3)/*幂运算情况 */putc(' ',Temp);Push('B',Whereat); putc(Top(OpHolder),Temp);Pop(OpHolde
42、r); while(IsEmpty(OpHolder) != 1) && (OperatorValue(Top(OpHolder)= 3)Push('B',Whereat);putc(' ',Temp);putc(Top(OpHolder),Temp);Pop(OpHolder);Push(holder,OpHolder);/*如果当前运算符号的优先级小于或者等于堆栈中的运算符号的优先级,则将其放入tem p中,并且将堆栈中的运算符号出栈,放入tem p中,直到堆栈为空或者优先级小 于堆栈顶元素的优先级*/else if(OperatorValu
43、e(Top(OpHolder) >= OperatorValue(holder) while(IsEmpty(OpHolder) != 1)>=&&(OperatorValue(Top(OpHolder)OperatorValue(holder)&& (OperatorValue(Top(OpHolder)!=6) putc(' ',Temp); putc(Top(OpHolder),Temp); Push('B',Whereat); Pop(OpHolder); Push(holder,OpHolder);else
44、if(OperatorValue(Top(OpHolder) < OperatorValue(holder)/*如果当前运算符号的优先级大于堆栈中的运算符号的优先级,则将其压入堆栈中*/Push(holder,OpHolder); holder=getc(In);/* While循环结束*/ while(IsEmpty(OpHolder)!=1)/*最后如果堆栈中还有运算符号,则一并放到temp中*/Push('B',Whereat);putc(' ',Temp); putc(Top(OpHolder),Temp);Pop(OpHolder);MakeEm
45、pty(OpHolder); free(OpHolder);/* 判断类型, 1为运算符号, 0为操作数, -1为错误 */int IsOperator(char ToCompare)if (ToCompare = '(' | ToCompare = ')'| ToCompare = '+' | ToCompare = '-'II ToCo mpare = '*'| ToCo mpare = '/' | ToCo mpare ='人'| ToCo mpare = '%'
46、;)return 1;else if (ToCompare = '1' II ToCompare = '2'II ToCompare = '3'II ToCompare = '4' II ToCompare = '5'II ToCompare = '6'II ToCompare = '7'II ToCompare = '8' II ToCompare = '9'II ToCompare = '0'II ToCompare = '
47、.')return 0;elsereturn -1;/* 返回运算符号的优先级 */int OperatorValue(char ValueToGive)if (ValueToGive = '(') return 6;if (ValueToGive = ')') return 5;if (ValueToGive ='的 return 3;if (ValueToGive = '%') return 2;if (ValueToGive = '*') return 2;if (ValueToGive = '/
48、39;) return 2;if (ValueToGive = '+') return 1;if (ValueToGive = '-') return 1;return 0;/* 计算后缀表达式 */void Calculate(FILE *Change, Stack Whereat, FILE *Temp) FStack Operands;float looker;char Op;char spacefinder;float answer = 0;float NumA;float NumB;Operands = (Ptr_Fn)malloc(sizeof(st
49、ruct FNode); Operands->Next= NULL;while (IsEmpty(Whereat) != 1) && PrintError != 1)/*循环直到Whereat空,或者遇到错误*/*如果是A,则是操作数*/if (Top(Whereat) = 'A') fscanf(Temp," ",&spacefinder); fscanf(Temp,"%f",&looker); FPush(looker,Operands); Pop(Whereat);/*/*如果是B,则是运算符*
50、/判断是什么运算符 */*幂运算*/else if (Top(Whereat) = 'B') fscanf(Temp," ",&spacefinder); Op = getc(Temp); switch(Op)case('A'):NumB = FTop(Operands);FPop(Operands);/*错误处理 */if (FIsEmpty(Operands)PrintError = 1;elseNumA = FTop(Operands); FPop(Operands);if (NumA = 0 && NumB < 0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗机构施工试验检验方案计划
- 智能制造业安全隐患监测计划
- 环境保护与道德责任教学计划
- 科技企业员工培训衔接计划
- 2025-2025学年度第一学期八年级道德与法治教学计划
- 2024年广东省惠州市中考二模语文试卷
- 小学数学能力提升计划
- 四年级书法课外拓展计划
- 高职技能大赛学前教育专业培训体系
- 制造业设计管理制度及流程建设
- 35kv电缆敷设施工方案正式版
- 化学品安全技术说明书混合气
- GB/T 3098.26-2021紧固件机械性能平垫圈
- 四年级安全教育珍爱生命预防溺水安全知识主题班会
- 《岩石学》课件第二章结构构造
- 实验心理学讲解(思维)课件
- 国家基本药物培训培训课件
- 水生花卉资料课件
- 流动式起重机(固定)定期检验-自检记录
- 耳鼻咽喉科-咽肿瘤
- 高中地理·第一节人类面临的主要环境问题幻灯片
评论
0/150
提交评论