- 浏览: 70313 次
- 性别:
- 来自: 大连
最近访客 更多访客>>
最新评论
-
newlangwen1:
你好 我想请教个问题,我运行了一下上面的程序,结果是输入什么就 ...
C程序 对文本行进行排序
在该程序中加入了取模(%)运算符,并对负数进行处理
#include <stdio.h> #include <stdlib.h> /* for atof() */ #include <ctype.h> #define MAXOP 100 /* max size of operand or operator */ #define NUMBER '0' /* signal that a number was found */ #define MAXVAL 100 /* maximum depth of val stack */ #define BUFSIZE 100 int getop(char []); void push(double); double pop(void); int getch(void); void ungetch(int); int sp = 0; /* next free stack position */ double val[MAXVAL]; /* value stack */ char buf[BUFSIZE]; /* buffer for ungetch */ int bufp = 0; /* next free position in buf */ int main(void) { int type; double op2; char s[MAXOP]; int flag = true; //??从键盘输入的内容,是以' '为单位,依次从缓存读入到数组s[], //又由getop(s[])从s中读出,返回给type. //例如,从键盘输入 -2 1 + //数组s的几个不同的状态分别是: //s[0]='-' s[1]='2' s[2]='\n'(即10) //s[0]='1' s[2]='\n' //s[0]='+' s[2]='\n' while((type = getop(s)) != EOF) { switch(type) { case NUMBER: push(atof(s)); break; case '+': double a; double b; a=pop(); b=pop(); push(a+b); 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(); if(op2) push((int)pop()%(int)op2); else printf("\nError: Division by zero!"); break; case '\n': printf("\t%.8g\n", pop()); break; default: printf("error: unknown command %s\n", s); break; } } return EXIT_SUCCESS; } void push(double f) { if (sp < MAXVAL) val[sp++] = f; else printf("error: stack full, can't push %g\n", f); } /* pop: pop and return top value from stack */ double pop(void) { if (sp > 0) return val[--sp]; else { printf("error: stack empty\n"); return 0.0; } } int getop(char s[]) { #define PERIOD '.' int i = 0; int c; int next; /* Skip whitespace */ while((s[0] = c = getch()) == ' ' || c == '\t') ; s[1] = '\0'; /* Not a number but may contain a unary minus. */ if(!isdigit(c) && c != PERIOD && c != '-') return c; if(c == '-') //如果当前读入的c是'-' { next = getch(); //判断下一个输入字符next if(!isdigit(next) && next != PERIOD) { return c; //如果next不是数字并且不是小数点,则c为操作符 } c = next; //否则,既next是数字 } else { c = getch(); } /*收集整数部分*/ while(isdigit(s[++i] = c)) //则把c保存到数组s[]中 c = getch(); if(c == PERIOD) /* 收集小数部分*/ while(isdigit(s[++i] = c = getch())) ; s[i] = '\0'; if(c != EOF) ungetch(c); return NUMBER; } int getch(void) /* get a (possibly pushed-back) character */ { return (bufp > 0) ? buf[--bufp] : getchar(); } void ungetch(int c) /* push character back on input */ { if (bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }
发表评论
-
C程序 声明与定义的区别
2010-07-30 15:34 1301http://zhidao.baidu.com/questio ... -
C语言 函数指针 与 指针函数
2010-07-30 10:27 905指针函数是返回指针的函数,即本质是一个函数。函数返回类型是某一 ... -
C程序 命令行参数
2010-07-30 09:34 669echo.cpp #include <stdi ... -
C程序 整型数按位取反 输出结果
2010-07-29 15:16 1313#include <stdio.h> int m ... -
C程序 对文本行进行排序
2010-07-26 09:30 992#include <stdio.h> #incl ... -
C语言:malloc()函数与alloc()函数
2010-07-24 10:02 905C语言跟内存分配方式 ... -
C程序设计语言(第二版) 5-4 strend(s,t)
2010-07-23 16:29 1459strend(s,t) 如果字符串t出现在字符串s的尾部,该函 ... -
C程序设计语言(第二版) 5-3 编写strcat()
2010-07-23 16:02 795#include<stdio.h> void ... -
C程序 关于字符串的问题
2010-07-23 15:47 669#include<stdio.h> void ... -
C程序设计语言(第二版)5-2
2010-07-22 17:13 671#include <ctype.h> #incl ... -
C程序设计语言(第二版) 4-14
2010-07-22 11:47 848定义宏swap(t, x, y)以交换t类型的两个参数 ... -
C程序设计语言(第二版) 4-13 递归版本reverse()将字符串倒置输出
2010-07-22 11:18 995编写一个递归版本的reverse()函数,将字符串倒置 ... -
C程序设计语言(第二版) 4-12
2010-07-22 10:29 1018运用printd函数的设计思想编写一个递归版本的itoa函数, ... -
C程序 递归小例子 快速排序
2010-07-22 09:26 916从执行速度来讲,下列版本的快速排序可能不是最快的,但是它是最简 ... -
C程序 递归实现将数字作为字符串输出
2010-07-21 15:47 1264将一个数字作为字符串打印的情况,数字是反序生成的:低位数字先于 ... -
C语言学习之变量存储
2010-07-21 15:14 864http://zhidao.baidu.com/questio ... -
C语言外部变量的使用以及extern的用法
2010-07-21 15:11 2189http://hi.baidu.com/%C3%E2%B7%D ... -
C语言 全局变量和局部变量
2010-07-21 15:07 1425http://hi.baidu.com/%C3%E2%B7%D ... -
C语言 extern
2010-07-21 11:20 1094在头文件中声明函数时,前面的extern可有可无,只要这些函数 ... -
C程序设计语言(第二版) 4-8 最多只压回 一个字符
2010-07-20 18:47 757#include <stdio.h> i ...
相关推荐
逆波兰计算器 C语言源代码 逆波兰计算器 C语言源代码
一个用栈实现的逆波兰算法,输入逆波兰表达式,可以算出值
这是我在大一下学期结束时做的课程设计,能力有限,是控制台版的 代码看起来有点不伦不类,是因为要求用c++写,我先用c写的,然后改了下头文件和函数,但是完全可以用 当时是用的vs2010编译的,有些代码可能不通用。...
逆波兰计算器程序代码这种表示法用在某些袖珍计算器及某些语言中),允许使用26个具有单个大写英文字母变量名的变量,允许对最近计算的结果进行引用(使用某特定的名字,比如小写字母v或?)。
逆波兰计算器的设计与实现.doc逆波兰计算器的设计与实现.doc逆波兰计算器的设计与实现.doc
这是一个支持浮点数计算的计算器,主要运用了逆波兰法的方式,输入中辍表达式即可计算,有容错机制,比如--,**,-)等等错误输入方式的容错,还有输入字母的容错
逆波兰计算器是一种比较好的计算器,不管不复杂的式子都可以不用括号进行表达
基于vs2013 c语言实现逆波兰计算器,能处理简单的加减乘除和三角函数等,并可以在框架的基础上扩展。同时具备变量处理能力。
====================== 逆波兰计算器实验代码 =====================
这个是用后序输入,对于输入的式子进行计算,功能很强大,感觉不错,所以与大家分享
该工程是使用C语言在devc++平台上实现的逆波兰式计算器,需要用到dev打开,如果用vs需要自己设置头文件
mfc下制作的计算器,能实现四则运算与括号处理,还能实现进制转换。
用中缀表达式计算 。
用逆波兰表达式写的一个计算器,界面不怎么样但是可以手动输入算式可以自己添加运算符
基于VS和MFC的计算器,拥有良好图像界面,实现多位数,多项式数值计算
包括表达式容错处理,正常的数的加减乘除,
学习YACC(BISON)的语法结构,编写YACC(BISON)程序,生成能够分析和计算逆波兰表达式,构建逆波兰计算器。根据提示,在右侧编辑器补充代码,实现加法(+)、减法(-)、乘法(*)、除法(/)、乘方(^)以及取负运算(n)。
基于VB的逆波兰计算器,计算时可显示出逆波兰的转换式
主要是用堆栈实现逆波兰计算器,对于初学者来说是不错的资源
逆波兰式完整代码计算器,带注释可直接运行VS2013,测试数据"1.0+3/2-tan(45)/(1+1)",