当前位置:文档之家› C-C++ 语言中的表达式求值

C-C++ 语言中的表达式求值

C-C++ 语言中的表达式求值
C-C++ 语言中的表达式求值

C/C++ 语言中的表达式求值

C语言已被广泛地应用于系统软件和应用软件的开发中。以下是小编为大家搜索整理的C语言的应用,欢迎阅读!更多相关信息请关注相关栏目!

1.数据库管理和应用程序方面

C语言的非数值处理功能很强,因此它被广泛地应用于数据库管理系统和应用软件。大多数的关系数据库管理系统,如dBASE,Fox$ASE, ORACLE等,都是由C语言编写的。各种不同部门的应用软件也大都是用G语言开发的,C语言在开发数据库应用软件方面应用很广,深受开发者的欢迎。

2.图形图像来统的应用程序方面

C语言在图形图像的开发中也有着广泛的市场。很多图形图像系统,如AutoCAD通用图形系统等,就是使用C语言开发的,并且在这些图形系统中可以直接使用C语言编程,实现某些功能。C语言编译系统带有许多绘图功能的函数,利用这些函数开发图形应用软件十分方便。所开发的应用程序常用C语言编写接口界面,这样既方便又灵活,效果很好。这是因为该语言提供有图形处理功能,便于实现图形图像的各种操作。因此,C语言在图形图像的应用方面很好地发挥了它的作用。

3.编写与设备的接。程序方面

C语言不仅在建立友好界面方面有着广泛应用,如下拉式菜

单、弹出菜单、多窗口技术等;而且在编写与设备的接口程序方面也有着广泛应用。这是因为C语言不仅具有高级语言的特性还具有低级语言的功能,因此,在编写接口程序方面十分方便,有时它与汇编语言一起使用,会显示出更高的效率。

4.数据结构方面

由于C语言提供了十分丰富的数据类型,不仅有基本数据类型还有构造的数据类型,如数组、结构和联合等,把它们用于较复杂的数据结构〔例如,链表、队列、伐、树等)中显得十分方便,这方面已有许多成熟的例程供选择使用。

5.排序和检索方面

排序和检索是数据处理中最常遇到并较为复杂的间题。使用C语言来编写排序和检索各种算法的程序既方便又简洁。特别是有些排序算法采用了递归方法进行编程,更显得清晰明了。因此、人们喜欢使用G语言来编写这方面的程序。

上述列举了五个方面的应用,但绝不是说C语言的应用仅限如此,而是说在这几个方面目前使用得更多些。C,语言可以说在各个领域中都可以倪用,并且都会有较好的效果。所以,C语言是当前被用于编程的最广泛的语言之一。

另外,C语言是一种结构化程序设计语言,在编写大型程序中也很方便,特别是该语言又提供了预处理功能,其中文件包含在多人同时开发一个大程序时将带来减少重复和提高效率等好处,因此,越来越多的人喜欢用C语言来开发大型程序。

逆波兰表达式求值(实验报告及C 源码)

逆波兰表达式求值 一、需求分析 1、从键盘中输入一个后缀表达式,该表示包括加减乘除等操作符,以及正整数作为操 作数等。 2、用堆栈来实现 3、测试数据 输入:2 3 * 1 – # 输出:2 3 * 1 -- =5 二、概要设计 抽象数据类型 需要一个浮点数栈来存储还没有计算的浮点数或者运算的结果。 ADT Stack 数据成员:int size; int top; //分别用于存储栈大小、栈顶位置 float *listArray;//存储浮点型数字的数组 成员函数: bool push(float it); bool pop(float& it); bool isEmpty(); //判断栈为空 bool isOne();//判断栈是否只有一个元素 算法的基本思想 1.逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48 将数据由字符类型转换为浮点型数据; 2.如果字符是‘.’,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分; 3.遇到空格前是数据的,将x押入栈; 4.如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个, 报错;如果大于等于两个,就弹出两个数据,并进行相应的计算; 程序的流程 输入字符串,程序对字符串依次扫描。扫描一位,处理一位。扫描完成后,判断栈里是不是只有一个数据,若是,得到正确结果;若不是,则表达式出错。 三、详细设计 物理数据类型 用浮点数类型的栈存储运算中要用的数据,需要入栈、出栈,故设计如下的浮点类型的栈: class Stack { private: int size; int top; float *listArray; public: Stack(int sz=20); ~Stack();

