题目如下:
编程题(请使用C语言或者C++完成以下题目):(基础5分)
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:
一
头文件及定义
#include<iostream>
#include<string.h>
using namespace std;
int sum;//总额
char var[10],ini[10],oper[100];//变量,初始化 operation 运算
处理函数
①转换函数:
int trans(char str[])
{
if(strcmp("零",str)==0)return 0;
if(strcmp("一",str)==0)return 1;
if(strcmp("二",str)==0)return 2;
if(strcmp("三",str)==0)return 3;
if(strcmp("四",str)==0)return 4;
if(strcmp("五",str)==0)return 5;
if(strcmp("六",str)==0)return 6;
if(strcmp("七",str)==0)return 7;
if(strcmp("八",str)==0)return 8;
if(strcmp("九",str)==0)return 9;
if(strcmp("十",str)==0)return 10;
}
②计算函数:考虑到本次作业要求优化架构,函数尽量在15行以内,于是把计算分成了加函数和减函数来水过去
加函数:
void deal_add(char str[])
{
if(strcmp(" 增加 一",str)==0)sum+=1;
if(strcmp(" 增加 二",str)==0)sum+=2;
if(strcmp(" 增加 三",str)==0)sum+=3;
if(strcmp(" 增加 四",str)==0)sum+=4;
if(strcmp(" 增加 五",str)==0)sum+=5;
if(strcmp(" 增加 六",str)==0)sum+=6;
if(strcmp(" 增加 七",str)==0)sum+=7;
if(strcmp(" 增加 八",str)==0)sum+=8;
if(strcmp(" 增加 九",str)==0)sum+=9;
if(strcmp(" 增加 十",str)==0)sum+=10;
}
运用strcmp函数对输入的字符串进行判断,进而对变量进行运算。
减函数:
void deal_minus(char str[])
{
if(strcmp(" 减少 一",str)==0)sum-=1;
if(strcmp(" 减少 二",str)==0)sum-=2;
if(strcmp(" 减少 三",str)==0)sum-=3;
if(strcmp(" 减少 四",str)==0)sum-=4;
if(strcmp(" 减少 五",str)==0)sum-=5;
if(strcmp(" 减少 六",str)==0)sum-=6;
if(strcmp(" 减少 七",str)==0)sum-=7;
if(strcmp(" 减少 八",str)==0)sum-=8;
if(strcmp(" 减少 九",str)==0)sum-=9;
if(strcmp(" 减少 十",str)==0)sum-=10;
}
道理同上。
输出函数:
void output(int x)
{
if(x==0)cout<<"零";
if(x==1)cout<<"一";
if(x==2)cout<<"二";
if(x==3)cout<<"三";
if(x==4)cout<<"四";
if(x==5)cout<<"五";
if(x==6)cout<<"六";
if(x==7)cout<<"七";
if(x==8)cout<<"八";
if(x==9)cout<<"九";
if(x==10)cout<<"十";
}
设计该函数是用于单个位数的数字进行输出,而对于大于10的总额,将在主函数进行处理。
主函数:
int main()
{
for(int i=0;i<2;i++)cin>>var;//读入变量名
for(int i=0;i<2;i++)cin>>ini;//读入初始值
sum=trans(ini);//将初始值转换为数字,赋值给总额。
for(;;)
{
cin>>var;//通过cin读入变量名,遇到空格停止
gets(oper);//通过gets读入计算操作,但会读入前面的一个空格,所以上方的加减函数字符串前面有空格
deal_add(oper);//加
deal_minus(oper);//减
if(strcmp("看看",var)==0)break;//当读入“看看”时退出
}
if(sum<=10)output(sum);
if(sum>10)
{
int ten_position=sum/10;
if(ten_position==1)cout<<"十";
else{
output(ten_position);
cout<<"十";
}
output(sum%10);
}
return 0;
}
依题意,读入的第一行的格式分四个词,关键词语为第二个-变量名,和第四个-初始值,因此,通过投机取巧一个词读入两遍,后读入的赋值给变量,读入变量名和初始值。
其他读入方式见注释。
退出后,要计算总额。总额分大于10和小于等于10来考虑。
<=10:直接输出对应中文数字
大于10:如果十位是1的话,直接输出“十”,再输出个位数的数字对应汉字
十位不为1,先输出十位对应汉字,再单独输出一个汉字“十”,最后输出个位对应汉字
以下为测试数据:
输入示例1:
整数 钱包 等于 五
钱包 增加 四
钱包 减少 四
看看 钱包
输入示例2:
整数 袋子 等于 五
袋子 增加 十
袋子 增加 十
袋子 增加 十
袋子 增加 十
看看 袋子
输入示例3:
整数 我 等于 九
我 增加 四
我 减少 五
我 减少 八
看看 我
输入示例4:
整数 魔方 等于 十
魔方 增加 五
魔方 减少 三
魔方 增加 六
看看 魔方
目前版本的改进:
可对变量进行初始化,变量名也可改变啦。同时总额大于十小于一百也可以正确输出。
目前版本仍存在的带问题:
初始化、输入计算只能输入一个汉字(零~十)。
有空就再升级一下吧
完整代码:
#include<iostream>
#include<string.h>
using namespace std;
int sum;//总额
char var[10],ini[10],oper[100];//变量,初始化 operation 运算
int trans(char str[])
{
if(strcmp("零",str)==0)return 0;
if(strcmp("一",str)==0)return 1;
if(strcmp("二",str)==0)return 2;
if(strcmp("三",str)==0)return 3;
if(strcmp("四",str)==0)return 4;
if(strcmp("五",str)==0)return 5;
if(strcmp("六",str)==0)return 6;
if(strcmp("七",str)==0)return 7;
if(strcmp("八",str)==0)return 8;
if(strcmp("九",str)==0)return 9;
if(strcmp("十",str)==0)return 10;
}
void deal_add(char str[])
{
if(strcmp(" 增加 一",str)==0)sum+=1;
if(strcmp(" 增加 二",str)==0)sum+=2;
if(strcmp(" 增加 三",str)==0)sum+=3;
if(strcmp(" 增加 四",str)==0)sum+=4;
if(strcmp(" 增加 五",str)==0)sum+=5;
if(strcmp(" 增加 六",str)==0)sum+=6;
if(strcmp(" 增加 七",str)==0)sum+=7;
if(strcmp(" 增加 八",str)==0)sum+=8;
if(strcmp(" 增加 九",str)==0)sum+=9;
if(strcmp(" 增加 十",str)==0)sum+=10;
}
void deal_minus(char str[])
{
if(strcmp(" 减少 一",str)==0)sum-=1;
if(strcmp(" 减少 二",str)==0)sum-=2;
if(strcmp(" 减少 三",str)==0)sum-=3;
if(strcmp(" 减少 四",str)==0)sum-=4;
if(strcmp(" 减少 五",str)==0)sum-=5;
if(strcmp(" 减少 六",str)==0)sum-=6;
if(strcmp(" 减少 七",str)==0)sum-=7;
if(strcmp(" 减少 八",str)==0)sum-=8;
if(strcmp(" 减少 九",str)==0)sum-=9;
if(strcmp(" 减少 十",str)==0)sum-=10;
}
void output(int x)
{
if(x==0)cout<<"零";
if(x==1)cout<<"一";
if(x==2)cout<<"二";
if(x==3)cout<<"三";
if(x==4)cout<<"四";
if(x==5)cout<<"五";
if(x==6)cout<<"六";
if(x==7)cout<<"七";
if(x==8)cout<<"八";
if(x==9)cout<<"九";
if(x==10)cout<<"十";
}
int main()
{
for(int i=0;i<2;i++)cin>>var;//读入变量名
for(int i=0;i<2;i++)cin>>ini;//读入初始值
sum=trans(ini);//将初始值转换为数字,赋值给总额。
for(;;)
{
cin>>var;//通过cin读入变量名,遇到空格停止
gets(oper);//通过gets读入计算操作,但会读入前面的一个空格,所以上方的加减函数字符串前面有空格
deal_add(oper);//加
deal_minus(oper);//减
if(strcmp("看看",var)==0)break;//当读入“看看”时退出
}
if(sum<=10)output(sum);
if(sum>10)
{
int ten_position=sum/10;
if(ten_position==1)cout<<"十";
else{
output(ten_position);
cout<<"十";
}
output(sum%10);
}
return 0;
}
原文地址:https://www.cnblogs.com/LiangYC1021/p/12235959.html