这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/SE/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283 |
这个作业的目标 | 汉字编程 |
作业正文 | 如下 |
其他参考文献 | ... |
编程要求
请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”
附加要求:
选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。
记录:
1.记录自己的代码行数,需求分析时间,编码时间。
代码行数:133+153
需求分析时间:2小时
编码时间:>7小时
2.分解需求的思路,分解成多个模块,并阐述为什么这么分,优势在哪,可以附上代码片段。
分解需求的思路:
主要是分为将汉字转换为数字,
将数字转换为汉字,
然后进行加法减法。
(优化过程):刚开始只考虑0-10,后面修改之后有增加两位数的代码
github仓库地址:https://github.com/TracerLin/TracerLIn
//样例1
//将汉字变为数字
int hangzi(char num[])
{
if (strcmp("零", num) == 0) return 0;
else if (strcmp("一", num) == 0) return 1;
else if (strcmp("二", num) == 0) return 2;
else if (strcmp("三", num) == 0) return 3;
else if (strcmp("四", num) == 0) return 4;
else if (strcmp("五", num) == 0) return 5;
else if (strcmp("六", num) == 0) return 6;
else if (strcmp("七", num) == 0) return 7;
else if (strcmp("八", num) == 0) return 8;
else if (strcmp("九", num) == 0) return 9;
else if (strcmp("十", num) == 0) return 10;
else{
int i, a, b, c;
char x[2], y[2];
for (i = 0; i < 2; i++){
x[i] = num[i];
y[i] = num[i + 2];
}
if (strcmp("十", x) == 0){
a = 10;
b = hangzi(y);
c = a + b;
}
else {
a = hangzi(x);
b = hangzi(y);
c = a * 10 + b;
}//超过十的情况就转化成十几或者是几十几
return c;
}
}
//将数字转化成汉字
void shuzi(int a)
{
if (a == 0) printf("零");
if (a == 1) printf("一");
if (a == 2) printf("二");
if (a == 3) printf("三");
if (a == 4) printf("四");
if (a == 5) printf("五");
if (a == 6) printf("六");
if (a == 7) printf("七");
if (a == 8) printf("八");
if (a == 9) printf("九");
if (a == 10) printf("十");
}
void change(int a)
{
void shuzi(int b);
int x, y;
if (a <= 10) shuzi(a);
//输入为个位数
else if (a > 10 && a < 20) {
printf("十");
x = a % 10;
shuzi(x);
}
//输入为大于10小于20
else if (a >= 20 && a % 10 == 0) {
y = a / 10;
shuzi(y);
printf("十");
}
else {
x = a / 10;
shuzi(x);
printf("十");
y = a % 10;
shuzi(y);
}
}
int main()
{
int hangzi(char num[]);
void shuzi(int a);
char a[50], b[50], c[50], d[50],x[50],y[50],z[50];
char p1[50],p2[50],p3[50],p4[50],p5[50],p6[50],p7[50],p8[50],p9[50],p10[50];
int qiwen,k;
int tem=0;
scanf("%s %s %s %s", a, b, c, d);
qiwen = hangzi(d);
for(int a;a<100;a++) {
scanf("%s %s", x, y);
if (strcmp(x, "看看") == 0 && strcmp(y, "气温") == 0){
shuzi(qiwen);
break;
}
//进行增减
if (strcmp(x, "气温") == 0) {
if (strcmp(y, "增加") == 0) {
scanf("%s", z);
k = hangzi(z);
qiwen += k;
}
if (strcmp(y, "减少") == 0) {
scanf("%s", z);
k = hangzi(z);
qiwen -= k;
}
}
}
//附加条件
scanf("%s %s %s %s %s %s %s %s %s %s", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
tem=hangzi(p4);
shuzi(qiwen);
printf("\n");
if(qiwen>tem){
printf("%s\n",p7);
}else{
printf("%s\n",p10);
}
}
//样例2
int hangzi(char num[])//年龄汉字转数字
{
if (strcmp("零", num) == 0) return 0;
if (strcmp("一", num) == 0) return 1;
if (strcmp("二", num) == 0) return 2;
if (strcmp("三", num) == 0) return 3;
if (strcmp("四", num) == 0) return 4;
if (strcmp("五", num) == 0) return 5;
if (strcmp("六", num) == 0) return 6;
if (strcmp("七", num) == 0) return 7;
if (strcmp("八", num) == 0) return 8;
if (strcmp("九", num) == 0) return 9;
if (strcmp("十", num) == 0) return 10;
else{
return 0;
}
}
int hangzi1(char num[])//钱汉字转数字
{
if (strcmp("零", num) == 0) return 0;
if (strcmp("一", num) == 0) return 1;
if (strcmp("二", num) == 0) return 2;
if (strcmp("三", num) == 0) return 3;
if (strcmp("四", num) == 0) return 4;
if (strcmp("五", num) == 0) return 5;
if (strcmp("六", num) == 0) return 6;
if (strcmp("七", num) == 0) return 7;
if (strcmp("八", num) == 0) return 8;
if (strcmp("九", num) == 0) return 9;
if (strcmp("十", num) == 0) return 10;
else{
return 0;
}
}
//将数字变为汉字
void shuzi(int a)
{
if (a == 0) printf("零");
if (a == 1) printf("一");
if (a == 2) printf("二");
if (a == 3) printf("三");
if (a == 4) printf("四");
if (a == 5) printf("五");
if (a == 6) printf("六");
if (a == 7) printf("七");
if (a == 8) printf("八");
if (a == 9) printf("九");
if (a == 10) printf("十");
}
void change(int a)
{
void shuzi(int b);
int x, y;
if (a <= 10) shuzi(a);
//输入为个位数
else if (a > 10 && a < 20) {
printf("十");
x = a % 10;
shuzi(x);
}
//输入为大于10小于20
else if (a >= 20 && a % 10 == 0) {
y = a / 10;
shuzi(y);
printf("十");
}
else {
x = a / 10;
shuzi(x);
printf("十");
y = a % 10;
shuzi(y);
}
}
int main()
{
int hangzi(char num[]);
int hangzi1(char num[]);
void shuzi(int a);
char a[50], b[50], c[50], d[50],x[50],y[50],z[50];
char a1[50], b1[50], c1[50], d1[50],x1[50],y1[50],z1[50];
char p1[50],p2[50],p3[50],p4[50],p5[50],p6[50],p7[50],p8[50],p9[50],p10[50];
int money,k,k1;
int age=0;
scanf("%s %s %s %s", a, b, c, d);
scanf("%s %s %s %s", a1, b1, c1, d1);
age=hangzi(d);
money = hangzi1(d1);
for(int a;a<100;a++) {
scanf("%s %s", x, y);
if (strcmp(x, "看看") == 0 && strcmp(y, "小杨零花钱") == 0){
shuzi(money);
break;
}
if (strcmp(x, "小杨年龄") == 0) {
if (strcmp(y, "增加") == 0) {
scanf("%s", z);
k = hangzi(z);
money += k;
}
if (strcmp(y, "减少") == 0) {
scanf("%s", z);
k = hangzi(z);
money -= k;
}
}
if (strcmp(x1, "小杨零花钱") == 0) {
if (strcmp(y1, "增加") == 0) {
scanf("%s", z1);
k1 = hangzi1(z1);
money ++;
}
if (strcmp(y1, "减少") == 0) {
scanf("%s", z1);
k1 = hangzi1(z1);
money --;
}
}//进行增减
}
scanf("%s %s %s %s %s %s %s %s %s %s", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
age=hangzi(p4);
money=hangzi1(p7);
shuzi(money);
if(age>*p4){
printf("%s\n",&money);
}else{
printf("无");
}
printf("\n");
}
运行结果:
样例一
样例二
3.记录不会的知识的学习过程以及修改优化的过程;
(1)还是不能去除双引号。
(2)还不会乘除的运算。
(3)不能将两个案例融合为一个代码,还要继续学习修改一下。