C语言程序设计形成性考核册参考答案

一、选择题 1. 在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为(A)。 A.main B.MAIN C.name D.funtion 2.C语言原程序文件的缺省扩展名为(A)。 A.cpp B.exe C.obj D.C 3.由C语言目标文件连接而成的可执行的缺省扩展名为(B)。 A.cpp B.exe C.obj D.C 4.程序运行中需要从键盘输入多于一个数据时,各数据之间应使用(D)符号作为分隔符。A.空格或逗号 B.逗号或回车 C.回车或分号 D.空格或回车 5.每个C语言程序的编译错误分为(B)类。 A.1 B.2 C.3 D.4 6.设x和y均为逻辑值,则x && y为真的条件是(A)。 A.它们均为真 B.其中一个为真 C.它们均为假 D.其中一个为假 7.设有语句“int a=12;a+=a*a;”,则执行结束后,a的值为(C)。 A.12 B.144 C.156 D.288 8.x>0 && x<=10的相反表达式为(A)。 A.x<=0 || X>10 B.x<=0 && x>10 C.x<=0 || x<=10 D.x>0 && x>10 9.字符串“a+b=12\n”的长度为(B)。 A.6 B.7 C.8 D.9 10.在下列符号常量定义中。错误的定义语句格式为(C)。 A.const M1=10; B.const int M2=20; C.const M3 10 D.const char mark=’3’; 11.带有随机函数的表达式rand()%20的值在(C)区间内, A.1~19 B.1~20 C.0~19 D.0~20 12.当处理特定问题时的循环次数已知时,通常采用(A)循环来解决。 A.for B.while C.do-while D.switch 13.在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为(B)语句。 A.for B.if C.do D.while 14.for语句能够被改写为(D)语句。 A.复合 B.if C.switch D.while 15.下面循环语句执行结束后输出的i值为(B)。 for(int i=0;in/2){cout<

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);

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,

C语言上机实验报告书 表达式求值实验报告

一.需求分析 设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。 (1)输入的形式:表达式,例如2*(3+4) 包含的运算符只能有'+' 、'-' 、'*' 、'/' 、'('、 ')'; (2)输出的形式:运算结果,例如2*(3+4)=14; (3)程序所能达到的功能:对表达式求值并输出 二.系统设计 1.栈的抽象数据类型定义: ADT Stack{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0} 数据关系:R1={|ai-1,ai∈D,i=2,…,n} 约定an端为栈顶,ai端为栈底 基本操作: Push(&S,e) 初始条件:栈S已存在 操作结果:插入元素e为新的栈顶元素 Pop(&S,&e) 初始条件:栈S已存在且非空 操作结果:删除S的栈顶元素,并用e返回其值 }ADT Stack 2.主程序的流程: EvaluateExpression()函数实现了对表达式求值的功能,main()函数直接调用EvaluateExpression()对输入的表达式求值输出

3.各个模块的主要功能: *Push(SC *s,char c):把字符压栈 *Push(SF *s,float f):把数值压栈 *Pop(SC *s):把字符退栈 *Pop(SF *s):把数值退栈 Operate(a,theta,b):根据theta对a和b进行'+' 、'-' 、'*' 、'/' 、'^'操作 In(Test,*TestOp):若Test为运算符则返回true,否则返回false ReturnOpOrd(op,*TestOp):若Test为运算符,则返回此运算符在数组中的下标precede(Aop,Bop):根据运算符优先级表返回Aop与Bop之间的优先级EvaluateExpression(*MyExpression):用算符优先法对算术表达式求值 三.调试分析 (1)刚开始只编写了一个Push和一个Pop函数,但因为在EvacuateExpression()里既有运算符入/出栈,又有运算数入/出栈,运行下来总是出错。所以就编写了两个不同的Push和Pop函数,分别使用。 四.测试结果 2+3*4/5-1 输入表达式: 输入表达式:5*(10-2*3)-8

