寒假作业2

这个作业属于哪个课程 <2020面向对象程序设计张栋班>
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1.建立GitHub仓库,并把编程题代码与脚本上传到仓库里 2.优化上次编程题,并编写测试脚本,添加功能让它能够读取TXT文档
作业正文 ....
其他参考文献 main函数参数解析, Windows(bat)常用命令教程

实践题

作业要求:

新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。用法自行百度。

作业过程

由于不知道为甚么,GitHub下载不了
寒假作业2_第1张图片
寒假作业2_第2张图片

我只能在网站里面上传我的文件了
寒假作业2_第3张图片

编程题

作业要求:

1.继续完成作业一的编程题。
2.优化架构,一般要求每个函数长度不超过15行。
3.优化规范,尤其是命名规范。
4.制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
5.进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
6.在作业一编程题的基础上添加以下功能:
7.通过命令行读取一个文件,然后运行这个文件。如我的程序叫lang,lang 1.txt代表我要运行1.txt这个文本中的代码。

作业过程

1.继续完善编程题功能

前一次作业中,由于时间以及能力问题,有一些问题没有解决:1.输入增加或减少的数量不能超过10。2.上次不会用函数,导致代码长度特别长且繁琐。3.编程习惯不好,各部分没有分层,导致代码很不好看。
因此我把我的代码功能大概分成了三个部分,分别由三个函数实现。
第一个函数int f1(char b[])

int f1(char b[])/*个位数汉字转数字*/ 
{
    int t;
 if(strcmp(b,"零")==0)
 t=0;
 else if(strcmp(b,"一")==0)
 t=1;
 else if(strcmp(b,"二")==0)
 t=2;
 else if(strcmp(b,"三")==0)
 t=3;
 else if(strcmp(b,"四")==0)
 t=4;
 else if(strcmp(b,"五")==0)
 t=5;
 else if(strcmp(b,"六")==0)
 t=6;
 else if(strcmp(b,"七")==0)
 t=7;
 else if(strcmp(b,"八")==0)
 t=8;
 else if(strcmp(b,"九")==0)
 t=9;
 else if(strcmp(b,"十")==0)
 t=10;
 return t;
}

这个函数实现了个位数字汉字转阿拉伯数字用于增加或者减少计算,以及作为下一个函数f2两位数的汉字转阿拉伯数字的基础

int f2(char d[])/*零到九十九汉字转数字*/ 
{
    char a[100];
    int l;
    if(strlen(d)==2)
        l=f1(d);
    else if(strlen(d)==4)
    {
        a[0]=d[0];
        a[1]=d[1];
        a[2]='\0';
        if(strcmp(a,"十")!=0)
        {
         l=f1(a)*10;
        }
        else
    {
        a[0]=d[2];
        a[1]=d[3];
        a[2]='\0';
    {
        l=f1(a)+10;
    }
    }
    }
    else
    {
        a[0]=d[0];
        a[1]=d[1];
        a[2]='\0';
        {
         l=f1(a)*10;
        }
        a[0]=d[4];
        a[1]=d[5];
        a[2]='\0';
        {
         l=l+f1(a);
        }
    }
     return l;
}

这个功能是这次作业新加入的,我发现一个汉字占两个字节的空间,并以此为依据,将输入分为三种情况:1.输入只有一个汉字2.输入为两个汉字3.输入为三个汉字。其中输入为一个汉字的情况就是阿拉伯数字0到10的情况,输入为两个汉字要细分为两种情况考虑一种是整十的数,一种是十到二十的数,其他情况就是输入为三个汉字的情况
第三个函数f3的功能是把数字转化成汉字

void f3(int t)/*数字转汉字*/ 
{if(t==0)
  printf("零");
 if(t==1)
  printf("一");
 if(t==2)
  printf("二");
 if(t==3)
  printf("三");
 if(t==4)
  printf("四");
 if(t==5)
  printf("五");
 if(t==6)
  printf("六");
 if(t==7)
  printf("七");
 if(t==8)
  printf("八");
 if(t==9)
  printf("九"); 
}

由于零到九十九的表达都只用到零到十这十一个汉字,因此只要把零到十进行转化就行,总代吗如下

