这个作业属于哪个课程 | 2020面向对象程序设计 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业2 |
这个作业的目标 | 1.使用git上传文件到github 2.学会制作编译脚本 3.懂得使用命令行参数和文件的使用 |
作业正文 | 第二次作业 |
其他参考文献 | 命令行参数....git...脚本编译 |
实践题 | |
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。 | |
请使用.gitignore文件忽略不要上传的文件。 | |
首先打开GitHub:新建仓库: | |
设计完毕,仓库就建完了
接下来下载安装给git,之后你就能找到git.bash,git.cmd
打开git bash:
输入touch.gitignore
得到的文件用记事本打开
输入忽略的文件
1.建仓 git init
你就会发现多了一个.git文件夹
2.如果你上传文件那么以下三条文件是必要的:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git remote add origin https://gitee.com/haiyoushui/mypython.git(后面是仓库的地址)
接下来是按以下步骤:
再下去你就输入GitHub的账号密码
就可以了。
(如果遇到这种情况
先输入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<dight2;i++)
{
for(int j=0;j<2;j++,k++)
f[i][j]=a.num[k];
f[i][2]='\0';
}
sum2=run2(f,i,dight,dight2);
while(fscanf(fp,"%s",&o),strcmp(o,"看看")!=0)
{
fscanf(fp,"%s %s",&op,a.num);
dight=strlen(a.num);
dight2=dight/2;
k=0;
for(i=0;i<dight2;i++)
{
for(int j=0;j<2;j++,k++)
e[i][j]=a.num[k];
e[i][2]='\0';
}
sum2=run3(e,i,dight,dight2,sum2,op);
}
printf_(sum2);}
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<dight2;i++)
{
if(strcmp(e[i],"百")!=0&&strcmp(e[i],"十")!=0)
strcpy(e[ii++],e[i]);
}
for(i=0,k=ii-1;i<ii;i++,k--)
{
sum1=sum1+zh1(e,i)*pow(10,k);
}
if(strcmp(op,"增加")==0) sum2+=sum1;
if(strcmp(op,"减少")==0) sum2-=sum1;
sum1=0;
return sum2;
}
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<dight2;i++)
{if(strcmp(f[i],"百")!=0&&strcmp(f[i],"十")!=0)
strcpy(f[ii++],f[i]);}
for(i=0,k=ii-1;i<ii;i++,k--)
{sum2=sum2+zh1(f,i)*pow(10,k);}
}
return 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("九");
}
还有一个输出函数
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<stdio.h>
#include<string.h>
#include<math.h>
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;i<dight2;i++)
{
for(int j=0;j<2;j++,k++)
f[i][j]=a.num[k];
f[i][2]='\0';
}
sum2=run2(f,i,dight,dight2);
while(fscanf(fp,"%s",&o),strcmp(o,"看看")!=0)
{
fscanf(fp,"%s %s",&op,a.num);
dight=strlen(a.num);
dight2=dight/2;
k=0;
for(i=0;i<dight2;i++)
{
for(int j=0;j<2;j++,k++)
e[i][j]=a.num[k];
e[i][2]='\0';
}
sum2=run3(e,i,dight,dight2,sum2,op);
}
printf_(sum2);}
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<dight2;i++)
{
if(strcmp(e[i],"百")!=0&&strcmp(e[i],"十")!=0)
strcpy(e[ii++],e[i]);
}
for(i=0,k=ii-1;i<ii;i++,k--)
{
sum1=sum1+zh1(e,i)*pow(10,k);
}
if(strcmp(op,"增加")==0) sum2+=sum1;
if(strcmp(op,"减少")==0) sum2-=sum1;
sum1=0;
return sum2;
}
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<dight2;i++)
{if(strcmp(f[i],"百")!=0&&strcmp(f[i],"十")!=0)
strcpy(f[ii++],f[i]);}
for(i=0,k=ii-1;i<ii;i++,k--)
{sum2=sum2+zh1(f,i)*pow(10,k);}
}
return sum2;
}
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);
}
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批处理
运行后会生成exe
接下来是单元测试
由于其他函数是原来主函数分离出来的
我就测试了zh1,zh2,这两个函数
其他用结果测试
zh1:
#include<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
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 "九";
}
编译脚本为:
运行后
:
这样就测试成功了;
接下来用结果测试其他函数
:
文本为
第三部分:
添加功能
刚开始看到题目时,我是一脸懵逼的,直到看到同学的作业,我才知道是用命令行参数
输入也换为fscanf而不是scanf
接下来编译
输入文件名 1.txt 就行了
文本为
最后说一下这次作业遇到的问题
这次作业有很多生的知识,都需要现学,好多次都感到很崩溃
而且知识点很分散,需要有耐心把他整合在一起。
代码还需把运算的数值扩大一点
感想:
这一次的作业学到了很多东西,特别是脚本的运用
接下来应该对这一块进行加强。