第八届蓝桥杯国赛C++A组 表达式计算

本文介绍了一个简化版的表达式解析器,仅处理加法和乘法操作,适用于正整数输入,无括号优先级。通过三个函数f3、f2和f分别处理数字读取、乘法和加法,实现对表达式的逐步解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:表达式计算

虽然我们学了许久的程序设计,但对于简单的四则混合运算式,如果让我们完全白手起家地编程来解析,还是有点棘手。

这里,我们简化一下问题,假设只有加法和乘法,并且没有括号来改变优先级。
再假设参加运算的都是正整数。

在这么多的限制条件下,表达式的解析似乎简单了许多。
下面的代码解决了这个问题。请仔细阅读源码,并填写划线部分缺少的代码。

#include <stdio.h>

int f3(const char* s, int begin, int end)
{
	int sum = 0;
	int i;
	for(i=begin; i<end; i++){
		if(s[i]==' ') continue;
		sum = sum * 10 + (s[i]-'0');
	}
	return sum;
}

int f2(const char* s, int begin, int end)
{
	int p = begin;
	int pro = 1;
	while(1){
		int p0 = p;
		while(p!=end && s[p]!='*') p++;
		pro *= _______________________________;  //填空
		if(p==end) break; 
		p++;
	}
	printf("f2: pro=%d\n", pro);
	return pro;
}

int f(const char* s)
{
	int p = 0;
	int sum = 0;
	while(1){
		int p0 = p;
		while(s[p]!=0 && s[p]!='+') p++;
		sum += f2(s,p0,p);
		if(s[p]==0) break;
		p++;
	}
	
	return sum;
}

int main()
{
	int x = f("12+18+5*4*3+10");
	printf("%d\n", x);
	return 0;
}

注意:只填写划线处缺少的内容,不要填写已有的代码或符号,也不要填写任何解释说明文字等。

 

答案:f3(s,p0,p)

思路:大概是因为学过了编译原理,这个题一看就秒出答案_(:з」∠)_ 函数f处理+,函数f2处理*,函数f3处理数字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值