• 面向对象程序设计寒假作业3题解


    这个作业属于哪个课程 2020面向对象程序设计
    这个作业要求在哪里 面向对象程序设计作业3
    这个作业的目标 继续完成作业二的编程题,优化架构,思考代码的拓展性
    作业正文 本文

    解题

    相较于作业二的代码,本次添加了以下功能

    ①媒介不再单一

    支持多种“钱包形式”的输入

    ②输入次数不再限制

    原本只能输入3次

    ③支持负数输入!

    针对负数输入,添加了switchMinus函数,并且针对此项功能对判断“增加”还是“减少”的In_Or_De函数同时进行了修改,在这个函数内进行是否为“负数”的判定
    代码实现如下

    int switchMinus(char* s)
    {
    	int m, n;
    	for (m = 0; m < 2; m++)
    	{
    		for (n = 0; n < strlen(s); n++)
    			s[n] = s[n + 1];
    	}
    	j = Ch_Switch_Num(s);
    	return j;
    }
    
    int In_Or_De(char* s,int a)
    {
    	while (strcmp(s, "看看") != 0)
    	{
    		scanf("%s", s);
    		if (strcmp(s, "增加") == 0)
    		{
    			scanf("%s", s);
    			if (strcmp(extract(buffer, s), "负") == 0)
    				a -= switchMinus(s);
    			else
    				a += Ch_Switch_Num(s);
    		}
    		else if (strcmp(s, "减少") == 0)
    		{
    			scanf("%s", s);
    			if (strcmp(extract(buffer, s), "负") == 0)
    				a += switchMinus(s);
    			else
    				a -= Ch_Switch_Num(s);
    		}
    		scanf("%s", s);
    	}
    	return a;
    }
    

    对于新增功能①和②,在In_Or_De函数中对循环条件的判断进行了修改,原先是限制了同一种钱包媒介

    while (strcmp(s, "看看") != 0)
    

    完整代码

    #include<stdio.h>
    #include<string.h>
    int j;
    char buffer[5] = "";
    int In_Or_De(char* s, int a);//判断是增加还是减少
    void output(int a);//输出结果
    int Ch_Switch_Num(char* s);//将汉字转为数字
    int changeSingle(char* s);//将单个汉字转换为数字
    char *extract(char* a, char* b);//提取“十”字前后的数字
    int switchMinus(char* s);//转换负数
    char chinese[11][3] = { "零","一","二","三","四","五","六","七","八","九","十" };
    int main()
    {
    	char s[10];char sp[10];
    	int i, caibu;
    	scanf("%s", s);
    	scanf("%s", s);
    	for (i = 0; i < 2; i++)
    		scanf("%s", s);
    	caibu = Ch_Switch_Num(s);
    	scanf("%s", s);
    	caibu = In_Or_De(s,caibu);
    	scanf("%s", s);
    	output(caibu);
    	return 0;
    }
    int In_Or_De(char* s,int a)
    {
    	while (strcmp(s, "看看") != 0)
    	{
    		scanf("%s", s);
    		if (strcmp(s, "增加") == 0)
    		{
    			scanf("%s", s);
    			if (strcmp(extract(buffer, s), "负") == 0)
    				a -= switchMinus(s);
    			else
    				a += Ch_Switch_Num(s);
    		}
    		else if (strcmp(s, "减少") == 0)
    		{
    			scanf("%s", s);
    			if (strcmp(extract(buffer, s), "负") == 0)
    				a += switchMinus(s);
    			else
    				a -= Ch_Switch_Num(s);
    		}
    		scanf("%s", s);
    	}
    	return a;
    }
    void output(int a)
    {
    	if (a <= 10)
    		printf("%s", chinese[a]);
    	else if (a > 10 && a < 20)
    		printf("十%s", chinese[a - 10]);
    	else if (a % 10 == 0)
    		printf("%s十", chinese[a / 10]);
    	else
    		printf("%s十%s", chinese[a / 10], chinese[a % 10]);
    }
    int Ch_Switch_Num(char* s)
    {
    	int i;
    	if (strlen(s) == 2)//处理0-9的汉字
    		j=changeSingle(s);
    	else if (strlen(s) == 4)//处理10-19以及十的倍数的汉字
    	{
    		strcpy(buffer,extract(buffer, s));
    		if (strcmp(buffer, "十") == 0)//处理10-19的汉字
    			j = 10 + changeSingle(extract(buffer,s+2));
    		else//处理十的倍数
    			j = changeSingle(buffer) * 10;
    	}
    	else//处理几十几的汉字
    		j = changeSingle(extract(buffer, s)) * 10 + changeSingle(extract(buffer, s + 4));
    	return j;
    }
    int changeSingle(char* s)
    {
    	int i;
    	for (i = 0; i < 11; i++)
    	{
    		if (strcmp(s, chinese[i]) == 0)
    			return i;
    	}
    }
    char *extract(char* a, char* b)
    {
    	a[0] = b[0];
    	a[1] = b[1];
    	return a;
    }
    int switchMinus(char* s)
    {
    	int m, n;
    	for (m = 0; m < 2; m++)
    	{
    		for (n = 0; n < strlen(s); n++)
    			s[n] = s[n + 1];
    	}
    	j = Ch_Switch_Num(s);
    	return j;
    }
    

    思考

    对于扩大输入范围,如增大到几百、几千,目前的想法是依旧使用strlen函数,判断输入中文的长度,在不同长度下考虑多种情况,比如在2字节下新增“五百”“一千”的情况,和九十九以内的输入没有太大的区别

  • 相关阅读:
    thymeleaf对数据库HTML内容解析
    最近用ajax+七牛云+springboot上传图片
    设计二级评论记录
    数据结构实验8:内部排序
    数据结构实验7:实现二分查找、二叉排序(查找)树和AVL树
    数据结构实验6:C++实现二叉树类
    C++实现链队类——合肥工业大学数据结构实验5:链式队列
    数据结构实验4:C++实现循环队列
    数据结构实验3:C++实现顺序栈类与链栈类
    数据结构实验2:C++实现单链表类
  • 原文地址:https://www.cnblogs.com/111900811cocoa/p/12307214.html
Copyright © 2020-2023  润新知