面向对象程序设计寒假作业2

这个作业属于哪个课程 2020年面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1继续完成编程题 2新建一个github仓库,并把作业推送到该仓库 3发布博客
作业正文 作业2
其他参考文献 1GitHub Desktop的下载及其使用 2Windows批处理常用命令教程

实践题

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

1.下载github desktop,进入首页如下图

面向对象程序设计寒假作业2_第1张图片

2进行注册,点在右上角file,点击new repository

面向对象程序设计寒假作业2_第2张图片

3进入仓库所在文件夹,把作业相关文件复制到该文件夹,再点击commit to master

面向对象程序设计寒假作业2_第3张图片
面向对象程序设计寒假作业2_第4张图片

编程题(请使用C语言或者C++完成以下题目):

  • 继续完成作业一的编程题。
  • 优化架构,一般要求每个函数长度不超过15行。
  • 优化规范,尤其是命名规范。
  • 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。

1先进行一个尝试,打开记事本,写下内容

另存为.bat
面向对象程序设计寒假作业2_第5张图片
按照大佬们给的代码,复制打开记事本,生成.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

!然后我运行出来的结果为
面向对象程序设计寒假作业2_第6张图片
就非常的懵,后来经过百度得知要添加环境变量
win+r,打开命令行, 输入gcc -v 如果运行出来如下图所示就表明添加成功
面向对象程序设计寒假作业2_第7张图片

但是!添加成功完成后又遇到了新的问题,运行结果为
面向对象程序设计寒假作业2_第8张图片

后来在和同学讨论中她让我尝试换一个路径,结果竟然运行出来(?)
面向对象程序设计寒假作业2_第9张图片

关于测试脚本

按照先前提交的同学的方法,先写一个测试代码

