后缀表达式求值、字符转数字

题目:从键盘上输入一个逆波兰表达式,用伪代码写出其求值程序。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+-*/四种运算。

分析:从键盘端输入,则进行运算前需将操作数转化为数字
        将a='1'转为数字1:a='1'-'0'
        将b='12'转为数字12: b=a*10+'2'-'0'
        将c='1.2'转为数字1.2:c=b/10.0  也可以是:c=a+('2'-'0')/10.0 

float expr(){
	float OPND[30];	//操作数栈
	init(OPND);	//初始化栈
	float num=0.0;
	scanf("%c",&x);			//x是字符型变量
	while(x != '$'){
		switch(x){
			
			case '0'<=x<='9':
					while((x>='0' && x<='9') || x=='.')	//拼数
						if(x!='.'){		//处理整数 
							num=num*10+(ord(x) - ord('0'));	//ord()返回编码对应字符
							scanf("%c",&x);
						} 
						else{		//处理小数部分
							 scale=10.0;	//实现小数点位移
							 scanf("%c",&x);
							 while(x>='0' && x<='9') {
							 	num=num+(ord(x) - ord('0'))/scale;
							 	scale=scale*10;
							 	scanf("%c",&x);
							 }
									
						}//else 
					push(OPND,num);	//压入栈
					num=0.0;	//下个数初始化
				//	break;		不能加break语句,因为此时需要对新读入的字符进行’+-*/'判断
				 
			case x='':break;	//遇空格,继续读下一个字符
			case x='+':	push(OPND,pop(OPND)+pop(OPND));break;
			case x='-':	x1=pop(OPND);x2=pop(OPND);push(OPND,x2-x1);break;	//减法和除法需注意,是后出来的操作数-先出来的操作数 
			case x='*':	push(OPND,pop(OPND)*pop(OPND));break;
			case x='/': x1=pop(OPND);x2=pop(OPND);push(OPND,x2/x1);break;
			default:   //其他符号不作处理 
						
		}//switch
		scanf("%c",&x);	//读入表达式中的下一个字符 
	}  //while
	printf("后缀表达式的值为%f",pop(OPND););
} 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值