zoukankan      html  css  js  c++  java
  • 面向对象程序设计寒假作业2题解

    作业描述 详情
    这个作业属于哪个课程 2020面向对象程序设计
    这个作业要求在哪里 面向对象程序设计寒假作业2
    这个作业的目标 1.实践题:新建GitHub仓库,并将作业上传至该仓库 2.编程题:优化代码、编译脚本、添加功能
    作业正文 面向对象程序设计寒假作业2题解
    其他参考文献 desktop用法 [power shell的用法](https://www.cnblogs.com/lsdb/p/9531338.html"power shell的用法") Python中os.system的用法 C语言常见命名法

    一、实践题

    新建GitHub仓库

    上传编程题代码至仓库

    二、编程题

    首先是对作业一的编程题进行优化
    题目要求:
    ①优化架构,一般要求每个函数长度不超过15行。
    ②优化规范,尤其是命名规范。
    对于要求①,最先想到的是有没有办法优化一下函数算法,对着代码发了一会儿呆发现这条路太难了,走不通,压到20行左右的时候怎么也挤不出5行
    于是想到了函数嵌套套娃,将原本的函数分为更多的函数,更加模块化
    对于要求②,参考了骆驼命名法和下划线命名法
    除main函数外,共有5个函数

    int In_Or_De(char* s, char * sp,int a);//判断是增加还是减少
    void output(int a);//输出结果
    int Ch_Switch_Num(char* s);//将汉字转为数字
    int changeSingle(char* s);//将单个汉字转换为数字
    char *extract(char* a, char* b);//提取“十”字前后的数字
    

    Part1.输入

    int main()
    {
    	char s[10];char sp[10];
    	int i, caibu;
    	scanf("%s", s);
    	scanf("%s", s);
    	strcpy(sp, s);
    	for (i = 0; i < 2; i++)
    		scanf("%s", s);
    	caibu = Ch_Switch_Num(s);
    	scanf("%s", s);
    	caibu = In_Or_De(s,sp,caibu);
    	scanf("%s", s);
    	output(caibu);
    	return 0;
    }
    
    int In_Or_De(char* s, char* sp,int a)
    {
    	while (strcmp(s, sp) == 0)
    	{
    		scanf("%s", s);
    		if (strcmp(s, "增加") == 0)
    		{
    			scanf("%s", s);
    			a += Ch_Switch_Num(s);
    		}
    		else if (strcmp(s, "减少") == 0)
    		{
    			scanf("%s", s);
    			a -= Ch_Switch_Num(s);
    		}
    		scanf("%s", s);
    	}
    	return a;
    }
    

    Part.2转换

    int Ch_Switch_Num(char* s)
    {
    	char buffer[5] = "";
    	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;
    }
    

    Part3.输出

    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]);
    }
    

    完整代码

    #include<stdio.h>
    #include<string.h>
    int j;
    int In_Or_De(char* s, char * sp,int a);//判断是增加还是减少
    void output(int a);//输出结果
    int Ch_Switch_Num(char* s);//将汉字转为数字
    int changeSingle(char* s);//将单个汉字转换为数字
    char *extract(char* a, char* b);//提取“十”字前后的数字
    char chinese[11][3] = { "零","一","二","三","四","五","六","七","八","九","十" };
    int main()
    {
    	char s[10];char sp[10];
    	int i, caibu;
    	scanf("%s", s);
    	scanf("%s", s);
    	strcpy(sp, s);
    	for (i = 0; i < 2; i++)
    		scanf("%s", s);
    	caibu = Ch_Switch_Num(s);
    	scanf("%s", s);
    	caibu = In_Or_De(s,sp,caibu);
    	scanf("%s", s);
    	output(caibu);
    	return 0;
    }
    int In_Or_De(char* s, char* sp,int a)
    {
    	while (strcmp(s, sp) == 0)
    	{
    		scanf("%s", s);
    		if (strcmp(s, "增加") == 0)
    		{
    			scanf("%s", s);
    			a += Ch_Switch_Num(s);
    		}
    		else if (strcmp(s, "减少") == 0)
    		{
    			scanf("%s", s);
    			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)
    {
    	char buffer[5] = "";
    	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;
    }
    

    制作编译脚本

    刚看到这里的时候确实有点被吓退了,完全没有接触过的内容,一点头绪都没有,在查阅了power shell、shell、Windows批处理的相关资料后后还是没有什么头绪
    最近正好在自学Python,那天看到一位大佬(感谢)的脚本使用了Python,于是我选择了PythonPython牛逼
    引入os模块,调用os.system方法

    有exe文件出现,编译成功

    单元测试

    一开始把问题想的太复杂,问了同学后才知道是自己想太多
    所有函数中转换函数Ch_Switch_Num函数最为重要,因此选择她进行测试
    测试代码

    int main(void)
    {
    	test("九十九", 99);
    	test("零", 0);
    	test("一", 1);
    	test("十", 10);
    	test("五十", 50);
    	test("六十三", 63);
    	test("七十七", 77);
    	printf("以下为错误测试
    ");
    	test("sekiro", 99);
    	test("真", 66);
    	test("好", 1);
    	test("玩", 2);
    	return 0;
    		
    }
    void test(char* s, int a)
    {
    	if (Ch_Switch_Num(s) == a)
    		printf("pass
    ");
    	else
    		printf("error
    ");
    }
    

    添加功能

    参考了同学的作业使用了freopen()函数,在代码中添加freopen()便能实现功能的添加

  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/111900811cocoa/p/12260305.html
Copyright © 2011-2022 走看看