#include
#include
int channg1(char num[]);
void change2(int a);
int change1(char num[])
{
    if(strcmp("零",num)==0)return 0;
    else if(strcmp("一",num)==0)return 1;
    else if(strcmp("二",num)==0)return 2;
    else if(strcmp("三",num)==0)return 3;
    else if(strcmp("四",num)==0)return 4;
    else if(strcmp("五",num)==0)return 5;
    else if(strcmp("六",num)==0)return 6;
    else if(strcmp("七",num)==0)return 7;
    else if(strcmp("八",num)==0)return 8;
    else if(strcmp("九",num)==0)return 9;
    else return -1;
    
}
int main()
{    int n,m,i;
    char a[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
    char b[8][10]={"望","仔","怎","么","不","喝","旺","仔"};
    printf("正确示范\n");
    for(i=0;i<11;i++)
    {   
        printf("%s",a[i]);
        n=change1(a[i]);
        if(m!=-1)
        printf("pass\n");
        else
        printf("error\n");
    }
    printf("错误示范\n");
    for(i=0;i<8;i++)
    {
        printf("%s",b[i]);
        m=change1(b[i]);
        if(m!=-1)
        printf("pass\n");
        else
        printf("error\n");
    }
    printf("结束测试");
    return 0; 
    
     
}
@echo off
cd d:
echo 开始测试
ming.exe
echo 测试结束
Pause

生成.bat文件
测试结果如下
面向对象程序设计寒假作业2_第10张图片

通过命令行读取一个文件

在main函数添加一段代码

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

在记事本中写上要测试的数字
面向对象程序设计寒假作业2_第11张图片

面向对象程序设计寒假作业2_第12张图片
但是我运行不出来1551

关于优化程序

  • 读题,提取出题目的要求。
  • 分解需求,把需求分解为几个你觉得不太相关的模块。
  • 思考每个模块怎么写,可以从简单的模块开始写。
  • 对于不会的问题进行查阅资料。
  • 对于每一个模块设计测试用例。
上一次的代码只能在零到九之间的输入运行,优化后的代码将范围扩大到零到九十九之间的输入运行

第一模块进行零到九之间的识别

int change1(char num[])

{
    if(strcmp("零",num)==0)return 0;
    if(strcmp("一",num)==0)return 1;
    if(strcmp("二",num)==0)return 2;
    if(strcmp("三",num)==0)return 3;
    if(strcmp("四",num)==0)return 4;
    if(strcmp("五",num)==0)return 5;
    if(strcmp("六",num)==0)return 6;
    if(strcmp("七",num)==0)return 7;
    if(strcmp("八",num)==0)return 8;
    if(strcmp("九",num)==0)return 9;
}

第二模块在第一个函数的基础下将零到九十九的汉字转换成数字

int change3(char c[])
{
    int total;
    char a[10];
    if(strlen(c)==2)
    total=change1(c);
    else
    {
        if(strlen(c)==4)
        {
            
            
        a[0]=c[0];
        a[1]=c[1];
        a[2]='\0';
        if(strcmp(a,"十")!=0)
        total=change1(a)*10;
        else
        {
            a[0]=c[2];
            a[1]=c[3];
            a[2]='\0';
            total=change1(a)+10;
        }
        
    }
    else
    {
        a[0]=c[0];
        a[1]=c[1];a[2]='\0';
        total=change1(a)*10;
        a[0]=c[4];
        a[1]=c[5];
        a[2]='\0';
        total+=change1(a);
        
    }
}
    return total;
}

第三个模块进行数字1-10转换汉字,用来输出

void change2(int a)
{
    if(a==1)
    printf("一");
    else if(a==2)
    printf("二");
    else if(a==3)
    printf("三");
    else if(a==4)
    printf("四");
    else if(a==5)
    printf("五");
    else if(a==6)
    printf("六");
    else if(a==7)
    printf("七"); 
    else if(a==8)
    printf("八");
    else if(a==9)
    printf("九");
    else if(a==10)
    printf("十");
 } 

第四个模块进行数字之间的运算,将运算结果返回第三个函数,最后将结果输出

 int main()
 {
    char s1[20],s2[20],s3[20],s4[20];
    int n,sum=0,number;
    scanf("%s %s %s %s",s1,s2,s3,s4);
    n=change3(s4);
    char b1[20],b2[20],b3[20],b4[20];
    sum=change3(s4);
    while(1)
    {
        scanf("%s %s",b1,b2);
        
        if(strcmp("看看",b1)==0)
        break;
        scanf("%s",b3);
        number=change3(b3);
        if(strcmp("增加",b2)==0)
        sum+=number;
        else
        if(strcmp("减少",b2)==0)
        sum-=number;
        
     }
     int ten=10;
     if(sum<=10)
     {
        change2(sum);
     }
     else
     {
        if(sum<20)
        {
         change2(ten);
        change2(sum%10);}
        else
        {
            if(sum%10==0)
            {
             change2(sum/10);
            change2(ten);}
            else{
             change2(sum/10);
             change2(ten);
             change2(sum%10);}
            
         }
        
     }
    return 0; 
 }

最后完整的代码

#include
#include
int channg1(char num[]);
void change2(int a);
int change3(char c[]);
int change1(char num[])

{
    if(strcmp("零",num)==0)return 0;
    if(strcmp("一",num)==0)return 1;
    if(strcmp("二",num)==0)return 2;
    if(strcmp("三",num)==0)return 3;
    if(strcmp("四",num)==0)return 4;
    if(strcmp("五",num)==0)return 5;
    if(strcmp("六",num)==0)return 6;
    if(strcmp("七",num)==0)return 7;
    if(strcmp("八",num)==0)return 8;
    if(strcmp("九",num)==0)return 9;
}
int change3(char c[])
{
    int total;
    char a[10];
    if(strlen(c)==2)
    total=change1(c);
    else
    {
        if(strlen(c)==4)
        {
            
            
        a[0]=c[0];
        a[1]=c[1];
        a[2]='\0';
        if(strcmp(a,"十")!=0)
        total=change1(a)*10;
        else
        {
            a[0]=c[2];
            a[1]=c[3];
            a[2]='\0';
            total=change1(a)+10;
        }
        
    }
    else
    {
        a[0]=c[0];
        a[1]=c[1];a[2]='\0';
        total=change1(a)*10;
        a[0]=c[4];
        a[1]=c[5];
        a[2]='\0';
        total+=change1(a);
        
    }
}
    return total;
}
    


void change2(int a)
{
    if(a==1)
    printf("一");
    else if(a==2)
    printf("二");
    else if(a==3)
    printf("三");
    else if(a==4)
    printf("四");
    else if(a==5)
    printf("五");
    else if(a==6)
    printf("六");
    else if(a==7)
    printf("七"); 
    else if(a==8)
    printf("八");
    else if(a==9)
    printf("九");
    else if(a==10)
    printf("十");
 } 
 int main()
 {
    char s1[20],s2[20],s3[20],s4[20];
    int n,sum=0,number;
    scanf("%s %s %s %s",s1,s2,s3,s4);
    n=change3(s4);
    char b1[20],b2[20],b3[20],b4[20];
    sum=change3(s4);
    while(1)
    {
        scanf("%s %s",b1,b2);
        
        if(strcmp("看看",b1)==0)
        break;
        scanf("%s",b3);
        number=change3(b3);
        if(strcmp("增加",b2)==0)
        sum+=number;
        else
        if(strcmp("减少",b2)==0)
        sum-=number;
        
     }
     int ten=10;
     if(sum<=10)
     {
        change2(sum);
     }
     else
     {
        if(sum<20)
        {
         change2(ten);
        change2(sum%10);}
        else
        {
            if(sum%10==0)
            {
             change2(sum/10);
            change2(ten);}
            else{
             change2(sum/10);
             change2(ten);
             change2(sum%10);}
            
         }
        
     }
    return 0; 
 }

运行的结果为
面向对象程序设计寒假作业2_第13张图片

你可能感兴趣的:(面向对象程序设计寒假作业2)