这个作业属于哪个课程 | 课程 |
---|---|
这个作业要求在哪里 | 作业地址 |
这个作业的目标 | 写一篇博客 |
作业正文 | 见下文 |
其他参考文献 | ... |
github仓库地址 | https://github.com/dwadekobe24/Hello-world |
作业要求
- 发布一篇随笔,使用markdown语法进行编辑。
- 在随笔前附上github仓库地址。
- 编程题目
- 汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。
编程要求
请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”
附加要求:
选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。
样例1
输入:
整数 气温 等于 十
气温 减少 三
气温 增加 二
看看 气温
如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
输出:
九
你好,世界
样例2
输入:
整数 小杨年龄 等于 八
整数 小杨零花钱 等于 二
小杨年龄 增加 一
如果 小杨年龄 大于 八 则 小杨零花钱 增加 一 否则 无
看看 小杨零花钱
输出:
三
注意事项
- 输入输出采用utf-8编码,请在编码过程中注意。
- 数字只会出现:零一二三四五六七八九十。(此条作废,可先完成0-10的情况)
- 字符串输出的双引号是全角,即中文双引号。
- 变量类型要求只有整数,如有余力,可以自己实现更多。
- 测试数据会相较于样例复杂,请考虑充分需求。
- 不限制编程语言。
- 不能使用eval函数动态执行代码,或调用系统指令。
- 数据输入形式为交互式运行,类似于shell。
代码行数:115行
需求分析时间:2h
编码时间:1天
分解需求的思路,分解成多个模块,并阐述为什么这么分,优势在哪,可以附上代码片段。
- 中文汉字和数字相互转化
- 判断各种边界条件,加强程序的健壮性
- 代码简洁明了,易读性高
记录不会的知识的学习过程以及修改优化的过程;可以附上资料网站。
- Scanf的捕捉机制
- 命令行交互参数的确定
- 暂时不支持负数运算
#include
#include
int main(int argc,char** argv)
{
int chineseCoverToInterger(char s[10]);
int calculate(char s[10],int m,int n);
char intergerCoverToChinese(int k);
// 初始化各项参数
char a[10],b[10],c[10],d[10],ab[10], bb[10], cc[10], dd[10];
int result,FInterger;
scanf("%s %s %s %s",&a,&b,&c,&d);
result = chineseCoverToInterger(d);
int flag = 1 ;
while(flag)
{
scanf("%s", &bb);
if(strcmp(bb,"看看")== 0)
{
intergerCoverToChinese(result);
if (result > 8) {
printf("\n你好,世界");
}else {
printf("\n冻死我了");
break;
}
}
else // 气温
{
scanf("%s %s", cc, dd);
FInterger = chineseCoverToInterger(dd);
result = calculate(cc,result,FInterger);
// B(x);
}
}
return 0;
}
char zhengshu[100][100]= {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
int chineseCoverToInterger(char a[]) {
int i;
for (i = 0; i < 11; i++) {
if (strcmp(zhengshu[i], a) == 0) {
return i;
}
}
return 0;
}
char intergerCoverToChinese(int k)
{
switch (k) {
case 0:
printf("零");
break;
case 1:
printf("一");
break;
case 2:
printf("二");
break;
case 3:
printf("三");
break;
case 4:
printf("四");
break;
case 5:
printf("五");
break;
case 6:
printf("六");
break;
case 7:
printf("七");
break;
case 8:
printf("八");
break;
case 9:
printf("九");
break;
case 10:
printf("十");
break;
}
return 0;
}
int calculate(char s[10],int m,int n)
{
int result;
if(strcmp(s,"增加")==0)
result=m+n;
if(strcmp(s,"减少")==0)
result=m-n;
return result;
}