算法课件 第二章 递归[精选].ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法课件 第二章 递归[精选]

double eval(char tag, double left, double right) { switch(tag) { case 3 : return left + right; //加 case 4 : return left - right;//减 case 1 : return left * right; //乘 case 2 : if (fabs(right) = Epsilon) { printf(除 0 出错!\n); exit(1); } return left/right; // 除 } return 0; //数的内部代码为0 } int c = ; #define RADIX 10 int getToken(double *nump, char *op) { double dradix, num; int i; while (c == || c == \t) c = getchar(); /*掠过空白符*/ if(!(c = 0 c = 9)) { for(i=0; opchTbl[i].code != -1opchTbl[i].op != c; i++); if (opchTbl[i].code == -1) {synError(); return -1;} *op = c; if (c != \n) c = getchar(); /* c 中存储下一个字符*/ return opchTbl[i].code; /*返回运算符的内部码*/ } num = 0.0; /*遇到数字,翻译数*/ while (c = 0 c = 9) { num = RADIX * num + c - 0; c = getchar(); } if (c == .) { dradix = 1.0 / RADIX; c = getchar(); while (c = 0 c = 9) { num = num + (c - 0) * dradix; dradix /= RADIX; c = getchar(); } } *nump = num; return 0; } void main() { char op; int type, code, n , m; double res, d1, d2; char ans; do { printf(请输入表达式!\n); optop = opstack; numtop = num; error = n = m = 0; c = ; *optop++ = 5; /*预先让左括号进栈*/ while (error == 0) { if ((type = getToken(res, op)) 0) break; if (type == 0) { if (m) {synError(); break;} m = 1; /*运算分量比运算符多1个*/ *numtop++ = res; } else { if(type = 4 type 0) { /*运算符 */ if(m != 1){synError(); break;} m = 0; /*运算符与运算分量一样多 */ } if(type == 5) n++; /*左括号计数增1 */ if(type == 6) {if(n == 0){synError(); break;} n--; /*又配对一对圆括号*/ }

文档评论(0)

dart002 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档