MOOC清华《程序设计基础》第9章第1题:模拟汇编语言编译器

题目描述

从命令行读入若干指令,执行相应计算。

指令     格式        意义
  SET     SET x      设置运算结果为x
  ADD     ADD x      运算结果+x
  SUB     SUB x      运算结果-x
  MUL     MUL x      运算结果*x
  DIV     DIV x      运算结果/x
  OUT     OUT        输出运算结果并换行,结果保留2位小数

上述指令的参数x都为浮点数,且保证不会除以0。

输入格式

第一行为测试样例个数n,后面接n行测试数据,每一行包含若干指令,指令间空格隔开

输出格式

输出结果并换行,保留两位小数

样例输入

2
SET 2.5 MUL 2 SUB 1 OUT
SET 3 DIV 3 OUT
样例输出

4.00
1.00

#include <iostream>
#include <cstring>
#include <iomanip> 
using namespace std;

int main()
{
	int n;
	char ch[4] = {0};
	double result[10] = {0}, x = 0, tmp = 0;
	int i = 0;
	cin >> n;
	while(i < n)
	{
		cin >> ch;
		if((cin.get() == '\n') && (strcmp(ch, "OUT") == 0))
		{
			result[i] = tmp;
			i++;
			tmp = 0;
		}
		else
			cin >> x;
		if(strcmp(ch, "SET") == 0)
			tmp = x;
		else if(strcmp(ch, "ADD") == 0)
				tmp += x;
			else if(strcmp(ch, "SUB") == 0)
					tmp -= x;
				else if(strcmp(ch, "MUL") == 0)
						tmp *= x;
					else if(strcmp(ch, "DIV") == 0)
							tmp /= x;
	}
	for(i = 0; i < n; i++)
		cout << fixed << setprecision(2) << result[i] << endl;
	return 0;
}

奇怪的是上述代码在学堂在线OJ中却通不过评定,满分3分的这一题,得分居然为0 !

经修改,按以下代码输入OJ可得 1 分:

#include <iostream>
#include <cstring>
#include <iomanip> 
using namespace std;

int main()
{
	int n;
	char ch[4] = {0};
	double result[10] = {0}, x = 0, tmp = 0;
	int i = 0;
	cin >> n;
	while(i < n)
	{
		cin >> ch;
		if(cin.get() != '\n')
			cin >> x;
		if(strcmp(ch, "SET") == 0)
			tmp = x;
		else if(strcmp(ch, "ADD") == 0)
				tmp += x;
			else if(strcmp(ch, "SUB") == 0)
					tmp -= x;
				else if(strcmp(ch, "MUL") == 0)
						tmp *= x;
					else if(strcmp(ch, "DIV") == 0)
							tmp /= x;
						else if(strcmp(ch, "OUT") == 0)
							{
								result[i] = tmp;
								i++;
								tmp = 0;
							}
	}
	for(i = 0; i < n; i++)
		cout << fixed << setprecision(2) << result[i] << endl;
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值