关键词:
第一步: 像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”, 分别满足下面的各种需求。下面这些需求都可以用命令行参数的形式来指定:
a) 除了整数以外,还要支持真分数的四则运算。 (例如: 1/6 + 1/8 = 7/24)
b) 让程序能接受用户输入答案,并判定对错。 最后给出总共 对/错 的数量。
c) 逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目 (最多 10 个运算符,括号的数量不限制):
我们首先的想法是将整数和分数统一,建立一个数类number。它包含分子和分母,当数是整数的时候,分母为1,这样便于后面运算的进行。这样我们就减少了一种除法运算,只剩下加法、减法和乘法。我们定义在类中的公有函数里。这样以后我们计算的单位就变成了类。
class number{ private: int numerator;//分子 int denominator;//分母 public: number(){} number(int a){ numerator = a; denominator = 1; } number(int a, int b){ numerator = a; denominator = b; } void prin_number(){ if (numerator == 0) { printf("0"); } else{ if (denominator == 1){ printf("%d", numerator); } else{ printf("%d/%d", numerator, denominator); } } } number plus(number n1, number n2){ number re; int divisor;//最大公约数 re.denominator = n1.denominator * n2.denominator; re.numerator = n1.numerator * n2.denominator + n2.numerator * n1.denominator; divisor = greatest_common_divisor(re.denominator, re.numerator); re.denominator = re.denominator / divisor; re.numerator = re.numerator / divisor; return re; } number minus(number n1, number n2){ number re; int divisor;//最大公约数 re.denominator = n1.denominator * n2.denominator; re.numerator = n1.numerator * n2.denominator - n2.numerator * n1.denominator; if (re.numerator != 0){ divisor = greatest_common_divisor(re.denominator, re.numerator); re.denominator = re.denominator / divisor; re.numerator = re.numerator / divisor; } return re; } number mul(number n1, number n2){ number re; int divisor;//最大公约数 re.denominator = n1.denominator * n2.denominator; re.numerator = n1.numerator * n2.numerator; if (re.numerator != 0){ divisor = greatest_common_divisor(re.denominator, re.numerator); re.denominator = re.denominator / divisor; re.numerator = re.numerator / divisor; } return re; } };
定义了类以后,我们知道四则运算的符号特别的多,于是我们这时候要使用“栈”这种数据结构。下面是“栈”数据结构的基本函数。
#include"stdafx.h" #include"iostream" using namespace std; #include"Caculating.h" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define ERROR 0 #define OK 1 #define OVERFLOW -2 typedef number Status; typedef char SElemType; typedef struct{ SElemType * base; SElemType * top; SElemType stacksize; }SqStack; Status InitStack(SqStack & S){ S.base = new SElemType[STACK_INIT_SIZE]; if (!S.base){ return ERROR; } S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } Status GetTop(SqStack S, SElemType &e){ if (S.top == S.base)return ERROR; e = *(S.top - 1); return OK; } Status Push(SqStack & S, SElemType e){ if (S.top - S.base >= S.stacksize){ S.base = new SElemType[STACK_INIT_SIZE + STACKINCREMENT]; if (!S.base)return OVERFLOW; S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; return OK; } Status Pop(SqStack & S){ SElemType e; if (S.top == S.base)return ERROR; e = *--S.top; return e; } Status Print(SqStack S){ SElemType *p = S.top; while (p != S.base){ cout << *--p; } cout << endl; return OK; } Status Destroy(SqStack &S){ delete S.base; S.top = NULL; S.base = NULL; S.stacksize = 0; return OK; }
之后我们要借助两个栈来进行运算,一个栈是数栈,另一个是符号栈。这时,我们首先要定义符号的优先级。
int Judgement(char ch){ switch (ch){ case‘#‘:return 0; break; case‘+‘:case‘-‘:return 1; break; case‘*‘:return 2; break; case‘/‘:return 3; break; case‘)‘:return 4; break; case‘(‘:return 5; break; default:return 6; break; } }
现代软件工程第一章概论第2题——孙雪莹(还未完成)
2. 软件有很多种,也有各种分类办法: ShrinkWrap(在包装盒子里面的软件,软件在软盘/CD/DVD上); WebAPP(基于网页的软件); InternalSoftware(企业或学校或某组织内部的软件); &n... 查看详情
现代软件工程第一章概论第4题——张功
第4题:Dijkstra曾经提到:“Softwareengineering,ofcourse,presentsitselfasanotherworthycause,butthatiseyewash:ifyoucarefullyreaditsliteratureandanalysewhatitsdevoteesactuallydo,youwilldiscoverthatsoftwaree 查看详情
现代软件工程第一章概论第10题——张功
10.Software, SoftwareEngineering,waterfall(瀑布模型),CodeComplete,...等名词的来源http://en.wikipedia.org/wiki/John_Tukey请问“软件”,“软件工程”,瀑布模型,CodeComplete,AgileMethodology这些词汇是如何出现的-何时 查看详情
现代软件工程第一章概论第13题——张功
13.这么多作业,似乎压力很大啊!请看TED的演讲,谈谈你对压力的看法,以及怎么和别人合作,帮助别人,把压力转化为动力,在互相帮助的环境中成长。 我们可以将压力看作生命的一部分,我们接受来自... 查看详情
现代软件工程第一章概论第1题——邓琨
题目要求:第一步: 像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行“软件”,分别满足下面的各种需求。下面这些需求都可以用命令行参数的形式来指定: a)除了整数以外,还要支持真分... 查看详情
现代软件工程第一章概论习题第1题李艳薇
实现自动出题功能:程序并没有实现全部要求,后续将会继续改进。 实现结果:程序代码:#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<time.h>usingnamespacestd;#defineN100boolcreateP 查看详情
现代软件工程第一章概论第12题——原旭莹
12.我们不是在真空里谈软件工程,软件要运行在硬件芯片上面,下面看看一个计算机芯片的发展历史http://perspectives.mvdirona.com/2014/09/august-21-2014-computer-history-museum-presentation/http://mvdirona.com/jrh/TalksAndPapers/DileepBhandarkarAmazin 查看详情
现代软件工程第一章概论第11-15题(白文俊)
...oftwareEngineering等名词的来源,请问“软件”和“软件工程”这些词汇是如何出现的-何时、何地、何人在看过给的链接原文之后我得出这样的结论:”software”即“软件”这一名词的使用最早是在1953年8月... 查看详情
现代软件工程第一章概论第6题——原旭莹
...火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么?请大家讨论。 我认为这些软件的合法性是存在一定问题的,也并不符合道 查看详情
现代软件工程第一章概论第3题——张晓丽
第3题目前流行的源程序版本管理软件和项目管理软件都有哪些,各有什么优缺点?参照http://www.cnblogs.com/WJ1234/p/5285595.html http://www.360doc.com/content/12/0712/11/4565_223745448.shtml1、Microsoft TFS的优缺点:优点:是对敏捷,m... 查看详情
现代软件工程第一章概论第4题——邓琨
...,这并不叫会写程序,只能说是管中窥豹,略见一斑。而软件工程是从宏观和微观两个角度教一个人怎么写程序。一是教怎么使用程序语言,怎么设计算法,怎么通过使用语句的组合构成一个可运行的程序;另一方面是怎么进行... 查看详情
现代软件工程第一章概论第9题——邓琨
我采访了一只开发了天津8890便民服务网站系统的团队。 -当时的项目有多少用户,给用户多少价值?现在还有人用吗?答:当时项目有近万用户,为天津市民提供便民服务平台,例如联系修理家电、水电气、咨询服务、中... 查看详情
现代软件工程第一章概论第14题——张晓丽
14、开发软件有很多种方式,从软件运行的平台来看,可以在下面的平台运行:网页(只要有浏览器就可以访问软件或服务)Windows平台(例如最新的Windows10支持PC,Surface,Mobile,甚至Xbox运行)安卓平台iOS平台(Mac和iPhone)请找一... 查看详情
现代软件工程第一章概论第7题——张星星
综合多方面考虑,我认为,”中文编程”并不是一个”银弹”,并不能提高中国程序员的编程效率。 首先,中文编程指的是使用中文书写关键字,如类名、函数名、变量名、常量名等。对编程语言来说,语... 查看详情
现代软件工程第一章概论练习与讨论——范鹏宸(371113)
第三题问题描述: 上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些,各有什么优缺点?答:目前流行的原程序版本管理软件和项目管理软件有MicrosoftTFS、GitHub、Trac、Bugzilla、Rationale,AppleXCode这几种比... 查看详情
现代软件工程第7-9章作业第3题--原旭莹
3.尝试把四则运算软件需求进行分解,变为每个小组成员可执行的积压工作项,分配这些工作项到小组成员,并预算完成时间(以小时为单位)。并在完成后填入实际用时。经小组成员讨论,并结合个人能力,小组成员任务分配... 查看详情
现代软件工程第一章概论练习与讨论
题目1解答:开发环境选择的是c++,开发工具使用的是Visualc++6.0。首先,先完成一个最简单的工能,随机产生一个只有两个操作数一个运算符的式子,接受输入并判断输入答案是否正确:代码如下:#include<iostream.h>#include<std... 查看详情
现代软件工程第一章概论练习与讨论
1、像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的“软件”,和同学们比较一下各自程序的功能、实现方法的异同等等。(苏志华)7、有人认为,"中文编程",是解决中国程序员编程效率一个秘密武器,请... 查看详情