面向对象程序设计编程题完善1.0

题目如下:

编程题(请使用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

时间: 2024-10-01 07:50:03

面向对象程序设计编程题完善1.0的相关文章

POJ C++程序设计 编程题#10:输出指定结果二

编程题#10:输出指定结果二 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 通过填空使得程序输出的结果符合下面的要求. #include <iostream> #include <map> using namespace std; // 在此处补充你的代码 int A::count = 0; void func(B b) { } int mai

POJ C++程序设计 编程题#4 字符串操作

编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个字符串(从1开始编号),每个字符串中的字符位置从0开始编号,长度为1-500,现有如下若干操作: copy N X L:取出第N个字符串第X个字符开始的长度为L的字符串. add S1 S2:判断S1,S2是否为0-99999之间的整数,若是则将其转化为整数做加法,若不是,则作字符串加法,返回

POJ C++程序设计 编程题#3 Set 编程作业—STL2

编程题#3:Set 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 5000ms 内存限制: 100000kB 描述 现有一整数集(允许有重复元素),初始为空.我们定义如下操作: add x 把x加入集合 del x 把集合中所有与x相等的元素删除 ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下输出. add 输出操作后集合中x的个数 del 输出操作前集合中x的个数 ask 先输出0或1表示x是否曾

c++面向对象程序设计 课后题 答案 谭浩强 第四章

c++面向对象程序设计课后题答案 谭浩强 第四章 1: #include <iostream> using namespace std; class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} double get_real(); double get_imag(); void display(); private: double real; double imag;

POJ C++程序设计 编程题#9:人群的排序和分类

编程题#9:人群的排序和分类 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 对人群按照输入的信息进行排序和分类. #include <iostream> #include <set> #include <iterator> #include <algorithm> using namespace std; // 在此处补

POJ C++程序设计 编程题#2 编程作业—文件操作与模板

编程题#2: 实数的输出格式 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利用流操纵算子实现: 输入一个实数,先以非科学计数法输出,小数点后面保留5位有效数字:再以科学计数法输出,小数点后面保留7位有效数字. 注意:在不同系统.编译器上的输出格式略有不同,但保证在程序中采用默认格式设置一定能在OJ平台上得到正确结果. 输入 以非科学计数法表示的一个正实数,保证可以用dou

POJ C++程序设计 编程题#3 编程作业—文件操作与模板

编程题#3: 整数的输出格式 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 1000kB 描述 利用流操纵算子实现: 输入一个整数,先将该整数以十六进制输出,然后再将该整数以10个字符的宽度输出,宽度不足时在左边补0. 注意:在不同系统.编译器上的输出格式略有不同,但保证在程序中采用默认格式设置一定能在OJ平台上得到正确结果. 输入 一个正整数,保证可以用int类型存储. 输出 第一行:以十六进

POJ C++程序设计 编程题#5 计算数组的低3位之和

编程题#5:计算数组的低3位之和 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 输入一个正整数构成的数组a[0], a[1], a[2], ... , a[n-1], 计算它们的二进制低3位之和. #include <iostream> #include <vector> #include <algorithm> using nam

POJ C++程序设计 编程题#4:计算整数平方和

编程题#4:计算整数平方和 来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 总时间限制: 1000ms 内存限制: 1024kB 描述 下列程序每次读入一个整数N,若N为0则退出,否则输出N和N的平方. #include <iostream> using namespace std; // 在此处补充你的代码 int main(int argc, char* argv[]) { CType obj; int n; c