编程题(请使用C语言或者C++完成以下题目):
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
注意:
1.输入输出用例均为GBK编码,推荐使用vscode把文本切换为GBK编码。
2.数字只会出现以下:“零一二三四五六七八九十”。
思路:题目大致的意思就是用汉字编程,解决题目给出的问题。
(1)由于要用汉语编程,汉语其实就是字符,我打算通过“strcmp”函数来进行处理输入的汉字,并将他们转化为数字,便于计算。
(2)根据编程要求,我认为应该分成三个部分。
第一部分,编写识别初始条件的部分。由样例可知“整数 钱包 等于 零”是一种初始条件的语句,那么初始条件语句的格式就为“整数 钱包 等于 某个数”(其中“某个数”是“零一二三四五六七八九十”某一个)。
第二部分,编写处理操作运算的部分。由样例可以知道,运算就两种,要么增加,要么减少。只要识别其中的关键字“增加”或者“减少”,然后对输入的大写数字进行转化,转化为数字后,进行相应的操作即可。
第三部分,编写查询结果的部分。由样例可知,“看看 钱包”是触发查询的语句,然后将之前操作计算出的结果由数字转为大写数字即可。
代码
//#include<stdio.h>
#include<string.h>
int trans1(char num[]);
int op(int n, char b[],int sum);
void trans2(int sum);
int main()
{
char a[20], b[20], c[20], num[20];
int n, sum,m;
scanf("%s%s%s%s", a, b, c, num);
sum = trans1(num);
while (1)
{
scanf("%s%s",a, b);
if (strcmp(a,"看看") == 0)
break;
scanf("%s", num);
n = trans1(num);
sum = op(n, b, sum);
}
if (sum <= 10)
trans2(sum);
else
{
m = sum % 10;
sum = sum / 10;
if (sum == 1)
{
printf("十");
trans2(m);
}
if(sum>1)
{
trans2(sum);
printf("十");
trans2(m);
}
}
return 0;
}
int trans1(char num[])
{
if (strcmp(num, "零") == 0) return 0;
if (strcmp(num, "一") == 0) return 1;
if (strcmp(num, "二") == 0) return 2;
if (strcmp(num, "三") == 0) return 3;
if (strcmp(num, "四") == 0) return 4;
if (strcmp(num, "五") == 0) return 5;
if (strcmp(num, "六") == 0) return 6;
if (strcmp(num, "七") == 0) return 7;
if (strcmp(num, "八") == 0) return 8;
if (strcmp(num, "九") == 0) return 9;
if (strcmp(num, "十") == 0) return 10;
}
int op(int n, char b[], int sum)
{
if (strcmp(b, "增加") == 0) sum = sum + n;
if (strcmp(b, "减少") == 0) sum = sum - n;
return sum;
}
void trans2(int sum)
{
if (sum == 1) printf("一");
if (sum == 2) printf("二");
if (sum == 3) printf("三");
if (sum == 4) printf("四");
if (sum == 5) printf("五");
if (sum == 6) printf("六");
if (sum == 7) printf("七");
if (sum == 8) printf("八");
if (sum == 9) printf("九");
}
代码放在Dev-C++中运行,输入样例代码,如下图所示。
遇到的困难
在visual studio中运行时,会显示如图所示情况。
根据提示,查找资料之后将scanf改为scanf_s,就通过了编译。