2020年面向对象程序设计寒假作业1编程题

编程题
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

思路:考虑到数据范围仅有0-99,因此将数据分为0-10,10的倍数,11-19,其余数四个部分依次进行中文与阿拉伯数字转换
完整代码:
由于能力不足,一开始仅能对0-10的数进行转换

include<stdio.h>

include<string.h>

int num(char n[])
{
if(strcmp(n,"零")==0) return 0;
else if(strcmp(n,"一")==0) return 1;
else if(strcmp(n,"二")==0) return 2;
else if(strcmp(n,"三")==0) return 3;
else if(strcmp(n,"四")==0) return 4;
else if(strcmp(n,"五")==0) return 5;
else if(strcmp(n,"六")==0) return 6;
else if(strcmp(n,"七")==0) return 7;
else if(strcmp(n,"八")==0) return 8;
else if(strcmp(n,"九")==0) return 9;
else if(strcmp(n,"十")==0) return 10;
else return -1;
}
void chinese(int a)
{
switch(a)
{
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;
}
}
int main()
{
char z[100],q[100],d[100],n[100];
int a;
scanf("%s %s %s %s",z,q,d,n);
getchar();
if(strcmp(z,"整数")==0)//z为整数
{
if(strlen(n)==2)
{
a=num(n);
if(a!=-1)
{
for(int i=0;i<2;i++)
{
char b[10],c[10],d[10];
scanf("%s %s %s\n",b,c,d);
if(strcmp(c,"增加")==0) a+=num(d);
if(strcmp(c,"减少")==0) a-=num(d);
}
scanf("看看 钱包");
}
chinese(a);//printf("%d",a);
}
}
else printf("Error");
return 0;
}

又对代码进行修改,将数据范围扩大,但输出仍存在问题,目前还没有思考出结果,还望大家多多指教。

include<stdio.h>

include<string.h>

int num(char n[])
{
if(strcmp(n,"零")==0) return 0;
else if(strcmp(n,"一")==0) return 1;
else if(strcmp(n,"二")==0) return 2;
else if(strcmp(n,"三")==0) return 3;
else if(strcmp(n,"四")==0) return 4;
else if(strcmp(n,"五")==0) return 5;
else if(strcmp(n,"六")==0) return 6;
else if(strcmp(n,"七")==0) return 7;
else if(strcmp(n,"八")==0) return 8;
else if(strcmp(n,"九")==0) return 9;
else if(strcmp(n,"十")==0) return 10;
else return -1;
}
void chinese(int a)
{
switch(a)
{
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;
}
}
int main()
{
char z[100],q[100],d[100],n[100];
int a;
scanf("%s %s %s %s",z,q,d,n);
getchar();
if(strcmp(z,"整数")==0)//z为整数
{
if(strlen(n)==2)//处理0-10
{
a=num(n);
if(a!=-1)
{
for(int i=0;i<2;i++)
{
char b[10],c[10],d[10];
scanf("%s %s %s\n",b,c,d);
if(strcmp(c,"增加")==0) a+=num(d);
if(strcmp(c,"减少")==0) a-=num(d);
}
scanf("看看 钱包");
}
chinese(a);//printf("%d",a);
}
else if(strlen(n)==3)//处理10的倍数,11-19
{
char aa[10],bb[10];
aa[0]=n[0];bb[0]=n[1];
if(bb[0]=='十')//10的倍数
{
a=num(aa)*10;
if(a>=0)
{
for(int i=0;i<2;i++)
{
char b[10],c[10],d[10];
scanf("%s %s %s\n",b,c,d);
if(strcmp(c,"增加")==0) a+=num(d);
if(strcmp(c,"减少")==0) a-=num(d);
}
scanf("看看 钱包");
}
if(a>=0&&a<=10) chinese(a);
else if(a>10&&a<20)
{
printf("十");
chinese(a%10);
}
else if(a==20&&a==30&&a==40&&a==50&&a==60&&a==70&&a==80&&a==90)
{
chinese(a/10);
printf("十");
}
else
{
chinese(a/10);
printf("十");
chinese(a%10);
}
}
else if(aa[0]=='十')//11-19
{
a=10+num(bb);
if(a>=0)
{
for(int i=0;i<2;i++)
{
char b[10],c[10],d[10];
scanf("%s %s %s\n",b,c,d);
if(strcmp(c,"增加")==0) a+=num(d);
if(strcmp(c,"减少")==0) a-=num(d);
}
scanf("看看 钱包");
}
if(a>=0&&a<=10) chinese(a);
else if(a>10&&a<20)
{
printf("十");
chinese(a%10);
}
else if(a==20&&a==30&&a==40&&a==50&&a==60&&a==70&&a==80&&a==90)
{
chinese(a/10);
printf("十");
}
else
{
chinese(a/10);
printf("十");
chinese(a%10);
}
}
}
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/jasf/p/12231679.html