c语言小数表达式运算课程设计,数据结构课程设计表达式计算.doc

数据结构课程设计表达式计算

福建农林大学计算机与信息学院

计算机类

课程设计报告

课程名称:算法与数据结构课程设计题目:表达式计算姓 名:系:数学系专 业:数学与应用数学年 级:学 号:指导教师:宁正元职 称:教授

20**年 12月 25 日

目 录

1、课程设计的目的……………………………………………………………1

2、课程设计的要求……………………………………………………………13、课程设计的内容?…………………………………………………………1

3.1主函数中一些重要变量的作用…………………………………………………1

3.2重要步骤算法思路分析 …………………………………………………………1

3.3源程序代码……………………………………………………………………3

3.4程序调试与测试结果?……………………………………………………………12

3.5结果分析………………………………………………………………………16

4、总结 ?………………………………………………………………………165、参考文献 ?…………………………………………………………………16

表达式计算

1、课程设计的目的

1.掌握C语言的相关知识;

2.熟悉掌握结构体和共用体的定义和使用;

3.熟悉掌握栈和相关操作函数的定义和使用;

4.熟悉掌握数组和相关操作的定义和使用

2、课程设计的要求

1.对从键盘输入一个表达式,先检查合法性:如不合法,则给出错误信息,再返回;如合法,则对其进行整理,利用栈和数组进行相关数据保存,再进行运算,最后输出计算结果。

2.计算范围:包括一般的算术运算(加、减、乘、除、括号)和常用的函数运算(三角函数、自然指数函数、自然对数函数、绝对值函数、平方根函数)。

3.其他功能可自行添加。

3、课程设计的内容

3.1主函数中一些重要变量的作用

double sz[MAXSIZE];用于存放数值的数组

char fh[MAXSIZE];用于存放运算符的数组

char temp[MAXSIZE];用于存放输入的表达式的数组

float sum;用于记录当前读到的数中以读到的数值

int i_b,i_t,ld,lsz;i_b后面备用;i_t记录读到哪一个字符;

ld记录小数的位数; lsz记录sz的有效长度;

shed KH,HS; KH用于放括号的栈;HS用于放函数的栈

3.2重要步骤算法思路分析(均以合法表达式为例)

先用数组temp对输入的表达式进行储存,再对其进行一位一位地读取和处理:

1.对数值和运算符的处理:

1)对运算符的处理比较简单,当遇到运算符时,直接存入数组fh即可;

2)对数值的处理,由于不知道数是几位,所以要用两个变量sum、ld,(sum记录已读取得数字,ld记录小数位数),具体操作请见下面流程图:

2.对括号运算和函数运算的处理:

对括号运算和函数运算的处理比较麻烦,特别市它们的嵌套使用,如式子:

1+(2-(3+4)*5)*6

当读到2前的‘(’时,由于括号运算的优先级高于加、减、乘、除,所以应对其先进行保存,当读到3前的‘(’时,同样也要先进行保存。当读到4后的‘)’时,应把3前的‘(’取出来,与之配对,再运算之间的式子,同样当读到5后的‘)’时,应把2前的‘(’取出来,配对,再运算。所以对于‘(’的保存与读取具有先进后出的特点,栈刚好也有这个特点,因此用栈可以对其进行储存;

同理,对函数的处理也是这样的,如式子:

sin(abs(-1))

应先保存sin函数名,再保存abs函数名;而进行计算时,应先计算abs函数再计算sin函数,也有先进后出的特点。

再考虑这些栈的元素的特点:

对于保存函数名的栈,它的元素必要有两个分量:一个保存函数名,可以用char类型,另一个分量要记录该函数在式中的位置,可以用int类型。

对于保存扣号的栈,因为考虑到有2种括号:一种是一般算式中的括号,如式子2*(3+4)中的括号;另一种是函数中把参数与一般数值区分开的括号,如式子sin(-1)中的括号。又考虑到要保存的都是’(’,所以该栈也只要2个分量,一个是该括号的种类,可以用int类型的0和1表示(0表示一般算式中的括号,1表示函数参数前的括号),另一个分量是保存该括号在式中的位置。

又考虑到两种栈统一性,我们先定义一个共用体:

union sig//sign1记录括号是属于函数的还是运算的,sign2记录是什么函数

{int sign1;

char sign2;

};

在定义栈元素的结构体:

typedef struct node

{union sig sign;

int jilu;

}n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值