c语言表达式题库

C语言程序设计表达式 一、表达式求值 1.表达式:!(4<=6)&&(3<=7) 的值为_______ 0 2.表达式:x=!(2<5==5) 的值为【1】1 3.如果有变量定义:int i=1,j=8,a;则表达式:a=i+(j%4!=0) 的值为_【1】1 4.表达式:x=(7+6)%4/2 的值为【1】0 5.如果有变量定义:int x,则表达式:x=-3*4%-6/50 的值为【1】0 6.如果有变量定义:int x ,则表达式:x=3+7%5-6 的值为【1】-1 7.如果有变量定义:int x,则表达式:x=-3+4/5-6 的值为【1】-9 8.如果有变量定义:int x=3,y=4,z=4则表达式:z>=y&&y>=x 的值为_____ 1 9.如果有变量定义:int x=3,y=4,z=4则表达式:(z>=y>=x)1:0 的值为____ 0 10.如果有变量定义:int x=0,y=0,z=0则表达式:k=++x&&++y||++z 的值为_____ 1 11. 如果有变量定义:int x=0,y=0,z=0则表达式:k=++x||++y&&++z 的值为______ 1 12. 如果有变量定义:int x=40,y=4,z=4则表达式:x=x==(y-z) 的值为____ 0 13.如果有变量定义:int a=15,则表达式:a=a<<1 的值为【1】30 14.如果有变量定义:int y;char x='a';则表达式:y='a'+1 的值为【1】98 15.如果有变量定义float x=,y=则表达式:xb a : c>d c : d 的值为 【1】 5 17.如果有变量定义:int a=1,b=3,m 则表达式:m=a>b a : b+1 的值为【1】4 18.如果有变量定义:int a=1,b=2则表达式:(!a)||(a>b) 的值为_______ 0 19. 如果有变量定义:int a=1,b=2,c=1,x=4,y=5则表达式:!a&&b||x>y&&c 的值为______ 0 20如果有变量定义:int a=12,n=5则表达式:a%=(n%=2) 的值为_______ 0 21如果有变量定义:int a=2, b=3;float x=, y=则表达式:(float)(a+b)/2+(int)x%(int)y 的值为【1】22如果有变量定义:int x=, y=则表达式:z=(int)x%(int)y 的值为【1】1 23如果有变量定义:int x=,a=7,y=则表达式:k=a%3*(x+y)/2 的值为【1】3 24如果有变量定义:int a=5则表达式:a*=1+3 的值为【1】20 25如果有变量定义:int a,b则表达式:b=(a=3*4, a*4),a+5 的值为【1】17 26如果有变量定义:int a,b 则表达式:x=a=3,5*a 的值为【1】15 27如果有变量定义:int a=120 则表达式:a%=(5%2) 的值为【1】0 28如果有变量定义:int a=10则表达式:a+=a-=a*=a 的值为【1】0 29 如果有变量定义:int a=10则表达式:a+=a-=a*a 的值为【1】-180 30 如果有变量定义:int i=3则表达式:j=i++ 的值为【1】3 31如果有变量定义:int i=3则表达式:j=++i 的值为【1】4 32表达式5&7的值为【1】,5│7的值为【2】. 5 7

C语言表达式求值

