第一次个人编程作业

这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系)
这个作业要求在哪里 第一次个人编程作业
这个作业的目标 了解GitHub以及复习c语言
作业正文 GitHub仓库地址
其他参考文献 感谢洪成龙大佬的帮助

记录自己的代码行数,需求分析时间,编码时间。

  • 代码行数:214行
  • 需求分析时间:一小时
  • 编码时间:2天

编程题目

汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。

编程要求

请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):

  • 变量定义:整数 (变量名) 等于 (数字)
  • 运算(加法):(变量名) 增加 (数字)
  • 运算(减法):(变量名) 减少 (数字)
  • 输出:看看 (变量名) or 看看 “(字符串内容)”

附加要求:

  • 选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
    若否则后没有任何操作使用(无)来进行填充(参考样例2)。

注意事项

  • 输入输出采用utf-8编码,请在编码过程中注意。
  • 数字只会出现:零一二三四五六七八九十。(此条作废,可先完成0-10的情况)
  • 字符串输出的双引号是全角,即中文双引号。
  • 变量类型要求只有整数,如有余力,可以自己实现更多。
  • 测试数据会相较于样例复杂,请考虑充分需求。
  • 不限制编程语言。
  • 不能使用eval函数动态执行代码,或调用系统指令。
  • 数据输入形式为交互式运行,类似于shell。

分析与学习

看到题目是想了想自己会什么代码,最后决定用了自己记得最多的c写。
本来不知道怎么多次输入,经过百度查询到了scanf("%s",var1))!=EOF
去除双引号的方法则是由洪成龙大佬教导完成
最后完成的代码其实只是根据样例完成的,比较死板,还要改进。

  • 把汉字转为数字(只做了0-10的情况)
int exchange(char a[])
{
	 if(strcmp("零",a)==0)return 0;
	 if(strcmp("一",a)==0)return 1;
	 if(strcmp("二",a)==0)return 2;
	 if(strcmp("三",a)==0)return 3;
	 if(strcmp("四",a)==0)return 4;
	 if(strcmp("五",a)==0)return 5;
	 if(strcmp("六",a)==0)return 6;
	 if(strcmp("七",a)==0)return 7;
	 if(strcmp("八",a)==0)return 8;
	 if(strcmp("九",a)==0)return 9;
	 if(strcmp("十",a)==0)return 10;
}
  • 去除双引号(只能去除英文双引号)
void disp(char *p)
{
	int l=strlen(p);
	if(p[0]='"')
	{
		for(int i=1;i<l-1;i+=2)
			printf("%c%c",p[i],p[i+1]);
	}	
}
  • 主函数(对输入的字符串进行判断实现输出)
int main()
{
	char *str[11]={"零","一","二","三","四","五","六","七","八","九","十"};
    char var[100],var1[100],name[100],name1[100],name2[100],op[100],num[100];
	char a1[100],a2[100],a3[100],a4[100],a5[100],a6[100],a7[100],a8[100],a9[100];
	scanf("%s %s %s %s",var,name,op,num);
    int sum1,sum2,sum3,a,b;
	sum1=exchange(num);
	while((scanf("%s",var1))!=EOF)
	{	
		if(strcmp(var1,var)==0)
		{
			scanf("%s %s %s ",name1,op,num);
			sum2=exchange(num);
		}
		else if(strcmp(var1,name)==0)
		{
			scanf("%s %s",op,num);
			if(strcmp(op,"增加")==0)
			{
                a=exchange(num);
                sum1+=a; 
            }
            else if(strcmp(op,"减少")==0)
            {
                a=exchange(num);
                sum1-=a;
            } 
		}
		else if(strcmp(var1,name1)==0)
		{
			scanf("%s %s",op,num);
			if(strcmp(op,"增加")==0)
			{
                a=exchange(num);
                sum2+=a; 
            }
            else if(strcmp(op,"减少")==0)
            {
                a=exchange(num);
                sum2-=a;
            } 
		}
		else if(strcmp(var1,"看看")==0)
		{
			scanf("%s",name2);
			if(strcmp(name2,name)==0)
				printf("%s\n",str[sum1]);
			else if(strcmp(name2,name1)==0)
				printf("%s\n",str[sum2]);
		}	
		else if(strcmp(var1,"如果")==0)
		{
			scanf("%s %s %s %s %s %s %s %s %s",a1,a2,a3,a4,a5,a6,a7,a8,a9);
			if(strcmp(a5,"看看")!=0)
			{
				if(strcmp(a1,name)==0)
				{
					sum3=exchange(a3);
					b=exchange(a7);
					if(strcmp(a2,"大于")==0)
					{
						if(sum1>sum3)
						{
							if(strcmp(a5,name)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum1+=b;
								else if(strcmp(a6,"减少")==0)
									sum1-=b;
							}
							if(strcmp(a5,name1)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum2+=b;
								else if(strcmp(a6,"减少")==0)
									sum2-=b;
							}
						}
					}
					else if(strcmp(a2,"小于")==0)
					{
						if(sum1<sum3)
						{
							if(strcmp(a5,name)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum1+=b;
								else if(strcmp(a6,"减少")==0)
									sum1-=b;
							}
							if(strcmp(a5,name1)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum2+=b;
								else if(strcmp(a6,"减少")==0)
									sum2-=b;
							}
						}
					}
				}
				if(strcmp(a1,name1)==0)
				{
					sum3=exchange(a3);
					b=exchange(a7);
					if(strcmp(a2,"大于")==0)
					{
						if(sum1>sum3)
						{
							if(strcmp(a5,name)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum1+=b;
								else if(strcmp(a6,"减少")==0)
									sum1-=b;
							}
							if(strcmp(a5,name1)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum2+=b;
								else if(strcmp(a6,"减少")==0)
									sum2-=b;
							}
						}
					}
					else if(strcmp(a2,"小于")==0)
					{
						if(sum1<sum3)
						{
							if(strcmp(a5,name)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum1+=b;
								else if(strcmp(a6,"减少")==0)
									sum1-=b;
							}
							if(strcmp(a5,name1)==0)
							{
								if(strcmp(a6,"增加")==0)
									sum2+=b;
								else if(strcmp(a6,"减少")==0)
									sum2-=b;
							}
						}
					}
				}
			}
			else if(strcmp(a5,"看看")==0)
			{
				sum3=exchange(a3);
				if(strcmp(a1,name)==0)
				{
					if(strcmp(a2,"大于")==0)
					{
						if(sum1>sum3)
							disp(a6);
						else 
							disp(a9);
					}
					if(strcmp(a2,"小于")==0)
					{
						if(sum1<sum3)
							disp(a6);
						else 
							disp(a9);
					}
				}
				if(strcmp(a1,name1)==0)
				{
					if(strcmp(a2,"大于")==0)
					{
						if(sum2>sum3)
							disp(a6);
						else 
							disp(a9);
					}
					if(strcmp(a2,"小于")==0)
					{
						if(sum2<sum3)
							disp(a6);
						else 
							disp(a9);
					}
					
				}
			}
		}
	}
}

测试样例


posted @ 2020-02-09 20:31  染·柒  阅读(209)  评论(0编辑  收藏  举报