1、 通讯录通讯录 程序设计基础课程设计报告程序设计基础课程设计报告 二二 OOOO 八八 年年 六月三十日六月三十日 目目 录录 一、一、 编程目的编程目的设计要求设计要求 二、二、 各函数功能说明各函数功能说明 三、三、 流程图流程图 四、四、 总结总结 参考数目:参考数目: 11 一.编程目的及其设计要求: 1.设计一个后缀式简单单步计算器类 MyCalcu1(类型) ,具有如下一 些功能: (1)从键盘读入后缀式算式 str(为一个字符串) ,或通过一参构造 函数设置算式 str。 (2)可以进行加、减、乘、除运算,运算对象为实型数据,遇等号 结束计算并显示结果。 (3)运算符没有优先级,
2、即是说,总按“后缀式简单单步”形式执 行。如: “9 3 - 4 * =” ,意味着先取运算对象 9 与 3 进行后缀的减法运算得结果 6,而 后再将 6 与后面的 4 进行 后缀的乘法运算得结果 24, 再往后遇到等号则将结果 24 输出而结束 处理。 (4) 具有一定的排错功能,当用户输入错误的算式时提示用户。 下面再例举一些输入与期望的相应输出结果的对应关系: 输入:3 5 + = 输出:8 对应于:3+5 输入:18 4 - 2 / = 输出:7 对应于:(18-4)/2 输入:12.3 5 / 8.1 + 1.5 * = 输出:15.84 对应于:(12.3/5)+8.1)*1.5
3、二.源程序: #include #define MaxLen 100/存储空间 int transform(char str, char exp) int stMaxLen;/转化过程使用的过度栈 char ch; int i=0,t=0,top=-1;/i是 str 下标,t 是 exp 下标,top 是 exp 下标 while(ch=stri+)!=0 ) if(ch=0 top-; t+; top+; sttop=ch; else if (ch=* | ch=/)/判断为乘除号 while(sttop=* | sttop=/) expt=sttop; top-; t+; top+; s
4、ttop=ch; while (top=0)/将栈中所有运算符依次弹出存入 exp 栈中 expt=sttop; t+; top-; expt=0; return 1; int compvalue(char exp,int *n) int stMaxLen,d;/st 为数栈 char ch; int t=0,top=-1;/t 是 exp 下标,top 是 st 的下标 while(ch=expt+)!=0) if(ch=0 do d=10*d+ch-0; while(ch=expt+)!=#); top+; sttop=d;/数字进栈 else/运算符操作 switch(ch) case+
5、:sttop-1=sttop-1+sttop; break; case-:sttop-1=sttop-1-sttop; break; case*:sttop-1=sttop-1*sttop; break; case/: if(sttop!=0) sttop-1=sttop-1/sttop; else return 0;/除 0 错误! break; top-; (*n)=sttop; return 1; void main() char strMaxLen;/存储原来算术表达式 char expMaxLen;/存储转换成的后缀表达式 int n; coutstr; if(transform(str,exp)=0) cout“原算术表达式不正确!“endl; else cout“转换成后缀表达式输出:“endlexpendl; if(compvalue(exp, else cout“计算错误!“endl; 三.流程图:略 四.总结: 选课题的时候我以为我选了一个比较简单的题目, 教工信息管理息统听起来 是不难,但是做的时候却发现不是那么回事,比我想象的要难的多。首先是感觉 太范,无从下手,到图书馆借了相应的书回来看了看,才发现我的想法太简单, 完全处在做 1+1=2 的那种小程序的水平。