/* 表达式求值,输入一个表达式,如1+2*3#,程序可计算出结果为7 支持以下符号: + - * / ( ) ^ . 可以计算整数、小数 其中^表示次方,2^5表示2的5次方 */ /*头文件*/ #include <> #include <> #include <> #include <> #include <> /*宏定义*/ #define INIT_STACK_SIZE 100 #define SET_NUM 8 #define N 100 /*字符优先级表*/ unsigned char prior[SET_NUM][SET_NUM] = { /* '+' '-' '*' '/' '(' ')' '#' '^' */ /*'+'*/'>', '>', '<', '<', '<', '>', '>', '<', /*'-'*/'>', '>', '<', '<', '<', '>', '>', '<', /*'*'*/'>', '>', '>', '>', '<', '>', '>', '<', /*'/'*/'>', '>', '>', '>', '<', '>', '>', '<', /*'('*/'<', '<', '<', '<', '<', '=', ' ', '<', /*')'*/'>', '>', '>', '>', ' ', '>', '>', '>', /*'#'*/'<', '<', '<', '<', '<', ' ', '=', '<', /*'^'*/'>', '>', '>', '>', '<', '>', '>', '>' }; unsigned char priorSet[SET_NUM] = {'+', '-', '*', '/', '(', ')', '#', '^'}; /*结构体定义,这是用来存放字符的栈*/ typedef struct { char *base; char *top; int stacksize; } SqStackC; /*结构体定义,这是用来存放数字的栈*/

c语言c算数表达式求值

《数据结构》 课程设计说明书 题目算术表达式求值 学号 姓名 指导教师 日期2012.6

目录 第1章需求分析 (4) 第2章总体设计 (4) 第3章抽象数据类型定义 (5) 第4章详细设计 (6) 4.1 工程视图 (6) 4.2 类图视图 (6) 4.3 函数的调用关系 (7) 4.4 主程序流程图 (7) 4.5 主要算法的流程图 (8) 第5章测试 (9) 第6章总结 (11) 参考资料: (11) 附录:程序代码 (12)

课程名称数据结构课程设计 设计题目算术表达式求值 指导教师余金林时间2012.6——2012.7 一、教学要求 1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力 4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 算术表达式求值 以字符串表示算术表达式,在此基础上借助栈完成对表达式的转换和求值操作。 要求设计类(或类模板)来描述算术表达式及其操作,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数: ?输入算术表达式(中缀表示) ?中缀表达式转换为后缀表达式 ?输出表达式 ?对后缀表达式求值 并设计主函数测试该类。 三、设计要求及成果 1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告 四、进度安排 资料查阅与讨论(1天) 系统分析(2天) 系统的开发与测试(5天) 编写课程设计说明书和验收(2天) 五、评分标准 1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问 六、建议参考资料 1.《数据结构(C语言版)》严蔚敏、吴伟民主编清华大学出版社2004.11 2.《数据结构课程设计案例精编(用C/C++描述)》,李建学等编著,清华大学出版社 2007.2 3.《数据结构:用面向对象方法与C++语言描述》,殷人昆主编,清华大学出版社 2007.6

数据结构课程设计_实验报告(一)表达式求值(计算器)

数据结构课程设计实验报告起止时间:2015.12.28-2015.12.31

1、输入:tan45 2、输出:1 3、执行结果: : 设计过程中遇到的问题及解决办法: 问题:算数表达式以字符串输入,操作数和操作符的提取; 解决办法:两两操作符之间如有数字将中间的数字提取强制转换成double型; 参考文献:(在设计中参考的书籍、网站等资料) 1. 朱振元,《数据结构——C++语言描述》,清华大学出版社,2008年,页码: 2. https://www.doczj.com/doc/8115612071.html,/detail/gszhouyi/738777 指导老师评议: 成绩评定:指导教师签名:

