要求支持sin、exp、pow等库函数,首先要从输入中识别出他们。
在之前的基础上增加字母为字符数组判别选项,累计字母字符串,再通过string.h提供的库函数,确认输入是否为exp等库函数操作。比较两个字符串相等是通过strcmp和strlen两个函数实现的,前者只能返回一个字符串包含另一个的情况,再通过比较两个字符串的长度是否相等实现其完全相等与否的判别。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAXOP 100
#define NUMBER '0'
#define CHARACTOR '1'
int getop(char[]);
void push(double);
double copy(double); /* 复制栈顶元素 */
void print(void); /* 打印栈顶元素 */
void exchange(void); /* 交换栈顶两个元素 */
void exclude(void); /* 清空栈 */
double pop(void);
/* 逆波兰计算器,实现了对负数的支持,实现了对exp、pow、sin等库函数的支持 */
main() {
int type;
double op2;
char s[MAXOP];
while((type=getop(s)) != EOF) {
switch (type) {
case NUMBER:
push(atof(s));
break;
case '+':
push(pop()+pop());
break;
case '*':
push(pop()*pop());
break;
case '/':
op2=pop();
if(op2==0.0)
printf("error: zero divesor\n");
else