- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
福建农林大学计算机与信息学院
计算机类
课程设计报告
课程名称: 算法与数据结构 课程设计题目: 表达式计算 姓 名: 系: 数学系 专 业: 数学与应用数学 年 级: 学 号: 指导教师: 宁正元 职 称: 教授
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
您可能关注的文档
最近下载
- 甘肃省马铃薯资源开发利用现状与发展规划.docx VIP
- 教师如何帮助学生预防校园欺凌.pptx VIP
- 中国文化英文教程 Unit 3 Traditional Chinese Porcelain Culture.ppt
- Unit 9 I like music that I can dance to单元作业设计.pdf VIP
- 中国建筑第三工程局质量管理体系文件——质量手册.pdf VIP
- 党纪学习教育党课讲稿.pptx VIP
- 《小学生自我介绍》PPT课件.ppt
- 10KV农村电网工程施工组织设计.doc VIP
- 节能与新能源汽车技术路线图2.0_完整下载版.pdf
- 生物安全知识培训.pptx
文档评论(0)