这个作业属于哪个课程 | 2020面向对象程序设计张栋班 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业1 |
这个作业的目标 | 用C语言或者C++完成编程题目 |
作业正文 | 编程题 |
其他参考文献 |
编程题目
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
----------------------------------------------------------------------------------------------------------------------------------
分析题目要求
1输入的只有文字和空格两种,输出的是汉字。
2输入有按照一定语法规则,即先描述钱包里原先有多少钱,再描述增加多少,减少多少,最后输入“看看 钱包”(还好有规则)
3文字有几种类型:(1)整数,钱包,看看(2)数字(3)等于,增加,减少
4数字只涉及零一二三四五六七八九十
拆解步骤
1因为输入涉及到汉字,故一开始想到用字符来记录文字,经过尝试发现应该用字符串来记录汉字。
char d[2],g[2],j[2],l[2];
gets(d);gets(g);gets(j);gets(l);
2考虑怎样将输入的汉字转化为数字计算?运用strcmp来比较字符串
if(strcmp(d,"整数 钱包 等于 零")==0)sum=0;
if(strcmp(d,"整数 钱包 等于 一")==0)sum=1;
if(strcmp(d,"整数 钱包 等于 二")==0)sum=2;
if(strcmp(d,"整数 钱包 等于 三")==0)sum=3;
if(strcmp(d,"整数 钱包 等于 四")==0)sum=4;
if(strcmp(d,"整数 钱包 等于 五")==0)sum=5;
if(strcmp(d,"整数 钱包 等于 六")==0)sum=6;
if(strcmp(d,"整数 钱包 等于 七")==0)sum=7;
if(strcmp(d,"整数 钱包 等于 八")==0)sum=8;
if(strcmp(d,"整数 钱包 等于 九")==0)sum=9;
if(strcmp(d,"整数 钱包 等于 十")==0)sum=10;
3钱的加法减法用同样的方法比较
if(strcmp(g,"钱包 增加 零")==0) sum=sum+0;
if(strcmp(g,"钱包 增加 一")==0) sum=sum+1;
if(strcmp(g,"钱包 增加 二")==0) sum=sum+2;
if(strcmp(g,"钱包 增加 三")==0) sum=sum+3;
if(strcmp(g,"钱包 增加 四")==0) sum=sum+4;
if(strcmp(g,"钱包 增加 五")==0) sum=sum+5;
if(strcmp(g,"钱包 增加 六")==0) sum=sum+6;
if(strcmp(g,"钱包 增加 七")==0) sum=sum+7;
if(strcmp(g,"钱包 增加 八")==0) sum=sum+8;
if(strcmp(g,"钱包 增加 九")==0) sum=sum+9;
if(strcmp(g,"钱包 增加 十")==0) sum=sum+10;
if(strcmp(j,"钱包 减少 零")==0) sum=sum-0;
if(strcmp(j,"钱包 减少 一")==0) sum=sum-1;
if(strcmp(j,"钱包 减少 二")==0) sum=sum-2;
if(strcmp(j,"钱包 减少 三")==0) sum=sum-3;
if(strcmp(j,"钱包 减少 四")==0) sum=sum-4;
if(strcmp(j,"钱包 减少 五")==0) sum=sum-5;
if(strcmp(j,"钱包 减少 六")==0) sum=sum-6;
if(strcmp(j,"钱包 减少 七")==0) sum=sum-7;
if(strcmp(j,"钱包 减少 八")==0) sum=sum-8;
if(strcmp(j,"钱包 减少 九")==0) sum=sum-9;
if(strcmp(j,"钱包 减少 十")==0) sum=sum-10;
4最后的出的结果同样也可以用strcmp来转化输出。
if(sum==0) printf("零");
else if(sum==1) printf("一");
else if(sum==2) printf("二");
else if(sum==3) printf("三");
else if(sum==4) printf("四");
else if(sum==5) printf("五");
else if(sum==6) printf("六");
else if(sum==7) printf("七");
else if(sum==8) printf("八");
else if(sum==9) printf("九");
else if(sum==10) printf("十");
else if(sum==11) printf("十一");
else if(sum==12) printf("十二");
else if(sum==13) printf("十三");
else if(sum==14) printf("十四");
else if(sum==15) printf("十五");
else if(sum==16) printf("十六");
else if(sum==17) printf("十七");
else if(sum==18) printf("十八");
else if(sum==19) printf("十九");
else if(sum==20) printf("二十");
测试
1输入:
整数 钱包 等于 五
钱包 增加 三
钱包 减少 二
看看 钱包
输出:六
2输入:
整数 钱包 等于 五
钱包 增加 零
钱包 减少 二
看看 钱包
输出:三
出现的问题
1没有考虑钱为负数的情况要输出什么
解决方法:加入语句else printf(“error”);
输入:
整数 钱包 等于 五十
钱包 增加 一
钱包 减少 九
看看 钱包
输出error
2个人理解的题目中的语法限制了输入只有四行,但是假如输入出现多次增加怎么解决?(暂时没有找到解决方法)
3最后一行假如输入“看看 钱”之类不符合语法的语句,不会提示错误。
解决方法:加入判断语句判断输入是否符合语法。
输入:
整数 钱包 等于 五
钱包 增加 五
钱包 减少 九
看看 钱
输出error
4一开始只考虑出现的数最大的为十,此时钱包中的数是二十。假如出现大于十的数或钱包初始值大于十,就会输出“error”,无法解决问题。(暂时没有找到解决方法)
完整代码如下:
#include<stdio.h>
#include<string.h>
int main(){
int sum;
char d[2],g[2],j[2],l[2];
gets(d);gets(g);gets(j);gets(l);
if(strcmp(d,"整数 钱包 等于 零")==0) sum=0;
if(strcmp(d,"整数 钱包 等于 一")==0) sum=1;
if(strcmp(d,"整数 钱包 等于 二")==0) sum=2;
if(strcmp(d,"整数 钱包 等于 三")==0) sum=3;
if(strcmp(d,"整数 钱包 等于 四")==0) sum=4;
if(strcmp(d,"整数 钱包 等于 五")==0) sum=5;
if(strcmp(d,"整数 钱包 等于 六")==0) sum=6;
if(strcmp(d,"整数 钱包 等于 七")==0) sum=7;
if(strcmp(d,"整数 钱包 等于 八")==0) sum=8;
if(strcmp(d,"整数 钱包 等于 九")==0) sum=9;
if(strcmp(d,"整数 钱包 等于 十")==0) sum=10;
if(strcmp(g,"钱包 增加 零")==0) sum=sum+0;
if(strcmp(g,"钱包 增加 一")==0) sum=sum+1;
if(strcmp(g,"钱包 增加 二")==0) sum=sum+2;
if(strcmp(g,"钱包 增加 三")==0) sum=sum+3;
if(strcmp(g,"钱包 增加 四")==0) sum=sum+4;
if(strcmp(g,"钱包 增加 五")==0) sum=sum+5;
if(strcmp(g,"钱包 增加 六")==0) sum=sum+6;
if(strcmp(g,"钱包 增加 七")==0) sum=sum+7;
if(strcmp(g,"钱包 增加 八")==0) sum=sum+8;
if(strcmp(g,"钱包 增加 九")==0) sum=sum+9;
if(strcmp(g,"钱包 增加 十")==0) sum=sum+10;
if(strcmp(j,"钱包 减少 零")==0) sum=sum-0;
if(strcmp(j,"钱包 减少 一")==0) sum=sum-1;
if(strcmp(j,"钱包 减少 二")==0) sum=sum-2;
if(strcmp(j,"钱包 减少 三")==0) sum=sum-3;
if(strcmp(j,"钱包 减少 四")==0) sum=sum-4;
if(strcmp(j,"钱包 减少 五")==0) sum=sum-5;
if(strcmp(j,"钱包 减少 六")==0) sum=sum-6;
if(strcmp(j,"钱包 减少 七")==0) sum=sum-7;
if(strcmp(j,"钱包 减少 八")==0) sum=sum-8;
if(strcmp(j,"钱包 减少 九")==0) sum=sum-9;
if(strcmp(j,"钱包 减少 十")==0) sum=sum-10;
if(sum==0&&strcmp(l,"看看 钱包")==0) printf("零");
else if(sum==1&&strcmp(l,"看看 钱包")==0) printf("一");
else if(sum==2&&strcmp(l,"看看 钱包")==0) printf("二");
else if(sum==3&&strcmp(l,"看看 钱包")==0) printf("三");
else if(sum==4&&strcmp(l,"看看 钱包")==0) printf("四");
else if(sum==5&&strcmp(l,"看看 钱包")==0) printf("五");
else if(sum==6&&strcmp(l,"看看 钱包")==0) printf("六");
else if(sum==7&&strcmp(l,"看看 钱包")==0) printf("七");
else if(sum==8&&strcmp(l,"看看 钱包")==0) printf("八");
else if(sum==9&&strcmp(l,"看看 钱包")==0) printf("九");
else if(sum==10&&strcmp(l,"看看 钱包")==0) printf("十");
else if(sum==11&&strcmp(l,"看看 钱包")==0) printf("十一");
else if(sum==12&&strcmp(l,"看看 钱包")==0) printf("十二");
else if(sum==13&&strcmp(l,"看看 钱包")==0) printf("十三");
else if(sum==14&&strcmp(l,"看看 钱包")==0) printf("十四");
else if(sum==15&&strcmp(l,"看看 钱包")==0) printf("十五");
else if(sum==16&&strcmp(l,"看看 钱包")==0) printf("十六");
else if(sum==17&&strcmp(l,"看看 钱包")==0) printf("十七");
else if(sum==18&&strcmp(l,"看看 钱包")==0) printf("十八");
else if(sum==19&&strcmp(l,"看看 钱包")==0) printf("十九");
else if(sum==20&&strcmp(l,"看看 钱包")==0) printf("二十");
else printf("error");
return 0;
}