本文介绍: 【代码】C //练习 4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。有关这些库函数的详细信息,参见附录B.4节中的头文件。
C程序设计语言 (第二版) 练习 4-5
练习 4-5 给计算器程序增加访问sin、exp与pow等库函数的操作。有关这些库函数的详细信息,参见附录B.4节中的头文件<math.h>。
注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010
代码块:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#include <string.h>
#define MAXOP 100
#define NUMBER '0'
#define MAXVAL 100
#define BUFSIZE 100
int sp = 0;
double val[MAXVAL];
char buf[BUFSIZE];
int bufp = 0;
void push(double f){
if(sp < MAXVAL){
val[sp++] = f;
}
else{
printf("Error! Stack Full, can't push %gn", f);
}
}
double pop(void){
if(sp > 0){
return val[--sp];
}
else{
printf("Error! Stack Empty!n");
return 0.0;
}
}
void printTop(void){
if(sp > 0){
printf("Top: %gn", val[sp-1]);
}
else{
printf("Error! Stack Empty!n");
}
}
void topCopy(void){
if(sp > 0 || sp < MAXVAL){
val[sp++] = val[sp-1];
}
else if(sp <= 0){
printf("Error! Stack Empty!n");
}
else{
printf("Error! Stack Full!n");
}
}
void swapTop(void){
double temp;
if(sp >= 2){
temp = val[sp-1];
val[sp-1] = val[sp-2];
val[sp-2] = temp;
}
else{
printf("Can't Swap Top Number!n");
}
}
void emptyStack(void){
for(int i = sp - 1; i >= 0; i--){
val[i] = 0;
}
sp = 0;
}
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;
}
}
int getop(char s[]){
int i, c;
while((s[0] = c = getch()) == ' ' || c == 't')
;
s[1] = '';
if(c == 's'){
int next1 = getch();
int next2 = getch();
if(next1 == 'i' && next2 == 'n'){
return c;
}
}
if(c == 'e'){
int next1 = getch();
int next2 = getch();
if(next1 == 'x' && next2 == 'p'){
return c;
}
}
if(c == 'p'){
int next1 = getch();
int next2 = getch();
if(next1 == 'o' && next2 == 'w'){
return c;
}
}
if(c == '-'){
int next = getch();
if(!isdigit(next) && next != '.'){
ungetch(next);
return c;
}
s[1] = c = next;
i = 1;
}
else{
i = 0;
if(!isdigit(c) && c != '.'){
return c;
}
}
if(isdigit(c)){
while(isdigit(s[++i] = c = getch()))
;
}
if(c == '.'){
while(isdigit(s[++i] = c = getch()))
;
}
s[i] = '';
if(c != EOF){
ungetch(c);
}
return NUMBER;
}
int 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();
push(pop() - op2);
break;
case '/':
op2 = pop();
if(op2 != 0.0){
push(pop() / op2);
}
else{
printf("Error! Zero Divisor!n");
}
break;
case '%':
op2 = pop();
push((int)pop() % (int)op2);
break;
case 's':
op2 = pop();
push(sin(op2));
break;
case 'e':
op2 = pop();
push(exp(op2));
break;
case 'p':
op2 = pop();
push(pow(pop(), op2));
break;
case 'n':
printf("t%.8gn", pop());
break;
default:
printf("Error! Unknown Command %sn", s);
break;
}
}
system("pause");
return 0;
}
原文地址:https://blog.csdn.net/navicheung/article/details/135496925
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_55620.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。