第二次作业

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1.使用git上传文件到github 2.学会制作编译脚本 3.懂得使用命令行参数和文件的使用
作业正文 第二次作业
其他参考文献 命令行参数....git...脚本编译

实践题
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。
首先打开GitHub:新建仓库:
第二次作业_第1张图片
第二次作业_第2张图片

设计完毕,仓库就建完了
接下来下载安装给git,之后你就能找到git.bash,git.cmd
第二次作业_第3张图片
打开git bash:
输入touch.gitignore
得到的文件用记事本打开
输入忽略的文件
1.建仓 git init
你就会发现多了一个.git文件夹
第二次作业_第4张图片

2.如果你上传文件那么以下三条文件是必要的:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git remote add origin https://gitee.com/haiyoushui/mypython.git(后面是仓库的地址)
接下来是按以下步骤:
第二次作业_第5张图片

再下去你就输入GitHub的账号密码
第二次作业_第6张图片
就可以了。
(如果遇到这种情况
第二次作业_第7张图片
先输入git pull --rebase origin master 在进行上传.
编程题:
继续完成作业一的编程题。
优化架构,一般要求每个函数长度不超过15行。
优化规范,尤其是命名规范。
制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
优化代码:
我这次的优化主要有两个方面:
1.输入方式改变,例如:把三零改成三十
2添加多个函数给主函数减少压力
函数分别为运行函数run,run2,run3,zh1,zh2

void run(FILE *fp)
{
    hanzi a,b,c,d;
    char u[10],op[20],o[20];
    int q=0,sum1=0,sum2=0;
    int i=0,j=0,ii;
    fscanf(fp,"%s %s %s %s",u,a.name,a.operate,a.num);
    char e[100][3],f[10][3],g[100][3];
    int dight=strlen(a.num);
    int dight2=dight/2;
    int k=0;
    for(i=0;i
int run3(char e[][3],int i,int dight,int dight2,int sum2,char op[])
{
    int sum1=0,k=0,ii=0;
    if(strcmp(e[dight2-1],"十")==0)
                    strcpy(e[dight2-1],"零");
                if(strcmp(e[0],"十")==0) 
                    {strcpy(e[0],"一");} 
                for(i=0,ii=0;i
int run2(char f[][3],int i,int dight,int dight2)
{
    int sum2=0,ii=0,k=0;
    if(strcmp(f[0],"十")==0&&dight==2)
        sum2=10;
    else{
    if(strcmp(f[dight2-1],"十")==0)
        strcpy(f[dight2-1],"零");
    if(strcmp(f[0],"十")==0) 
        {strcpy(f[0],"一");} 
    for(i=0,ii=0;i
int zh1(char f[][3],int i)
{
    if(strcmp(f[i],"一")==0) return 1;
    if(strcmp(f[i],"二")==0) return 2;
    if(strcmp(f[i],"三")==0) return 3;
    if(strcmp(f[i],"四")==0) return 4;
    if(strcmp(f[i],"五")==0) return 5;
    if(strcmp(f[i],"六")==0) return 6;
    if(strcmp(f[i],"七")==0) return 7;
    if(strcmp(f[i],"八")==0) return 8;
    if(strcmp(f[i],"九")==0) return 9;
    if(strcmp(f[i],"零")==0) return 0; 
}
void zh2(int n)
{
    if(n==0) printf("零"); 
    if(n==1) printf("一");
    if(n==2) printf("二");
    if(n==3) printf("三");
    if(n==4) printf("四");
    if(n==5) printf("五");
    if(n==6) printf("六");
    if(n==7) printf("七");
    if(n==8) printf("八");
    if(n==9) printf("九"); 
}

还有一个输出函数

void printf_(int sum2)
{
    if (sum2>99) printf("数值超出范围"); 
    else if(sum2>9&&sum2!=10&&sum2%10==0){
        zh2((sum2/10)%10);printf("十");
    }
    else if(sum2>9&&sum2!=10&&sum2%10!=0){
        if(sum2/10!=1)
        { zh2((sum2/10)%10);printf("十");zh2(sum2%10);}
        else {printf("十");zh2(sum2%10);}
    }
    else if(sum2==10) printf("十");
    else if(sum2<10) zh2(sum2);     
}

完整代码

#include
#include
#include 
struct hanzi{
    char name[20];
    char operate[20];
    char num[20];
}; //定义结构体,储存汉字变量名。 
int zh1(char f[][3],int i);//将汉字转化为数字。
void zh2(int n);//将数字转化为汉字。
void run(FILE *fp);
int run2(char f[][3],int i,int dight,int dight2);
int run3(char e[][3],int i,int dight,int dight2,int sum2,char op[]);
void printf_(int sum2);
int main(int argc,char *argv[])
{
    FILE *fp=fopen(argv[1],"r");
    run(fp);
    return 0;
}
void run(FILE *fp)
{
    hanzi a,b,c,d;
    char u[10],op[20],o[20];
    int q=0,sum1=0,sum2=0;
    int i=0,j=0,ii;
    fscanf(fp,"%s %s %s %s",u,a.name,a.operate,a.num);
    char e[100][3],f[10][3],g[100][3];
    int dight=strlen(a.num);
    int dight2=dight/2;
    int k=0;
    for(i=0;i99) printf("数值超出范围"); 
    else if(sum2>9&&sum2!=10&&sum2%10==0){
        zh2((sum2/10)%10);printf("十");
    }
    else if(sum2>9&&sum2!=10&&sum2%10!=0){
        if(sum2/10!=1)
        { zh2((sum2/10)%10);printf("十");zh2(sum2%10);}
        else {printf("十");zh2(sum2%10);}
    }
    else if(sum2==10) printf("十");
    else if(sum2<10) zh2(sum2);     
}
int zh1(char f[][3],int i)
{
    if(strcmp(f[i],"一")==0) return 1;
    if(strcmp(f[i],"二")==0) return 2;
    if(strcmp(f[i],"三")==0) return 3;
    if(strcmp(f[i],"四")==0) return 4;
    if(strcmp(f[i],"五")==0) return 5;
    if(strcmp(f[i],"六")==0) return 6;
    if(strcmp(f[i],"七")==0) return 7;
    if(strcmp(f[i],"八")==0) return 8;
    if(strcmp(f[i],"九")==0) return 9;
    if(strcmp(f[i],"零")==0) return 0; 
}
void zh2(int n)
{
    if(n==0) printf("零"); 
    if(n==1) printf("一");
    if(n==2) printf("二");
    if(n==3) printf("三");
    if(n==4) printf("四");
    if(n==5) printf("五");
    if(n==6) printf("六");
    if(n==7) printf("七");
    if(n==8) printf("八");
    if(n==9) printf("九"); 
}

我用的是window批处理
第二次作业_第8张图片

运行后会生成exe
第二次作业_第9张图片

接下来是单元测试
由于其他函数是原来主函数分离出来的
我就测试了zh1,zh2,这两个函数
其他用结果测试
zh1:

#include
#include
int zh1(char f[][3],int i);
int main()
{
    int i;
    char f[10][3]={"零","一","二","三","四","五","六","七","八","九"};
    for(i=0;i<=9;i++)
    {
        if(zh1(f,i)==i)
            printf("Pass\n");
    }
    return 0;
}
int zh1(char f[][3],int i)
{
    if(strcmp(f[i],"一")==0) return 1;
    if(strcmp(f[i],"二")==0) return 2;
    if(strcmp(f[i],"三")==0) return 3;
    if(strcmp(f[i],"四")==0) return 4;
    if(strcmp(f[i],"五")==0) return 5;
    if(strcmp(f[i],"六")==0) return 6;
    if(strcmp(f[i],"七")==0) return 7;
    if(strcmp(f[i],"八")==0) return 8;
    if(strcmp(f[i],"九")==0) return 9;
    if(strcmp(f[i],"零")==0) return 0; 
}

zh2:


#include
#include
char *zh1(int n);
int main()
{
    int i;
    char f[10][3]={"零","一","二","三","四","五","六","七","八","九"};
    for(i=0;i<=9;i++)
    {
        if(strcmp(zh1(i),f[i])==0)
            printf("Pass\n");
    }
    return 0;
}
char *zh1(int n)
{
    if(n==0) return "零"; 
    if(n==1) return "一";
    if(n==2) return "二";
    if(n==3) return "三";
    if(n==4) return "四";
    if(n==5) return "五";
    if(n==6) return "六";
    if(n==7) return "七";
    if(n==8) return "八";
    if(n==9) return "九"; 
}

编译脚本为:
第二次作业_第10张图片
运行后

第二次作业_第11张图片
这样就测试成功了;
接下来用结果测试其他函数


文本为
第二次作业_第12张图片

第三部分:
添加功能
刚开始看到题目时,我是一脸懵逼的,直到看到同学的作业,我才知道是用命令行参数
输入也换为fscanf而不是scanf
接下来编译
输入文件名 1.txt 就行了
第二次作业_第13张图片
文本为
第二次作业_第14张图片

最后说一下这次作业遇到的问题
这次作业有很多生的知识,都需要现学,好多次都感到很崩溃
而且知识点很分散,需要有耐心把他整合在一起。
代码还需把运算的数值扩大一点
感想:
这一次的作业学到了很多东西,特别是脚本的运用
接下来应该对这一块进行加强。

你可能感兴趣的:(第二次作业)