zoukankan      html  css  js  c++  java
  • 第二次作业

    面向对象程序设计2020第二次作业

    这个作业属于哪个课程 2020面向对象程序设计张栋班
    这个作业要求在哪里 面向对象程序设计寒假作业2
    这个作业的目标 熟悉github仓库的使用,对前一次的编程题目进行优化 制作脚本
    作业正文 第二次作业
    其它参考文献 命名规范 编写批处理文件 批处理常用命令 freopen

    一.编程题

    实践题

    1.先下载一个github desktop如下

    在file那里有个 new responsibility即可创建

    把作业文件放进本地的仓库里

    然后就会出现

    在github上就会找的到了

    编程题

    继续完成作业一的编程题。
    对于命名规范,参考了文献,有驼峰命令法,匈牙利命名法,帕斯卡(pascal)命名法。但是这个我真的改不动,不知道如何下手,还要继续学习。
    优化架构,一般要求每个函数长度不超过15行。
    优化规范,尤其是命名规范。
    制作一个编译脚本
    我在原来的基础上,并没有考虑到输入会有几十,几十几这样的输入,而输出可以增加到几百,上千的我就没有去考虑了。
    下面是我的三个函数
    1.对于输入的个转换成十位数字位数字

    int switch1(char shu[])
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(strcmp(hanzi[i],shu)==0)
        	return i;
    	}
    }
    

    2.对于单个字符转换成汉字

    int switch1(char shu[])
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(strcmp(hanzi[i],shu)==0)
        	return i;
    	}
    }
    

    3.对于输入几十的输入,这个我还没有想到要怎么缩短,感觉都挺重要的,有个很奇怪的问题,对我与我a字符数组的转换,我发现少了一个’’的话strcmp函数判断的结果会有偏差,因为字符数组后面也会自动补吧,然后strcmp考虑进去了所以我卡了挺久的。

    int switch3(char shu[]) 
    {
    	int i,t=0,j;	char a[50];
    	for(i=0;i<=10;i++)
        {
        	if(strncmp(hanzi[i],shu,2)==0)
        	{
        	t=t+i*10;   break;
            }
    	}
    	for(j=0;j<2;j++)
    	{
    	if(strlen(shu)>5) 	a[j]=shu[j+4];
    	else 	a[j]=shu[j+2];
        }
        a[2]='';
    	for(i=0;i<10;i++)
    	{
    		if(strcmp(a,hanzi[i])==0)
    		t+=i;
    	}
    	return t;
    }
    

    完整代码如下

    #include<stdio.h>
    #include<string.h>
    char hanzi[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    int switch1(char shu[]);
    void switch2(int shu1);
    int switch3(char shu[]);
    int main()
    {
        char a[50], b[50], c[50], d[50];
        int n,s,i,t;
        char e[50], f[50], g[50],h[50];
        scanf("%s %s %s %s", a, b, c, d);
        if (strcmp("整数", a) == 0)
        {
            if (strcmp("等于", c) == 0)
            {
                n = switch1(d);
        while(1)
        {
            scanf("%s",e);
            if(strcmp("看看",e)==0)
            break;
            scanf("%s %s",f,g);
            if(strcmp("增加", f) != 0&&strcmp("减少",f) != 0)
            {
                printf("Error!");
                break;
            }
            if (strcmp("增加", f) == 0&&strlen(g)<3)
            {
                n += switch1(g);
            }
            else if(strcmp("增加", f) == 0&&strlen(g)>3)
            {
            	n += switch3(g);
    		}
            if (strcmp("减少",f) == 0&&strlen(g)<3)
            {
                n -= switch1(g);
            }
            else if(strcmp("减少", f) == 0&&strlen(g)>3)
            {
            	n -= switch3(g);
    		}
        }
        scanf("%s",h);
        if (strcmp("看看", e) == 0)
        {
            if (n <= 10)
            {
                switch2(n);
            }
            else if (n > 10&&n<100)
            {
                if (n % 10 == 0)
                {
                    s = n / 10;
                    switch2(s);
                    printf("十");
                }
                else
                {
                    s = n / 10;
                    i = n % 10;
                    switch2(s);
                    printf("十");
                    switch2(i);
                }
            }
            else if(n>=100)
            {
            	if(n%100==0)
            	{
            		s = n / 100;
                    switch2(s);
                    printf("百");
    			}
    			else if(n%100!=0&&n%10==0)
    			{
    				s=n/100;
    				switch2(s);
    				printf("百");
    				i=n/10%10;
    				switch2(i);
    				printf("十");
    			}
    			else
    			{
    				s=n/100;
    				switch2(s);
    				printf("百");
    				i=n/10%10;
    				switch2(i);
    				printf("十");
    				t=n%100;
    				switch2(t);
    			}
    		}
        }
        } 
        else
        printf("Error!");
        } 
        else
        printf("Error!");
        return 0;
    }
    int switch1(char shu[])
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(strcmp(hanzi[i],shu)==0)
        	return i;
    	}
    }
    void switch2(int shu1)
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(shu1==i)
        	printf("%s",hanzi[i]);
    	}
    }
    int switch3(char shu[]) 
    {
    	int i,t=0,j;	char a[50];
    	for(i=0;i<=10;i++)
        {
        	if(strncmp(hanzi[i],shu,2)==0)
        	{
        	t=t+i*10;   break;
            }
    	}
    	for(j=0;j<2;j++)
    	{
    	if(strlen(shu)>5) 	a[j]=shu[j+4];
    	else 	a[j]=shu[j+2];
        }
        a[2]='';
    	for(i=0;i<10;i++)
    	{
    		if(strcmp(a,hanzi[i])==0)
    		t+=i;
    	}
    	return t;
    }
    

    单元测试

    制作编译脚本

    话说这个做脚本真的完全看不懂。
    我搜了一下资料资料,制作脚本可以用系统自带的记事本,输入windows批处理命令来进行操作。
    然后脚本代码最后一定有一个pause,不然自动结束连图都截不到

    然后文件名称后缀是.bat,编码需要ANSI,不然会出现一堆中文奇怪字体。

    下面是我的编译过程

    经过这个就会出现

    测试函数

    下面是我的第一个switch1函数的测试

    #include<stdio.h>
    #include<string.h>
    char hanzi[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    int switch1(char shu[])
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(strcmp(hanzi[i],shu)==0)
        	return i;
    	}
    }
    int main()
    {
    	int i,b;
    	char a[50]={"十"};
    	b=switch1(a);
    	if(b==10)
    	printf("true
    ");
    	else
    	printf("false
    ");
     } 
    

    脚本代码如下

    @echo off
    echo 测试开始
    gcc test1.cpp -o test1.exe
    test1
    echo 测试结束
    pause
    


    结果是这样。
    接下来第二个函数
    测试代码如下

    #include<stdio.h>
    #include<string.h>
    char hanzi[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    void switch2(int shu1)
    {
        int i;
        for(i=0;i<=10;i++)
        {
        	if(shu1==i)
        	printf("%s
    ",hanzi[i]);
    	}
    }
    int main()
    {
    	int a=10;
    	switch2(a);
    } 
    

    脚本代码

    @echo off
    echo 测试开始
    gcc 未命名1.cpp -o test.exe
    test
    echo 测试结束
    pause
    


    第三个函数

    #include<stdio.h>
    #include<string.h>
    char hanzi[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    int switch3(char shu[]) 
    {
    	int i,t=0,j;	char a[50];
    	for(i=0;i<=10;i++)
        {
        	if(strncmp(hanzi[i],shu,2)==0)
        	{
        	t=t+i*10;   break;
            }
    	}
    	for(j=0;j<2;j++)
    	{
    	if(strlen(shu)>5) 	a[j]=shu[j+4];
    	else 	a[j]=shu[j+2];
        }
        a[2]='';
    	for(i=0;i<10;i++)
    	{
    		if(strcmp(a,hanzi[i])==0)
    		t+=i;
    	}
    	return t;
    }
    int main()
    {
    	char a[50]={"三十五"};
    	printf("%d
    ",switch3(a));
    } 
    

    脚本代码

    @echo off
    echo 测试开始
    gcc test3.cpp -o test3.exe
    test3
    echo 测试结束
    pause
    

    结果

    增加功能

    这个瞄了别的大佬的博客才知道要用freopen函数来实现

    形参说明:
    filename:需要重定向到的文件名或文件路径。
    mode:代表文件访问权限的字符串。例如,"r"表示“只读访问”、"w"表示“只写访问”、"a"表示“追加写入”。
    stream:需要被重定向的文件流。
    返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。
    参考文献在上面
    

    下面是我的测试文件


    这是增加的,freopen中的r代表的是只读写入,接下来只要写上文件名就不用管汉字的输入了,直接得出结果。

            char p[100];
    	printf("输入文件名称
    ") ;
    	scanf("%s",p);
    	freopen(p,"r",stdin) ;
    
  • 相关阅读:
    RabbitMq 集群配置
    获取 input 单选框和多选框的值
    js 获取 通过 ”?“ 或者 ”&“ url 传过来参数值
    Java 对文件的读取操作
    java 链接jdbc
    了解EBP寄存器
    节后后遗症
    [转]web service实现原理与异步调用
    Javascript实现无刷新分页
    邮件发送
  • 原文地址:https://www.cnblogs.com/Misanthropel/p/12242947.html
Copyright © 2011-2022 走看看