zoukankan      html  css  js  c++  java
  • 面向对象程序设计2020第二次作业

    这个作业属于哪个课程 2020面向对象程序设计张栋班
    这个作业要求在哪里 【寒假作业2】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10231)
    这个作业的目标 完善代码、新建GitHub仓库并上传代码、制作编译脚本、进行单元测试并制作测试脚本、添加文件读取功能
    作业正文 【面向对象程序设计2020第二次作业】( https://www.cnblogs.com/dudu340/p/12255700.html)
    参考文献 1、【如何在github创建新的仓库项目】(https://blog.csdn.net/qq_35869389/article/details/79472564)2、【C语言中函数返回字符串的四种方法】(https://www.cnblogs.com/qingergege/p/6496683.html)3、【GitHub Desktop的简易使用方法】(https://blog.csdn.net/xiaolongqinghua/article/details/87785139) 4、【Windows批处理(cmd/bat)常用命令教程】(https://www.cnblogs.com/xpwi/p/9626959.html)
    一、编程题
    在这次作业中,作业要求我们对上次编程题的程序进行优化,要求每个函数的长度一般不超过15行。因此,在这次优化中,我主要针对输出进行优化。在上次的代码中,由于我在输出时使用枚举法进行输出,更由于在输入时的加减运算可能不止一次,那么最后输出的范围则可能很大,因此我用于输出的函数会很长。因此,我在这次函数中,即
    char shuchu(int sum);
    if(strcmp(b,str2)==0)
        if(sum<10)
            {
                printf("%c",shuchu(sum));	
    	}	
        else
    	{
    	    m=sum/10;n=sum%10;
    	    if(n==0)
    	        {
    		    printf("%c十",shuchu(m));	
    		} 
    	    else
    		{
    		    printf("%c十%c",shuchu(m),shuchu(n));
    	        }
    	}
    char shuchu(int x)
    	{
    		if(x==1)
    			return '一';
    		else 
    			if(x==2)
    				return '二';
    		else
    			if(x==3)
    				return '三';
    		else
    			if(x==4)
    				return '四';
    		else
    			if(x==5)
    				return '五';
    		else
    			if(x==6)
    				return '六';
    		else
    			if(x==7)
    				return '七';
    		else
    			if(x==8)
    				return '八';
    		else
    			return '九';			 
    	}
    

    但如果我这样优化,又会出现问题,即

    在编译时,这样的程序并不能编译成功,我试过对(一~九)加过双引号或者不加引号,但编译都不能成功,但如果不把函数值返回,我就无法在函数中将大于十的数输出。我在网上查到一些可以用函数输出字符串的方法(C语言中函数返回字符串的四种方法(https://www.cnblogs.com/qingergege/p/6496683.html)),但是还没有试验过能否也适用于中文的返回,会在之后去试试。
    至于命名规范这一问题,我认为,要想让每一个阅读程序的人更容易地理解每个函数的意思,那么首先应该见名知义。如果我们随意的命名每个函数的名字,诸如用x,y来命名,那么过一段时间之后可能连作者都不能理解程序了。因此,一个好的名字有助于我们更好的理解函数。我在之前程序中命名函数时都是采用拼音形式命名,碰上例如“钱包 增加 八”则会对应到“zengjia”这个函数。

    在作业中,要求制作一个编译脚本,并用该脚本编译代码,我选择的脚本语言是Windows批处理。
    Windows批处理:
    首先打开记事本,在记事本输入

    然后“另存”为文件名“xx.bat”,并且在“保存类型”中下拉“所有类型”,则可得到一个bat文件。但我在第一次弄完后得到一个乱码文件,即

    后来在群里大佬的建议下,改为用写字板,

    就可以得到一个正常的文件啦。

    然后开始编译脚本:方法一、(这个我参考了其他人的方法)

    @echo off
    echo 请输入文件所在磁盘
    set /p a=
    echo 正在转移到该磁盘
    cd "%a%"
    echo 请输入文件所在路径
    set /p b=
    echo 转移到文件路径
    cd "%b%"
    echo 请输入文件名
    set /p c=
    echo 编译开始
    gcc "%c%" -o try.exe
    if exist "try.exe" echo 编译成功
    if not exist "try.exe" echo 编译失败
    Pause
    

    但是我在编译时,并未能编译成功,

    我本来以为这与我代码本身存在问题有关;但后来我又写了一个“Hello World”的简单代码,仍然提示编译失败,那么应该不是代码本身的问题,在尝试后我在文件名后加上.cpp后,发现就可以编译成功了。


    方法二:(按照作业中的示例脚本)
    在写字板写上以下内容:

    gcc CCC.cpp -o lang.exe
    pause
    

    则可以在运行后得到一个lang的.exe文件

    接下来开始测试脚本:

    # include<stdio.h>
    # include<string.h>
    int main()
    	{
    		int zhi(char s[]);
    		char a[11][10]={"零","一","二","三","四","五","六","七","八","九","十"}; 
       		char b[6][10]={"傲","慢","与","偏","见"};
    		int i,j,k,t;
    		for(i=0;i<=9;i++)
    			{
    				printf("%s",a[i]);
    				t=zhi(a[i]);
    				if(t!=-2)
    					printf("pass");
    				else
    					printf("error");
    			}
    		for(i=0;i<=4;i++)
    			{
    				printf("%c\n",b[i]);
    				t=zhi(b[i]);
    				if(t!=-2)
    					printf("pass");
    				else
    					printf("error");
    			}
    		return 0;
    	}
    int zhi(char s[])
    	{
    		if(strcmp(s,"一")==0) return 1;
        	        else 
    		    if(strcmp(s,"二")==0) return 2;
       		else 
    		    if(strcmp(s,"三")==0) return 3;
       	 	else 
    		    if(strcmp(s,"四")==0) return 4;
        	        else 
    		    if(strcmp(s,"五")==0) return 5;
        	        else 
    		    if(strcmp(s,"六")==0) return 6;
        	        else 
    		    if(strcmp(s,"七")==0) return 7;
        	        else 
    		    if(strcmp(s,"八")==0) return 8;
        	        else 
    		    if(strcmp(s,"九")==0) return 9;
        	        else 
    		    if(strcmp(s,"零")==0) return 0;
        	        else return -2;
    	}
    

    并且在写字板上写下以下内容用于测试:

    @echo off
    cd d:
    echo 开始测试
    biancheng3.exe
    echo 测试结束
    Pause
    

    则测试成功

    通过在其他大佬的帮助下,明白了为了可以通过命令行读取一个文件,我还需要使用一个freopen函数。而操作方法就是在原函数中的main函数中再加上以下语句:

    printf("请输入文件名\n"); 
     char s[15];
     scanf("%s",s);
     freopen(s,"r",stdin);
    

    在写字板上写下要测试的内容:

    然后在编译时输入文件名,即可

    (这个不能编译出结果与我自己的代码本身有问题有关)
    二、实践题
    在这次实践题中,要求新建一个github仓库,并将该次作业中编程题中的代码以及脚本搬到仓库中。因此,首要问题便是如何新建一个仓库。首先,打开github页面,选择“Create a new repository”,即可出现一下这个界面,

    然后,在填好“Repository name”等信息后,即可进入下一个界面,

    那么,一个新的仓库我们就建好了。
    接下来就是将文件上传到我们新建的这个仓库了。
    安装git:
    下载git。首先,需要下载git安装文件, 安装好git之后,可以这样测试是否成功:安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!即

    使用github Desktop:
    首先打开github Desktop,则会出现这样一个界面:

    点击clone a repository,则

    往仓库里上传文件:
    我在这里碰上了一个大难题,打开github Desktop之后,我完全没有找到可以添加的按键,然后在查阅资料后,发现可以将需要添加的文件放在目录下,这就可以将文件贴在仓库里了。这样我就将文件上传到github了。

    然后填好一下的内容后,就可以点击“Commit to master”。


    反思与总结:
    总的来说,这次作业对我的挑战很大,毕竟绝大部分对我来说都是新知识(之前真的一点都不会),但是,经过百度以及参考多位大佬的作业,还是艰难的做完作业,收获良多。但还有一些部分并没有真正的做好,会在之后的时间再去努力。

  • 相关阅读:
    java IO选择流的原则及其与IO流相关类的关系
    图形用户界面(graphical user interface)
    泛型
    流、文件及基于文本的应用
    java线程
    多态与方法调用
    在eclipse中使用javap工具反汇编
    java类的访问控制符与其他几个特殊修饰符的总结
    java中几个特殊的类
    @property在内存管理中的参数问题
  • 原文地址:https://www.cnblogs.com/dudu340/p/12255700.html
Copyright © 2011-2022 走看看