#include
#include
#include 
int f1(char b[])/*个位数汉字转数字*/ 
{
    int t;
 if(strcmp(b,"零")==0)
 t=0;
 else if(strcmp(b,"一")==0)
 t=1;
 else if(strcmp(b,"二")==0)
 t=2;
 else if(strcmp(b,"三")==0)
 t=3;
 else if(strcmp(b,"四")==0)
 t=4;
 else if(strcmp(b,"五")==0)
 t=5;
 else if(strcmp(b,"六")==0)
 t=6;
 else if(strcmp(b,"七")==0)
 t=7;
 else if(strcmp(b,"八")==0)
 t=8;
 else if(strcmp(b,"九")==0)
 t=9;
 else if(strcmp(b,"十")==0)
 t=10;
 return t;
}
int f2(char d[])/*零到九十九汉字转数字*/ 
{
    char a[100];
    int l;
    if(strlen(d)==2)
        l=f1(d);
    else if(strlen(d)==4)
    {
        a[0]=d[0];
        a[1]=d[1];
        a[2]='\0';
        if(strcmp(a,"十")!=0)
        {
         l=f1(a)*10;
        }
        else
    {
        a[0]=d[2];
        a[1]=d[3];
        a[2]='\0';
    {
        l=f1(a)+10;
    }
    }
    }
    else
    {
        a[0]=d[0];
        a[1]=d[1];
        a[2]='\0';
        {
         l=f1(a)*10;
        }
        a[0]=d[4];
        a[1]=d[5];
        a[2]='\0';
        {
         l=l+f1(a);
        }
    }
     return l;
}
void f3(int t)/*数字转汉字*/ 
{if(t==0)
  printf("零");
 if(t==1)
  printf("一");
 if(t==2)
  printf("二");
 if(t==3)
  printf("三");
 if(t==4)
  printf("四");
 if(t==5)
  printf("五");
 if(t==6)
  printf("六");
 if(t==7)
  printf("七");
 if(t==8)
  printf("八");
 if(t==9)
  printf("九"); 
}
int main(int argc,char *argv[])
{
    char a[20],b[5],c[5],d[5],e[5],f[5];
    int t,t1,t2,n,i,l;
    if(argc!=1)
    { 
     freopen(argv[1],"r",stdin);
    } 
    scanf("%s%s%s%s",e,a,f,b);
    
    t=f2(b);
    for(i=0;;i++)
    {
         scanf("%s",b);
        if(strcmp(b,"看看")==0)
        {
         scanf("%s",c);
         break; 
        }
        else
        {
            scanf("%s",c);
                if(strcmp(c,"增加")==0)
                {
                scanf("%s",d);
                t=t+f2(d);
                }
                else 
                {
                scanf("%s",d);
                t=t-f2(d);
                }
        }
    } 
    if(t/10==0)
    f3(t);
    else
    {
    t2=t%10;
    t1=t/10;
        if(t1==1)
            {
            printf("十");
            f3(t2);
            }
        else if(t2==0)
            {
            f3(t1);
            printf("十");
            }
        else
            {
            f3(t1);
            printf("十");
            f3(t2);
            }
    }
    return 0;
 }  

至于编译脚本,对于我来说,我还得先解决一下上次作业中我编译C语言程序的时候无法找到stdio.h的情况,我重新检查了下我的环境变量配置,已经确定我的include与lib还有vc里的bin都有设置进去,我觉得可能是我当时下载vs2019的时候没有下载好,导致头文件丢失,所以我最后放弃了使用vs里边cl.exe这个编译器,我就想试试以前使用的Dev c++里面的编译器,我就照猫画虎,把Dev c++里面的include与lib还有bin设置进去,再进行编译,而这个编译器编译成功并不会显示任何东西,我以为编译失败了,退出后发现文件夹中居然出现了我要的可执行文件,这说明编译成功了。。。。然后我就用Windows的批处理写了一个编译的脚本,期初一直不知道怎么写,看了下同学们的作业,大概知道怎么回事,也写了一个

寒假作业2_第4张图片

运行后可以生成exe文件
寒假作业2_第5张图片
然后进行单元测试,我写了个测试脚本测试了f1跟f2那两个有返回值的函数,随便选取几个数进行测试
寒假作业2_第6张图片
这是脚本内容
寒假作业2_第7张图片

里面测试脚本.cpp内容

#include
#include
#include 
int f1(char b[])/*个位数汉字转数字*/ 
{int t;
if(strcmp(b,"零")==0)
 t=0;
 else if(strcmp(b,"一")==0)
t=1;
 else if(strcmp(b,"二")==0)
 t=2;
 else if(strcmp(b,"三")==0)
 t=3;
 else if(strcmp(b,"四")==0)
 t=4;
 else if(strcmp(b,"五")==0)
 t=5;
 else if(strcmp(b,"六")==0)
 t=6;
 else if(strcmp(b,"七")==0)
 t=7;
 else if(strcmp(b,"八")==0)
 t=8;
 else if(strcmp(b,"九")==0)
t=9;
else if(strcmp(b,"十")==0)
t=10;
 return t;
}
int f2(char d[])/*零到九十九汉字转数字*/ 
{
    char a[100];
    int l;
        if(strlen(d)==2)
    l=f1(d);
    else if(strlen(d)==4)
    {
        a[0]=d[0];
        a[1]=d[1];
        a[2]='\0';
        if(strcmp(a,"十")!=0){
       l=f1(a)*10;
    }else
    {
        a[0]=d[2];
        a[1]=d[3];
        a[2]='\0';
    {
        l=f1(a)+10;
    }
    }
    }
    else
    {a[0]=d[0];a[1]=d[1];a[2]='\0';
    {l=f1(a)*10;
    }
    a[0]=d[4];a[1]=d[5];a[2]='\0';
    {
    l=l+f1(a);
    }}
     return l;
}
int main()
{
    char b[10],a[10];
    int i,n=10,c[10]={0,5,10,11,15,20,27,35,90,99};
    
    freopen("C:\\Users\\86151\\Desktop\\编程作业\\test2.txt","r",stdin);
    for(i=1;i

然后就是添加功能让这个程序可以读取TXT文档中的内容,参考了其他同学的作业,知道要学习freopen的用法,百度看,用法要么写的零零星星,要么太多专有名词根本看不懂,然后去找了其他同学的参考文献,总算知道怎么一回事了,
只要在main函数里加int argc,char *argv[]这两个变量就可以用freopen了,然后写了两个测试用的txt寒假作业2_第8张图片
然后用cmd进行测试寒假作业2_第9张图片

你可能感兴趣的:(寒假作业2)