编程题

题目

  • 中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
    今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。

编程要求

  • 编程要求
    编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
    变量定义:整数 钱包 等于 零
    运算(加法):钱包 增加 四
    运算(减法):钱包 减少 四
    输出:看看 钱包

样例

输入:

整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包

输出:

注意:
输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
数字只会出现以下 零一二三四五六七八九十。

分为三个模块;一是将汉字转为数字,二是计算,三是将数字转为汉字并输出。

  • 1、汉字转为数字
int hanzi(char num[])
{
	int h=0;
	if(strcmp("一",num)==0)
	h=1;
	if(strcmp("二",num)==0)
	h=2;
	if(strcmp("三",num)==0)
	h=3;
	if(strcmp("四",num)==0)
	h=4;
	if(strcmp("五",num)==0)
	h=5;
	if(strcmp("六",num)==0)
	h=6;
	if(strcmp("七",num)==0)
	h=7;
	if(strcmp("八",num)==0)
	h=8;
	if(strcmp("九",num)==0)
	h=9;
	if(strcmp("十",num)==0)
	h=10;
	if(strcmp("十一",num)==0)
	h=11;
	if(strcmp("十二",num)==0)
	h=12;
	if(strcmp("十三",num)==0)
	h=13;
	if(strcmp("十四",num)==0)
	h=14;
	if(strcmp("十五",num)==0)
	h=15;
	if(strcmp("十六",num)==0)
	h=16;
	if(strcmp("十七",num)==0)
	h=17;
	if(strcmp("十八",num)==0)
	h=18;
	if(strcmp("十九",num)==0)
	h=19;
	if(strcmp("二十",num)==0)
	h=20;
	if(strcmp("二十一",num)==0)
	h=21;
	if(strcmp("二十二",num)==0)
	h=22;
	if(strcmp("二十三",num)==0)
	h=23;
	if(strcmp("二十四",num)==0)
	h=24;
	if(strcmp("二十五",num)==0)
	h=25;
	if(strcmp("二十六",num)==0)
	h=26;
	if(strcmp("二十七",num)==0)
	h=27;
	if(strcmp("二十八",num)==0)
	h=28; 
	if(strcmp("二十九",num)==0)
	h=29;
	if(strcmp("三十",num)==0)
	h=30;
	return h;
 } 

通过百度以及查阅相关资料了解到strcmp这个函数的使用方法,于是用这种方法将汉字转为数字进行计算

  • 2、加减计算
			if(strcmp("增加",b)==0)
			{
				n+=hanzi(c);
			}
			if(strcmp("减少",b)==0)
			n-=hanzi(c);	
			if(strcmp("增加",b)!=0&&strcmp("减少",b)!=0)
			{
				break;
			}

这个部分是将汉字的增加/减少分别换成‘+’/‘-’,然后进行相应的计算最后得出计算结果。

  • 3、将数字转为汉字并输出
void pri(int shu)
 {
 	switch(shu)
	{
 	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;
	case 11: printf("十一"); break;
	case 12: printf("十二"); break;
	case 13: printf("十三"); break;
	case 14: printf("十四"); break;
	case 15: printf("十五"); break;
	case 16: printf("十六"); break;
	case 17: printf("十七"); break;
	case 18: printf("十八"); break;
	case 19: printf("十九"); break;
	case 20: printf("二十"); break;
	case 21: printf("二十一"); break;
	case 22: printf("二十二"); break;
	case 23: printf("二十三"); break;
	case 24: printf("二十四"); break;
	case 25: printf("二十五"); break;
	case 26: printf("二十六"); break;
	case 27: printf("二十七"); break;
	case 28: printf("二十八"); break;
	case 29: printf("二十九"); break;
	case 30: printf("三十"); break;
	case 31: printf("三十一"); break;
	case 32: printf("三十二"); break;
	case 33: printf("三十三"); break;
	case 34: printf("三十四"); break;
	case 35: printf("三十五"); break;
	case 36: printf("三十六"); break;
	case 37: printf("三十七"); break;
	case 38: printf("三十八"); break;
	case 39: printf("三十九"); break;
	case 40: printf("四十"); break;
	case 41: printf("四十一"); break;
	case 42: printf("四十二"); break;
	case 43: printf("四十三"); break;
	case 44: printf("四十四"); break;
	case 45: printf("四十五"); break;
	case 46: printf("四十六"); break;
	case 47: printf("四十七"); break;
	case 48: printf("四十八"); break;
	case 49: printf("四十九"); break;
	case 50: printf("五十"); break;
	}
 }