附件:(程序源代码) #include #include #include #include #define N 100 #define pai 3.1415926 typedef struct yxj { char operat; int rank; }yxj; typedef struct str { char data[N]; }zs; void sjhs(void) { char s[10],a[10]; double y,x; printf("请输入(sin cos tan 角度制)表达式:\n"); scanf("%s",s); if(strstr(s,"sin")!=0) { int i=0,j=0; while(s[i]!='\0') { if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; i++; } s[j]='\0'; x=atof(s); y=sin(x*pai/180); } else if(strstr(s,"cos")!=0) { int i=0,j=0; while(s[i]!='\0') { if(s[i]>='0'&&s[i]<='9') s[j++]=s[i]; i++; }

C-C++ 语言中的表达式求值

C/C++ 语言中的表达式求值 C语言已被广泛地应用于系统软件和应用软件的开发中。以下是小编为大家搜索整理的C语言的应用,欢迎阅读!更多相关信息请关注相关栏目! 1.数据库管理和应用程序方面 C语言的非数值处理功能很强,因此它被广泛地应用于数据库管理系统和应用软件。大多数的关系数据库管理系统,如dBASE,Fox$ASE, ORACLE等,都是由C语言编写的。各种不同部门的应用软件也大都是用G语言开发的,C语言在开发数据库应用软件方面应用很广,深受开发者的欢迎。 2.图形图像来统的应用程序方面 C语言在图形图像的开发中也有着广泛的市场。很多图形图像系统,如AutoCAD通用图形系统等,就是使用C语言开发的,并且在这些图形系统中可以直接使用C语言编程,实现某些功能。C语言编译系统带有许多绘图功能的函数,利用这些函数开发图形应用软件十分方便。所开发的应用程序常用C语言编写接口界面,这样既方便又灵活,效果很好。这是因为该语言提供有图形处理功能,便于实现图形图像的各种操作。因此,C语言在图形图像的应用方面很好地发挥了它的作用。 3.编写与设备的接。程序方面 C语言不仅在建立友好界面方面有着广泛应用,如下拉式菜

单、弹出菜单、多窗口技术等;而且在编写与设备的接口程序方面也有着广泛应用。这是因为C语言不仅具有高级语言的特性还具有低级语言的功能,因此,在编写接口程序方面十分方便,有时它与汇编语言一起使用,会显示出更高的效率。 4.数据结构方面 由于C语言提供了十分丰富的数据类型,不仅有基本数据类型还有构造的数据类型,如数组、结构和联合等,把它们用于较复杂的数据结构〔例如,链表、队列、伐、树等)中显得十分方便,这方面已有许多成熟的例程供选择使用。 5.排序和检索方面 排序和检索是数据处理中最常遇到并较为复杂的间题。使用C语言来编写排序和检索各种算法的程序既方便又简洁。特别是有些排序算法采用了递归方法进行编程,更显得清晰明了。因此、人们喜欢使用G语言来编写这方面的程序。 上述列举了五个方面的应用,但绝不是说C语言的应用仅限如此,而是说在这几个方面目前使用得更多些。C,语言可以说在各个领域中都可以倪用,并且都会有较好的效果。所以,C语言是当前被用于编程的最广泛的语言之一。 另外,C语言是一种结构化程序设计语言,在编写大型程序中也很方便,特别是该语言又提供了预处理功能,其中文件包含在多人同时开发一个大程序时将带来减少重复和提高效率等好处,因此,越来越多的人喜欢用C语言来开发大型程序。

表达式求值课程设计(数据结构C语言版)

课程设计报告课程设计题目:表达式求值 姓名胡*其 学号20162018**** 班级*****17Z 指导教师徐** 2017年12月30日

东华理工大学 课程设计评分表 学生姓名:胡*其班级:*****17Z 学号:20162018**** 课程设计题目:表达式求值

