寒假作业1编程题

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10224
这个作业的目标 写一份代码,实现简单的汉字输入输出
作业正文 https://www.cnblogs.com/cyn522/p/12234543.html
其他参考文献 ...
编程题(请使用C语言或者C++完成以下题目):

中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。

编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包

样例
输入:

整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包

输出:

注意:

输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十 。
编程题要求:

1、读题,提取出题目的要求。
2、分解需求,把需求分解为几个你觉得不太相关的模块。
3、思考每个模块怎么写,可以从简单的模块开始写。
4、对于不会的问题进行查阅资料。
5、对于每一个模块设计测试用例。
6、详细记录下以上每一步,并写在博客中。
7、不要求完全做出来,但要求记录详细。
8、建议博客长度不少于1000字(不包含代码)。

思考:
拿到题目,发现题目主要实现汉字的数字运算,由于在“注意”中有提到GBK编码,去看了一下,发现不怎么会用,所以目前暂时不考虑。接着发现题目中的运算数字是十以内的数字,降低了难度,但我在编写代码的过程中将数字范围取到了二十以内,将运算后的结果取到了一千以内。(在实际运行中,发现不论输入的数是多少,汉字转数字返回值均为一,由于暂时还没解决此问题,故将数字范围改为十以内。)
在写的过程中,刚开始只输入一个字符串“整数 钱包 等于 零”,想要通过某种办法只截取字符串中所需要的一段,百度之后得到了“memcpy函数”,但是在实际操作中发现,我的使用方法不能让我得到我要的结果,于是我改成将一句话中出现的每个词语都用一个字符串来实现。
在输入上,考虑到可以有连续的多次运算,我用了一个循环,以“EOF”终止循环。其中在循环体用变量m记录最后终止时i的大小,即可得出输入多少条运算指令。(注意:记得输出“看看 钱包”这条指令)(在实际运行中,由于字符串不能以EOF结束,所以改为输入“看看 钱包”指令时停止输入,因为运算指令有三个字符串,所以将“看看 钱包”指令改为“看看 钱包 钱”指令,否则无法结束输入。)
在运算上,首先我考虑的是先判断指令中是“增加”还是“减少”,这里我用的是字符串的比较函数,通过该函数来确定运算符。接着在数字上,我通过自己编写一个函数来判断数字内容,并将其转化为阿拉伯数字返回,便于运算。函数中确定数字的方法还是用字符串的比较函数来实现,因为将数字的范围设定在二十以内,所以还不算特别麻烦。(目前还没想到更简便的方法)
在输出上,先判断所得到的数字是否是负数,如果是负数直接输出“您已负债”,如果恰好为零输出“当前余额为零”,如果是正数转为汉字后输出。(后来意识到恰好为零可以直接输出零,就把结果的情况只分为两种。)
在转汉字的过程中,分为二十以内,一百以内(不包括一百),一千以内(不包括一千)三种情况。二十以内用switch比较后输出;一百以内,先判断是否为十的整数倍,若不是则判断出十位上和个位上的数字后输出;一千以内,先判断是否为一百的整数倍,若不是则判断是否为十的整数倍,若是则判断百位上和十位上的数字后输出,若不是则判断百位,十位和各位上的数字后输出(在这种情况下要特别注意类似101-109这样范围里的数)。

在写代码时分为这几个部分:输入,运算,输出。
运算中主要识别增加、减少两种情况和汉字转数字的运算(实际写的时候将输入和运算放在一起)



输出中分为二十以内,一百以内(不包括一百),一千以内(不包括一千)三种情况。
二十以内:

一百以内:


一千以内:


小结:
①结果为负数和非负数的两种情况


②开始时,钱包里的数不为零的情况

③结果为二十至一百的两种情况(不包括一百)(二十以内的情况见①②)


④结果为一百至一千的三种情况(不包括一千)


完整代码:







个人想法:
题目中出现整数,那么与之相对应应该还有小数的情况;有钱包,那么还可以有其他可以存放金钱的物品,包括储蓄罐,储蓄卡,收银台等;有加、减,那么还可以有乘除;输入的终止应该还有更合适的方法(暂时还没想到);汉字转数字有考虑过GBK编码,但是GBK编码是按照汉字读音编码,与ASCII有所不同,暂时还没想到要怎么用。

posted @ 2020-01-26 18:06  沐沐Y  阅读(119)  评论(0编辑  收藏  举报