截取部分代码,因为实在想不出来有什么好办法能进行多位数的输出,(如果是三位数就会有百,四位数就会有千),我没有想到什么比较好的方法去把多位数的问题解决如果想要进行多位数的输出就人工再添加吧,因此我这个代码只满足输入的汉字<=60,输出的<=100;超出范围的就会提示超出范围。

  • 1.先判断输入的是不是整数
  • 2.完成题目的要求
  • 3.在临界值范围
  • 4.超出临界值

完整代码

//判断两位数的 
#include <stdio.h>
#include <string.h>
int hanzi(char num[]);
void pri(int shu);
int main()
{
	int n,v=0,i=1;
	char a[50],b[50],c[50],d[50],e[50];
	scanf("%s %s %s %s",&a,&b,&c,&d);
	if(strcmp("整数",a)==0)
	{
		if(strcmp("等于",c)==0)
		{
			n=hanzi(d);
			while(1)
			{
			scanf("%s",&a);
			 if(strcmp("看看",a)==0)
        	break;
        	scanf("%s %s",&b,&c);
			if(strcmp("增加",b)==0)
			{
				n+=hanzi(c);
			}
			if(strcmp("减少",b)==0)
			n-=hanzi(c);	
			if(strcmp("增加",b)!=0&&strcmp("减少",b)!=0)
			{
				break;
			}
	}
	scanf("%s",&b);
	if(strcmp("看看", a)==0)
	{
		if(n<=100)
		pri(n);
		if(n>100)
		{
		printf("超出运算范围"); 
		}	
	}
	}
	else
	printf("ERROR");
	}
	else
	printf("ERROR");
	return 0;
}
int hanzi(char num[])
{
	int h=0;
	if(strcmp("一",num)==0)
	h=1;
	if(strcmp("二",num)==0)
	h=2;
	if(strcmp("三",num)==0)
	h=3;
	if(strcmp("四",num)==0)
	h=4;
	if(strcmp("五",num)==0)
	h=5;
	if(strcmp("六",num)==0)
	h=6;
	if(strcmp("七",num)==0)
	h=7;
	if(strcmp("八",num)==0)
	h=8;
	if(strcmp("九",num)==0)
	h=9;
	if(strcmp("十",num)==0)
	h=10;
	if(strcmp("十一",num)==0)
	h=11;
	if(strcmp("十二",num)==0)
	h=12;
	if(strcmp("十三",num)==0)
	h=13;
	if(strcmp("十四",num)==0)
	h=14;
	if(strcmp("十五",num)==0)
	h=15;
	if(strcmp("十六",num)==0)
	h=16;
	if(strcmp("十七",num)==0)
	h=17;
	if(strcmp("十八",num)==0)
	h=18;
	if(strcmp("十九",num)==0)
	h=19;
	if(strcmp("二十",num)==0)
	h=20;
	if(strcmp("二十一",num)==0)
	h=21;
	if(strcmp("二十二",num)==0)
	h=22;
	if(strcmp("二十三",num)==0)
	h=23;
	if(strcmp("二十四",num)==0)
	h=24;
	if(strcmp("二十五",num)==0)
	h=25;
	if(strcmp("二十六",num)==0)
	h=26;
	if(strcmp("二十七",num)==0)
	h=27;
	if(strcmp("二十八",num)==0)
	h=28; 
	if(strcmp("二十九",num)==0)
	h=29;
	if(strcmp("三十",num)==0)
	h=30;
	if(strcmp("三十一",num)==0)
	h=31;
	if(strcmp("三十二",num)==0)
	h=32;
	if(strcmp("三十三",num)==0)
	h=33;
	if(strcmp("三十四",num)==0)
	h=34;
	if(strcmp("三十五",num)==0)
	h=35;
	if(strcmp("三十六",num)==0)
	h=36;
	if(strcmp("三十七",num)==0)
	h=37;
	if(strcmp("三十八",num)==0)
	h=38;
	if(strcmp("三十九",num)==0)
	h=39;
	if(strcmp("四十",num)==0)
	h=40; 
	if(strcmp("四十一",num)==0)
	h=41;
	if(strcmp("四十二",num)==0)
	h=42;
	if(strcmp("四十三",num)==0)
	h=43;
	if(strcmp("四十四",num)==0)
	h=44;
	if(strcmp("四十五",num)==0)
	h=45;
	if(strcmp("四十六",num)==0)
	h=46;
	if(strcmp("四十七",num)==0)
	h=47;
	if(strcmp("四十八",num)==0)
	h=48;
	if(strcmp("四十九",num)==0)
	h=49;
	if(strcmp("五十",num)==0)
	h=50;
	if(strcmp("五十一",num)==0)
	h=51;
	if(strcmp("五十二",num)==0)
	h=52;
	if(strcmp("五十三",num)==0)
	h=53;
	if(strcmp("五十四",num)==0)
	h=54;
	if(strcmp("五十五",num)==0)
	h=55;
	if(strcmp("五十六",num)==0)
	h=56;
	if(strcmp("五十七",num)==0)
	h=57;
	if(strcmp("五十八",num)==0)
	h=58;
	if(strcmp("五十九",num)==0)
	h=59;
	if(strcmp("六十",num)==0)
	h=60; 
	return h;
 } 
 void pri(int shu)
 {
 	switch(shu)
	{
 	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;
	case 11: printf("十一"); break;
	case 12: printf("十二"); break;
	case 13: printf("十三"); break;
	case 14: printf("十四"); break;
	case 15: printf("十五"); break;
	case 16: printf("十六"); break;
	case 17: printf("十七"); break;
	case 18: printf("十八"); break;
	case 19: printf("十九"); break;
	case 20: printf("二十"); break;
	case 21: printf("二十一"); break;
	case 22: printf("二十二"); break;
	case 23: printf("二十三"); break;
	case 24: printf("二十四"); break;
	case 25: printf("二十五"); break;
	case 26: printf("二十六"); break;
	case 27: printf("二十七"); break;
	case 28: printf("二十八"); break;
	case 29: printf("二十九"); break;
	case 30: printf("三十"); break;
	case 31: printf("三十一"); break;
	case 32: printf("三十二"); break;
	case 33: printf("三十三"); break;
	case 34: printf("三十四"); break;
	case 35: printf("三十五"); break;
	case 36: printf("三十六"); break;
	case 37: printf("三十七"); break;
	case 38: printf("三十八"); break;
	case 39: printf("三十九"); break;
	case 40: printf("四十"); break;
	case 41: printf("四十一"); break;
	case 42: printf("四十二"); break;
	case 43: printf("四十三"); break;
	case 44: printf("四十四"); break;
	case 45: printf("四十五"); break;
	case 46: printf("四十六"); break;
	case 47: printf("四十七"); break;
	case 48: printf("四十八"); break;
	case 49: printf("四十九"); break;
	case 50: printf("五十"); break;
	case 51: printf("五十一"); break;
	case 52: printf("五十二"); break;
	case 53: printf("五十三"); break;
	case 54: printf("五十四"); break;
	case 55: printf("五十五"); break;
	case 56: printf("五十六"); break;
	case 57: printf("五十七"); break;
	case 58: printf("五十八"); break;
	case 59: printf("五十九"); break;
	case 60: printf("六十"); break;
	case 61: printf("六十一"); break;
	case 62: printf("六十二"); break;
	case 63: printf("六十三"); break;
	case 64: printf("六十四"); break;
	case 65: printf("六十五"); break;
	case 66: printf("六十六"); break;
	case 67: printf("六十七"); break;
	case 68: printf("六十八"); break;
	case 69: printf("六十九"); break;
	case 70: printf("七十"); break;
	case 71: printf("七十一"); break;
	case 72: printf("七十二"); break;
	case 73: printf("七十三"); break;
	case 74: printf("七十四"); break;
	case 75: printf("七十五"); break;
	case 76: printf("七十六"); break;
	case 77: printf("七十七"); break;
	case 78: printf("七十八"); break;
	case 79: printf("七十九"); break;
	case 80: printf("八十"); break;
	case 81: printf("八十一"); break;
	case 82: printf("八十二"); break;
	case 83: printf("八十三"); break;
	case 84: printf("八十四"); break;
	case 85: printf("八十五"); break;
	case 86: printf("八十六"); break;
	case 87: printf("八十七"); break;
	case 88: printf("八十八"); break;
	case 89: printf("八十九"); break;
	case 90: printf("九十"); break;
	case 91: printf("九十一"); break;
	case 92: printf("九十二"); break;
	case 93: printf("九十三"); break;
	case 94: printf("九十四"); break;
	case 95: printf("九十五"); break;
	case 96: printf("九十六"); break;
	case 97: printf("九十七"); break;
	case 98: printf("九十八"); break;
	case 99: printf("九十九"); break;
	case 100: printf("一百"); break;
	}
 }
posted on 2020-01-26 16:50  clt1120  阅读(104)  评论(0编辑  收藏  举报