练习4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。
来源:互联网 发布:禁止软件打开 编辑:程序博客网 时间:2024/06/03 19:20
利用math.h的sin、exp、pow函数;利用string.h的strcmp函数比较;利用ctype.h的函数islower判断是否是小写字母。
#include <stdio.h>#include <stdlib.h>#include <math.h>#define MAXOP 100#define NUMBER '0'#define NAME 'a'int getop(char []);void push(double);double pop(void);double mathfnc(char s[]);main(){ int type; double op2; char s[MAXOP]; while((type=getop(s))!=EOF){ switch(type){ case NUMBER: push(atof(s)); break; case NAME: mathfnc(s); break; case '+': push(pop()+pop()); break; case '*': push(pop()*pop()); break; case '-': op2=pop(); push(pop()-op2); break; case '/': op2=pop(); if(op2!=0.0) push(pop()/op2); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n",pop()); break; default: printf("error: unknown command %s\n",s); break; } } return 0;}#define MAXVAL 100int sp=0;double val[MAXVAL];void push(double f){ if(sp<MAXVAL) val[sp++]=f; else printf("error: stack full,can't push %g\n",f);}double pop(void){ if(sp>0) return val[--sp]; else{ printf("error: stack empty\n"); return 0.0; }}#include <string.h>double mathfnc(char s[]){ double op2; if(strcmp(s,"sin")==0) push(sin(pop())); else if(strcmp(s,"cos")==0) push(cos(pop())); else if(strcmp(s,"exp")==0) push(exp(pop())); else if(strcmp(s,"pow")==0){ op2=pop(); push(pow(pop(),op2)); } else printf("error: %s not supported\n",s);}#include <ctype.h>int getch(void);void ungetch(int);int bufp=0;int getop(char s[]){ int i,c; while((s[0]=c=getch())==' '||c=='\t') ; s[1]='\0'; if(!isdigit(c)&&c!='.'&&!islower(c)) return c; i=0; if(islower(c)){ while(islower(s[++i]=c=getch())) ; s[i]='\0'; if(c!=EOF) ungetch(c); return NAME; } if(isdigit(c)) while(isdigit(s[++i]=c=getch())) ; if(c=='.') while(isdigit(s[++i]=c=getch())) ; s[i]='\0'; if(c!=EOF) ungetch(c); return NUMBER;}#define BUFSIZE 100char buf[BUFSIZE];int getch(void){ return (bufp>0)? buf[--bufp]:getchar();}void ungetch(int c){ if(bufp>=BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++]=c;}
以上程序在text4.3的基础上改进,答案程序在练习4-4基础上改进,略有差别。
0 0
- 练习4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。
- 逆波兰计算器,实现了对exp、sin、pow等的支持(TCPL 练习4-5)
- 对数与指数操作:pow,log,sqrt,exp
- 计算器是如何计算sin、cos等科学函数的值呢?
- C库函数-----sin()
- JAVA问题总结之7--Pow、sin、sqrt、abs等常用数学函数调用
- 练习4-6 给计算机程序增加处理变量的命令(提供26个具有单个英文字母变量名的变量很容易)。增加一个变量存放最近打印的值
- sin与cos的求法
- pow和exp
- 指针练习-简易计算器程序
- 指针练习-简易计算器程序
- 给图片按钮等增加渲染的效果
- 编写了一个计算器小程序,作为栈的练习
- 给新进组员的练习程序
- 给新进组员的练习程序
- sin ( )【C语言库函数源代码】
- 数据库exp的操作
- 16.3求sin值的程序
- java爬虫(Jsoup爬取龙腾网)第一页信息
- Top K问题
- C# FTP操作
- keil开发环境增加Gnu扩展
- Swift学习之四:类型别名(Type Aliases)
- 练习4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。
- 【ROS Gazebo专题】二、Gazebo的使用上
- 框架的初识
- python numpy 部分排序 寻找最大的前几个数
- Volocity使用总结
- Hadoop中HDFS常用命令
- net模式先连接虚拟机
- PPT动画教程:修改幻灯片母板
- Dialog的使用与总结