- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言_算数表达式求值_课程设计报告
目 录
一.概述 2
二.总体方案设计 3
三.详细设计 4
四.程序的调试与运行结果说明 5
五.课程设计总结 6
参考文献 7
附录.................................................................................................................................................8
一 概述
一、课程设计的目的与要求
本课程设计是为了配合《数据结构》课程的开设,通过设计一完整的程序,使学生掌握数据结构的应用,算法的编写,类C语言的算法转换成C程序并用TC2.0或Visual C++6.0上机调试的基本方法要求如下:1.要充分认识课程设计对自己的重要性,认真做好设计前的各项准备工作 2.既要虚心接受老师的指导,又要充分发挥主观能动性.结合课题,独立思考,努力钻研,勤于实践,勇于创新 3.独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计 4.课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理 5.在设计过程中,要严格要求自己,树立严肃,严密,严谨的科学态度,必须按时,按质,按量完成课程设计 6.小组成员之间,分工明确,但要保持联系畅通,密切合作,培养良好的互相帮助和团队协作精神
char Precede(char x,char y) 运算符优先级判断 CharNode *CreatRegister() 输入表达式,并对特殊情况做处理 Node *StackChange(CharNode *top,int m) 将数与运算符分开,并将其他进制转化为10进制 Node *Compute(Node *p) 作只有加减乘除运算的表达式求值 Node *GetOutcome(Node *head) 求用户输入表达式的值 main() 主函数
主要部分的详细流程图)
四 程序的调试与运行结果说明
在编写只有加减乘除的表达式求值的表达式求值时,原始思想是用两个指针分别指向相邻的两个运算符,若后者大,则进行后面运算符的运算,然后指针继续后移,当再次遇到的两个运算符,前者与后者相等,则进行前面运算符的运算;此算法思想错误,导致计算6+2*3+1#结果正确,而当计算6-2*3+1#时,却得出-1的错误结果,正确结果为+1;这是因为先计算2*3得到6;表达式变为6-6+1#;接着进行6+1的运算,得到7;当前计算循序错误,导致结果错误。后来将程序改为先进行优先级高的运算符的运算,当优先级相等时,不计算。指针后移,当遇到表达式结束标志时,便将指针移到表达式的头位置,此时,判断是否进行运算的条件发生变化,当前后运算符的优先级相等时,进行前面运算符的运算;使得第一次将乘除运算符运算完,第二进行只有加减运算符的运算
五 课程设计总结
进过调试程序能得出大多数表达式的正确结果,虽然经过了一些特殊情况表达式的输入,得出了正确结果,但不排除还有某些漏洞使得一些特殊情况的表达式不能得出正确结果,还有待进一步的测试。
特点:本程序能进行小数、以及2进制、8进制、16进制的运算。
不足:结果都以10进制形式表示,用户不能改变;结果的10进制形式不能超出longdouble型数据能存储的数的范围;
进一步的设想:将数分段存储,内存动态分配,使其能进行天文数字运算;录入其他的运算符例如指数运算,开方运算,取余运算,解一元一次方程,解二元一次方程组。
附录:
源代码:
//用来存储字符的结点类型
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
文档评论(0)