C语言课程设计报告简单计算器程序
(26页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
24.9 积分
.课程设计名称:C语言课程设计课程设计题目:简单计算器程序 ..目 录第1章 需求分析 11.1 设计要求 11.2 任务 1第2章 总体设计 22.1设计简介及设计方案论述 22.2功能模块层次图 2第3章 详细设计 33.3 由(后缀)逆波兰表达式计算中缀表达式原理 83.3.1算法描述 8第4章 调试分析 104.1 程序设计中所遇到的错误及犯错的原因 104.2 错误的解决方法 10第5章 用户手册 11总 结 15参考文献 16附 录(程序清单) 17..第1章 需求分析1.1 设计要求(1) 用 C 语言数据结构实现程序设计; (2)利用结构体、栈、进行相关信息处理; (2) 系统的各个功能模块要求用函数的形式实现; (4)界面简单,可操作性高。1.2 任务(1) 定义一个结构体类型数组,输入 0~9 及+、--、*等符号的信息,将其信息存储起来; (2)输入简单的加减乘除算术计算式,并在屏幕上显示逆波兰(后缀式)表达式和计算结果; (3)编写代码; (4)程序分析与调试。说明: 本课程设计将实现一个简单计算器。在功能上尽量模仿 windows 的计算器。系统界面不做牵制要求。该程序能实现标准型中+、-、*、/、(、)、.、的 混 合运算表达式(一般意义上的中缀表达式),将其转换成逆序波兰表达式(后缀表达式) 并计算输出结果。在进行运算后可以选择继续运算或者结束当前运算。即时准确地获得 需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。 ..第2章 总体设计2.1设计简介及设计方案论述逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相 关的两个运算对象之间,所以,这种表示法也称为中缀表达式。波兰逻辑学家 J.Lukasiewicz 于 1929 年提出了另一种表示表达式的方法。按此方法,每一运算符都置 于其运算对象之后,故称为后缀表达式。后缀表达式的优点是显而易见的, 编译器在处理时候按照从左至右的顺序读取逆波 兰表达式,遇到运算对象直接压入堆栈,遇到运算符就从堆栈提取后进的两个对象进行计算,这个过程正好符合了计算机计算的原理。后缀表达式比前缀表达式更加易于转换,并且它的最左面一定为数字,这一点在实 际编程的时候就会体会到它的好处了。 逆波兰表达式有一个更大的优点,就是拆括号,根据运算符的级别将中缀表达式转 换成逆波兰表达式后,运算顺序就已经替代了运算符的级别,这样也避免了括号提高运 算级别的特殊处理。 简单计算器2.2功能模块层次图 求 值 计 算 系 统表达式格式转换系统 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 .第3章 详细设计3.1 栈的定义与使用首先定义两个栈,一个字符型,一个双精度型,程序代码如下 :Struct { char data[MaxSize]; // 存放表达式的字符数组 int top; //栈顶指针 }Sym; /*符号*/ //作为存放运-省略部分- { loop2: expr[++t]=calc[i++]; } expr[++t]=' '; } else if(calc[i]=='(') { SymPush(); } else if(calc[i]==')') { while(Sym.data[Sym.top]!='(') { SymPop(); expr[++t]=' '; } Sym.data[Sym.top--]='\0'; i++; } else if(calc[i]=='+'||calc[i]=='-') { if((i==0)||(!(calc[i-1]>='0'&&calc[i-1]=0&&Sym.data[Sym.top]!='(') { SymPop(); expr[++t]=' '; } SymPush(); } else if(calc[i]=='*'||calc[i]=='/') { while(Sym.top>=0&&(Sym.data[Sym.top]=='*'||Sym.data[Sym.top]=='/')) { SymPop(); expr[++t]=' '; } SymPush(); } else { i++; } } while(Sym.top>=0) { SymPop(); expr[++t]=' '; } expr[++t]=Sym.data[++Sym.top]=' '; printf("\n");printf("***************************************\n"); printf("逆波兰表达式(后缀表达式):\n%s =\n",expr); for(i=0;expr[i]!=' ';i++) { If (expr[i]>='0'&&expr[i]<='9') { NumPush(); } else { NumPop(); } } printf("\n"); printf("运算结果为:\n%g\n",Num.data[0]); printf("***************************************\n"); printf("Continue input y Exit input n\n"); printf(" 继续输入计算 y 退出 n\n"); switch(getch()) { case 'y':{system("cls");goto loop1;} case 'n': default :exit(0); } getch(); return 0; } 关 键 词: 设计 报告 计算器 简单 课程 c语言 程序
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。