这个作业属于哪个课程 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 就行了

文本为

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