目录 一.题目: ........................ 错误!未定义书签。 二.设计任务: .................... 错误!未定义书签。 三.问题分析: .................... 错误!未定义书签。 四.结构分析: (1) 4.1用于存储操作数和运算结果(Sfloat) (1) 4.2用于存储运算符(Schar) ............. 错误!未定义书签。 4.2系统中子程序及功能要求............ 错误!未定义书签。 五.实现流程 (3) 5.1程序主流程图 (3) 5.2求值操作流程 (3) 六.个性功能介绍 (4) 七.部分问题及解决方案 (5) 7.1不能进行带有小数点的数的运算 (5) 7.2在输错后,跳回主界面直接提示指令输入错误,重输 (6) 八.课程设计小结 (7) 九.附录一:部分测试数据 (7) 十.附录二:源代码 (7)

一、题目: 表达式求值 二、课程设计任务: 要求能输入一个带“()”的任意多位实数的表达式。 要求: 1、有合理的提示; 2、有非法数据的判断; 3、能够进行多次计算。 测试数据及测试结果请在上交的资料中写明; 三、问题分析: 任何一个表达式都是由操作符,运算符组成的。我们分别用顺序栈来寄存表达式的操作数和运算符。栈是限定于紧仅在表尾进行插入或删除操作的线性表。顺序栈的存储结构是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素。 为了实现算符优先算法。可以使用两个栈。一个称为Schar,用以寄存运算符,另一个称做Sfloat,用以寄存操作数或运算结果。 1.首先置操作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素; 2.依次读入表达式,若是操作符即进Sfloat栈,若是运算符则和Schar栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即Schar栈的栈顶元素和当前读入的字符均为”#”)。 四、结构分析: 1.用于存储操作数和运算结果(Sfloat): ADT s_float{ 数据元素:此链栈中的所有元素类型为字符型的数字字符 数据关系:栈中数据元素之间是线性关系。 基本操作: (1) Init(Sfloat *S);

算术表达式求值的运算符优先算法。C语言完整代码

#include #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 # define TRUE 1 # define FALSE 0 typedef int Status; typedef char SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; }StackChar; //sequence序列 typedef struct { float *base; float *top; int stacksize; }StackFloat; //sequence序列 Status InitStack(StackChar **S){ //初始化空桟 *S=(StackChar *)malloc(sizeof(StackChar)); (*S)->base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!(*S)->base) exit(OVERFLOW); (*S)->top=(*S)->base; (*S)->stacksize=STACK_INIT_SIZE; return OK; }// InitStack(&S); Status initStack(StackFloat **S){ //初始化空桟 *S=(StackFloat *)malloc(sizeof(StackFloat)); (*S)->base=(float *)malloc(STACK_INIT_SIZE*sizeof(float)); if(!(*S)->base) exit(OVERFLOW); (*S)->top=(*S)->base; (*S)->stacksize=STACK_INIT_SIZE; return OK; }// initStack(&S); Status Pop(StackChar **S,SElemType *a){ if((*S)->top==(*S)->base) {printf("ERROR!\n"); return ERROR; } *a=*(--(*S)->top);

C语言表达式求值

