编程题
Posted atsap
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程题相关的知识,希望对你有一定的参考价值。
编程题
题目的要求是编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
如上,需要我们和平常不一样的用中文输入和输出,因此我需要能把中文转化成数字和把数字转化成中文,还要能识别一些关键字,进行相应的运算。
我忽略了整数、钱包,看看这些词语。
查阅资料发现一个汉字占两个字节,然后我用char数组里连续的两个变量来储存一个汉字,数组的最后加上 ;
只用了简单的循环来控制12个字符串输入结束;
用strcmp来比较输入的汉字是否与“增加”,“减少”,“等于”的其中一个相同,进行对应的处理;
然后把输入的数字分成三类:一个,两个,或三个汉字组成,编写了三个函数分别处理它们,返回对应的阿拉伯数字,进行加、减或赋值运算;
最后把得到的阿拉伯数字用另一个函数转化成汉字并直接输出。
因为太菜并且时间也有限(其实是自己一直拖),并没有到考虑输入不规范的情况...所以符合这些条件代码才能用:一定要有十二个用空格或换行符间隔开的字符串,字符串的长度不超过四个汉字,存在“增加”,“减少”,“等于”和零到一百的数字(不包括一百)的关键字,赋值,加减后的结果也不能超过100,并且数字要紧跟在“增加”,“减少”,“等于”后面。如果没有进行赋值,也默认初始为0。
运行结果(截图高糊就不放了):
整数 钱包 等于 零
钱包 增加 三
钱包 减少 三
看看 钱包
零
整数 钱包 等于 一
钱包 增加 三十五
钱包 减少 二十二
看看 钱包
十四
整数 口袋 等于 零
口袋 增加 三
口袋 减少 二
康康 口袋
一
全部代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
char zero[] = "零",
one[] = "一",
two[] = "二",
three[] = "三",
four[] = "四",
five[] = "五",
six[] = "六",
seven[] = "七",
eight[] = "八",
nine[] = "九",
ten[] = "十";
void output(int i);
int Cn_translator(char* s);
int Cn_translator1(char* s);
int Cn_translator2(char* s);
int Cn_translator3(char* s);
int main()
{
char word[10];
char op1[] = "等于",
op2[] = "增加",
op3[] = "减少";
int i;
int money = 0;
for (i = 0;i < 12;i++)
{
fflush(stdin);
scanf("%s", word);
if (strcmp(word, op1) == 0)
{
scanf("%s", word);
i += 1;
money = Cn_translator(word);
}
else
if (strcmp(word, op2) == 0)
{
scanf("%s", word);
i += 1;
money+= Cn_translator(word);
}
else
if (strcmp(word, op3) == 0)
{
scanf("%s", word);
i += 1;
money-= Cn_translator(word);
}
}
output(money);
return 0;
}
int Cn_translator(char* s)
{
if (strlen(s) == 2)
{
return Cn_translator1(s);
}
else
if (strlen(s) == 4)
{
return Cn_translator2(s);
}
else
if (strlen(s) == 6)
{
return Cn_translator3(s);
}
}
int Cn_translator1(char* s)
{
if (strcmp(s, zero) == 0)
return 0;
if (strcmp(s, one) == 0)
return 1;
if (strcmp(s, two) == 0)
return 2;
if (strcmp(s, three) == 0)
return 3;
if (strcmp(s, four) == 0)
return 4;
if (strcmp(s, five) == 0)
return 5;
if (strcmp(s, six) == 0)
return 6;
if (strcmp(s, seven) == 0)
return 7;
if (strcmp(s, eight) == 0)
return 8;
if (strcmp(s, nine) == 0)
return 9;
if (strcmp(s, ten) == 0)
return 10;
}
int Cn_translator2(char* s)
{
int m=0;
int i,j;
char k[3];
for (i = 0,j=10;i < 4;i += 2,j/=10)
{
k[0] = s[i];
k[1] = s[i+1];
k[2] = '