面向对象程序设计作业3

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业3
这个作业的目标 1.优化代码2.增加更多的功能
作业正文 第三次作业
其他参考文献 gcc,gcc编译命令

仓库地址
这次作业的主要内容:
继续完成作业二的编程题。
优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。
思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。
这次我主要进行的优化是将数字与汉字互相转化的过程;
原来的代码用到了在这个头文件,后来仔细想一想根本不需要,
因为我的数字范围比较小所以不需要用到数学函数
我原来的代码是:

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 run2(char f[][3],int i,int dight,int dight2)
{
    int sum2=0,a=0;
    if(strcmp(f[0],"负")==0)
        {
          sum2=run4(f,i);
    return -sum2;} 
    if(i==1) sum2=zh1(f,a);
    else if(i==2){
        if(strcmp(f[0],"十")==0) sum2=zh1(f,a)+zh1(f,a+1);
        else if(strcmp(f[1],"十")==0) sum2=zh1(f,0)*10;
    }
    else if(i==3) sum2=zh1(f,a)*zh1(f,a+1)+zh1(f,a+2);
    return sum2;
}

这样看起来更加简便并且不那么复杂;
还有的就是添加计算负数的功能
我添加了一个函数用来计算负数;

int run4(char f[][3],int m){
    int sum2=0,a=1;
    if(m==2) sum2=zh1(f,1);
    else if(m==3){
        if(strcmp(f[1],"十")==0) sum2=zh1(f,1)+zh1(f,2);
        else if(strcmp(f[2],"十")==0) sum2=zh1(f,1)*10;
    }
    else if(m==4) sum2=zh1(f,1)*zh1(f,2)+zh1(f,3);
    return 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(); 
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 run4(char f[][3],int m);//负数的转化。 
int main()
{
    run();
    return 0;
}
void run()
{
    hanzi a;
    char u[10],op[20],o[20];
    int q=0,sum1=0,sum2=0;
    int i=0,j=0,ii,m=0;
    scanf("%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;i10){
        int b,c;
        b=sum2/10,c=sum2%10;
        if(c==0) 
         {
            zh2(b);printf("十");
         }
         else if(b==1) {printf("十");zh2(c);}
        else if(b!=1){
            zh2(b);
            printf("十");
            zh2(c); 
        }
     } 
} 
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; 
    if(strcmp(f[i],"十")==0) return 10;
}
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("九"); 
    if(n==10) printf("十"); 
}
int run4(char f[][3],int m){
    int sum2=0,a=1;
    if(m==2) sum2=zh1(f,1);
    else if(m==3){
        if(strcmp(f[1],"十")==0) sum2=zh1(f,1)+zh1(f,2);
        else if(strcmp(f[2],"十")==0) sum2=zh1(f,1)*10;
    }
    else if(m==4) sum2=zh1(f,1)*zh1(f,2)+zh1(f,3);
    return sum2;
}

运行结果:
面向对象程序设计作业3_第1张图片
还有是编译脚本之前我用的是cl /EHsc这个语句
我想了想还是用gcc来编译
当然刚开始的时候我也遇到了问题
gcc不是内部或外部命令
我就上网查了一下,网上说要在环境变量中的path中储存gcc的位置,这样编译的时候才能找到gcc
所以我改进了编译脚本:
面向对象程序设计作业3_第2张图片
面向对象程序设计作业3_第3张图片
接下来是单元测试:
面向对象程序设计作业3_第4张图片
面向对象程序设计作业3_第5张图片
这就是第三次作业的内容了
经过这三次寒假作业,我学到了很多东西
命令行,编译脚本,批处理,文件的运用,GitHub的运用
接下来要加油了。

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