实验四算术表达式求值运算器 一、实验目的 帮助学生熟练掌握栈的基本操作,并通过用算符优先法对表达式求值的过程深刻领会用栈解决实际问题的基本方法。 二、实验内容 编写程序实现从键盘终端输入语法正确的算术表达式,计算出表达式的值。 为了避免算符的二义性,可以假设表达式中只包含实型正常数 运算符包括加、减、乘、除四种基本运算,可以包含圆括号。 三、实验仪器 微型计算机 实验用编程语言:Turbo C 2.0,Borland C 3.0等以上版本 四、实验原理 1、算术四则运算法则: 先乘除后加减 从左至右 先括号内后括号外 2、方法:对运算符建立优先关系矩阵,按优先关系对表达式进行处理。 算符:运算符和界符。 根据法则1:对于两个相邻运算符,乘除优先于加减。 根据法则2:乘除优先级相同,加减优先级相同。相邻两个同级运算符左优先。 根据法则3:“(”前面的运算符优先级低于“(”的优先级。“(”的优先级低于右边相邻算符。“)”左边的算符高于“)”的优先级。 由于“(”和“)”必须成对出现,令它们的优先性相同。 为了处理的方便,假设表达式以“#”开始和结束,输入表达式的一般形式为: #表达式# 如: #5.3+4.2*(7.6+4.5)# 规定开始的“#”的优先性低于所有其它算符,所有其它算符的优先性高于结束的“#”。根据假设,表达式开始的“#”和结束的“#”必须成对出现,所以也令它们的优先性相同。 对于一个正确的表达式,“)”不可能与“(”相邻,“(”不可能与结束的“#”相邻,开始的“#”不可能与“)”相邻,它们之间没有优先性,程序应具有这种判断能力。 根据上面的讨论,可用表1所示的算符优先关系矩阵来描述算符之间的优先关系,其中,用“>”表示表达式中前一个算符的优先性高于后一个算符的优先性,用“<”表示表达式中前一个算符的优先性低于后一个算符的优先性,用“=”表示表达式中前一个算符的优

C语言、栈+表达式求值、 代码+论文

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法A设计实践 课程代码: 6015059 题目二: 利用栈实现表达式求解 年级/专业/班: 2011/信科/ 学生姓名: 彭X 学号: 312011070102XXX 开始时间:2014 年 5 月28 日 完成时间:2014 年 6 月28 日 课程设计成绩: 指导教师签名:年月日

目录 3 实验二 (9) 3.1整体设计思路 (9) 3.2 编码 (10) 3.3 程序演示 (13) 总结 (15) 参考文献 (16)

摘要 随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,数据结构与算法的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。数据结构与算法旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。 第二个实验是利用栈实现表达式求解,要求只考虑+、-、*、/四种数学运算还有只考虑圆括号参与运算。 关键词:数据结构与算法线性表链式结构栈表达式求解

1 引言 1.1问题的提出 数据结构课程设计是重要地实践性教学环节。在进行了程序设计语言课和《数据结构与算法》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。本课程设计是数据结构中的一个关于线性表链式表示的实现还有用栈实现表达式求解,此课程设计要求对栈存储结构和链表存储结构非常熟悉,并能熟练使用它们。 1.2C语言 C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。 1.3C语言发展过程 1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。 1.4任务 题目二:利用栈实现表达式求解 第二个实验是使用栈来解决表达式中的求解优先问题。要求(1)只考虑+、-、*、/四种数学运算;(2)只考虑圆括号()参与运算。 3 实验二利用栈实现表达式求解 2.1整体设计思路 基本的思路是,程序根据输入的字符,来分析求解步骤,然后根绝步骤以此计算求解。我用符号来表示运算符和运算符的优先级,通过运算符的优先级来决定是进行运算还是入栈。比如输入一个字符串:12+56/7*65= 遇到数字就继续向后读取,直到遇到运算符,将这

C语言_算数表达式求值_课程设计报告

目录 一.概述 (2) 二.总体方案设计 (2) 三.详细设计 (4) 四.程序的调试与运行结果说明 (6) 五.课程设计总结 (6) 错误!未定义书签。 参考文献 附录 (8)

概述 一、课程设计的目的与要求本课程设计是为了配合《数据结构》课程的开设,通过设计一个完整的程序,使学生掌握数据结构的应用,算法的编写,类C 语言的算法转换成C 程序并用Turbo C2.0 或Visual C++6.0 上机调试的基本方法。要求如下: 1. 要充分认识课程设计对自己的重要性,认真做好课程设计前的各项准备工作。 2. 既要虚心接受老师的指导,又要充分发挥主观能动性.结合课题, 独立思考,努力钻研,勤于实践,勇于创新。 3. 独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。 4. 课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。 5. 在设计过程中,要严格要求自己,树立严肃,严密,严谨的科学态度, 必须按时,按质,按量完成课程设计。 6. 小组成员之间,分工明确,但要保持联系畅通,密切合作,培养良好 的互相帮助和团队协作精神。 二、需求分析 本课程设计的课题为表达式求值,要求: 1. 用户将表达式原样输入(在表达式结尾加上#),能得出结果(为减小难度,运算结果的10 进制形式的值,不超过longdouble 的存储范围); 2. 输入的数可以为小数(为减小难度,小数的整数与小数部分均不超过10 位),负数(如果负数前有运算符,则应将负数括起来),以及2进制,8进制,10 进制,16进制的数(为减小难度,数出的结果都以10 进制形式表示); 3. 运算符号包括()、+、—、* 、/;括号可以多重;

数据结构之算术表达式求值C语言编写

#include #include #include #define MAXLEN 100 typedef struct { char ch; int level; }opt; typedef struct //定义操作栈 { opt st[MAXLEN]; int top; }Tstack; typedef struct //定义数据栈 { double D[MAXLEN]; int top; }Nstack; void Unit(Tstack *s) //初始化操作栈{ s->top=-1; }//Unit void DUnit(Nstack *s) //初始化数据栈{ s->top=-1; }//DUnit char Push(Tstack *s,opt c) //入操作栈{ s->top++; s->st[s->top]=c; return c.ch; }//Push

double DPush(Nstack *s,double c) //入数据栈{ s->top++; s->D[s->top]=c; return c; }//DPush opt Top(Tstack *s) //操作栈栈顶 { opt error={'$',-2}; if(s->top>=0) return s->st[s->top]; else return error; }//Top double DTop(Nstack *s) //数据栈栈顶 { if(s->top>=0) return s->D[s->top]; else return 0; }//DTop opt Pop(Tstack *s) //出操作栈 { opt i; opt error={'$',-2}; if(s->top>=0) { i=s->st[s->top]; s->st[s->top].ch='\0'; s->top--; return i; } else return error; }//Pop

数据结构算术表达式求值(C语言含代码及运行截图)

数据结构算术表达式求值(C语言)1.题目内容 算术表达式求值演示 2.对该问题的简要分析 1.设置运算符栈和运算数栈辅助分析算法优先关系。 2.在读入表达式的字符序列的同时,完成运算符和运算数(整数)的识别处理, 3.以及相应的运算。 4.在识别出运算数的同时,要将其字符序列形式转换成整数形式。 5.在程序的适当位置输出运算符栈、运算数栈、输入字符和主要操作的内容。3.程序实现方法(如:采用什么存储结构、用到了栈或队列或递归程序设 计方法等) 运用栈的抽象数据类型定义,表达式求值程序是一个多次调用函数的过程,且调用的过程较为复杂。在 while 循环时指针移动容易出错,因此多次出现内存错误,对于涉及的循环的操作开始和结束条件设置很关键。本次实验熟悉了栈数据结构的表示与实现方法。算法时间和空间分析:算法的运行时间主要花在while 循环上,它从头到尾扫描后缀表达式中的每一个数据(每个操作数或运算符均为一个数据),若后缀表达式由n个数据组成,则此算法的时间复杂度为O(n)。此算法在运行时所占用的临时空间主要取决于栈 S 的大小,显然,它的最大深度不会超过表达式中操作数的个数,因为操作数的个数与运算符(假定把’#’也看作为一个特殊运算符,即结束运算符)的个数相等,所以此算法的空间复杂度也同样为 O(n) 4.用户手册(如何运行该程序,对输入数据有何要求等) 请输入正确的表达式以'#'结尾即可,要求符号均为英文状态 5.测试结果(输入了什么,结果是什么,可以用截屏图来表示)

6.源程序文件名列表(如:T1.CPP——主程序,T1.H——头文件等)#include #include #include #define NULL 0 #define OK 1 #define ERROR -1 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 20 /* 定义字符类型栈 */ typedef struct{ int stacksize; char *base; char *top; } Stack; /* 定义整型栈 */ typedef struct{ int stacksize;

相关主题
文本预览
相关文档 最新文档