第一次编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
这个作业的目标 中文语言编译器
作业正文 如下
其他参考文献

ithub仓库地址:https://github.com/ARIES-7/FIRST

代码行数:205行

作业所需数字转换:

-汉转数:

int change(char x[]){
	if(strcmp(x,"零") == 0)
		return 0;
	if(strcmp(x,"一") == 0)
		return 1;
	if(strcmp(x,"二") == 0)
		return 2;
	if(strcmp(x,"三") == 0)
		return 3;
	... (同上)
}

-数转汉:

void change2(int a){
	int x,y;
	if(a == 0)
		printf("零"); //特殊情况
	if(a%10 == 0)
	{
		switch(a/10){
			case 1:
				printf("十");break;
			case 2:
				printf("二十");break;
			case 3:
				printf("三十");break;
			...
		}
	}
	else{
		x=a/10;
		y=a%10;
		switch(x){
			case 1:
				printf("十");break;
			case 2:
				printf("二十");break;
			case 3:
				printf("三十");break;
			case 4:
				printf("四十");break;
			...
		}
		switch(y){
			case 1:
				printf("一");break;
			case 2:
				printf("二");break;
			case 3:
				printf("三");break;
			case 4:
				printf("四");break;
			... (同)
		}
	
	}
}

此处数字汉字转换还未考虑到上百

遇到提取引号内文字:

void tq(char y[]){
	char s[100];
	int i=0,n=0;
	while(y[i]!='"' && y[i]!='\0' )
				i++;
			while(1){
				i++;
				if(y[i]!='"') 
					s[n++]=y[i];
				else
					break;
			}
			s[n++]='\0';
	printf("%s\n",s);
}

主函数实现:

	while(scanf("%s",&y1)){      //先输入一个字符串,进行判断  案例共有四种可能
		if(strcmp(y1,"整数") == 0){        //读入数据
			if(flag == 0){
				scanf("%s %s %s",&x1,&x3,&x4);
				a+=change(x4);
				flag=1;
			}
			else{
				scanf("%s %s %s",&x2,&x3,&x4);
				b+=change(x4);
			}
		}
		else if(strcmp(y1,"看看") == 0){    //打印数据
			scanf("%s",&y2);
			if(strcmp(y2,x1) == 0){	
				change2(a);
				printf("\n");
			}
			if(strcmp(y2,x2) == 0){	
				change2(b);
				printf("\n");
			}
		}
		else if(strcmp(y1,"如果") == 0){  //特殊处理
			scanf(...);
			if(strcmp(z5,"看看") == 0)
				if(strcmp(z1,x1) == 0){
					if(a>change(z3)) tq(z6);
					else tq(z9);
				}
				else{
					if(b>change(z3)) tq(z6);
					else tq(z9);
				}
			else{
				if(strcmp(z1,x1) == 0){
					if(a>change(z3)) 
						if(strcmp(z6,"增加") == 0)
							if(strcmp(z5,x1) == 0) a+=change(y3);
							else b+=change(y3);
								
						else if(strcmp(z6,"减少") == 0)
							if(strcmp(z5,x1) == 0) a-=change(y3);
							else b-=change(y3);	
					else
						if(strcmp(z9,"无") == 0) break;
				}
				else{
					if(b>change(z3)) 
						(重复) 同上增减
				}
			}
		}
		else{         //数据处理
			scanf("%s %s",&y2,&y3);
			if(strcmp(y2,"增加") == 0){
				if(strcmp(y1,x1) == 0)
					a+=change(y3);
				else
					b+=change(y3);
			}		
			else if(strcmp(y2,"减少") == 0){
				if(strcmp(y1,x1) == 0)
					a-=change(y3);
				else
					b-=change(y3);
			}	
		}
	}
	return 0;
}

作业中的问题:

本次代码只能实现部分固定句式的测试,若是增加或句式改变,仍然存在问题。

posted @ 2020-02-09 10:25  X-75  阅读(191)  评论(0编辑  收藏  举报