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

 

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020OOP
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10231
这个作业的目标

1.学会新建立一个github仓库,会使用git,且会将本地仓库的代码传到线上仓库

2.学会.gitignore文件忽略一些不要上传的文件,属于基本操作

3.优化编程题

4.学习脚本语言

5.使用命令行读取文件并运行

作业正文

我的仓库

 1.https://www.cnblogs.com/smallgrape/p/12266042.html

2.https://github.com/smallgrape14/happy.git

参考文献

https://blog.csdn.net/sishen47k/article/details/80211002

https://www.cnblogs.com/geeksongs/p/10606906.html

https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304

https://www.cnblogs.com/kevingrace/p/5690241.html

https://shiyousan.com/post/636431641394598338

https://www.cnblogs.com/geeksongs/p/10606906.html

https://wenda.so.com/q/1371704239060053?

https://blog.csdn.net/imxiangzi/article/details/45916875

1.编程题

1)转化函数(将文字信息转为具体数值)相比较上次所做的优化措施是使输入初始值,改变值可以是两位数。

对输入的文字分情况讨论,先开始没意识到一个汉字并不是算一个字符,所以得到结果都错得很离谱,后来通过调试发现,在在我的这种编码方式下,一个汉字相当于两个字符,通过查资料发现,不同的编码,汉字所占字节并不相同。

int transform_initial_value1(char initial_value[])//函数.1. 文字与数字的转换 
 {
 	int s;
 	if(strcmp("零",initial_value)==0) s=0;
	 else if(strcmp("一",initial_value)==0)s=1;
	 else if(strcmp("二",initial_value)==0)s=2;
	 else if(strcmp("三",initial_value)==0)s=3;
	 else if(strcmp("四",initial_value)==0)s=4;
         else if(strcmp("五",initial_value)==0)s=5;
	 else if(strcmp("六",initial_value)==0)s=6;
	 else if(strcmp("七",initial_value)==0)s=7;
	 else if(strcmp("八",initial_value)==0)s=8;
	 else if(strcmp("九",initial_value)==0)s=9;
	 else if(strcmp("十",initial_value)==0)s=10;
   
 return s;}
 int transform_initial_value2(char initial_value[])//函数.2. 文字与数字的转换
 {
 	 int s;
 	 if(strcmp("十一",initial_value)==0)s=11;
	 else if(strcmp("十二",initial_value)==0)s=12;
	 else if(strcmp("十三",initial_value)==0)s=13;
	 else if(strcmp("十四",initial_value)==0)s=14;
         else if(strcmp("十五",initial_value)==0)s=15;
	 else if(strcmp("十六",initial_value)==0)s=16;
	 else if(strcmp("十七",initial_value)==0)s=17;
	 else if(strcmp("十八",initial_value)==0)s=18;
	 else if(strcmp("十九",initial_value)==0)s=19;
	 return s;
}
 int transform_initial_value3(char initial_value[])//函数.3. 文字与数字的转换
 {
 	int s;
 	if (strcmp("一十",initial_value)==0) s=10;
         else if(strcmp("二十",initial_value)==0) s=20;
	 else if(strcmp("三十",initial_value)==0)s=30;
	 else if(strcmp("四十",initial_value)==0)s=40;
         else if(strcmp("五十",initial_value)==0)s=50;
	 else if(strcmp("六十",initial_value)==0)s=60;
	 else if(strcmp("七十",initial_value)==0)s=70;
	 else if(strcmp("八十",initial_value)==0)s=80;
	 else if(strcmp("九十",initial_value)==0)s=90;
	return s;
}

  2)数字转换为相应的文字直接输出;

void retransform_ultimate_value1(int sum)//函数。4.转换最终值 
  {
  	switch(sum)
		{
		case 0:printf("零");break;
		case 1:printf("一");break;
		case 2:printf("二");break;
		case 3:printf("三");break;
		case 4:printf("四");break;
		case 5:printf("五");break;
		case 6:printf("六");break;
		case 7:printf("七");break;
		case 8:printf("八");break;
		case 9:printf("九");break;
		
	   }
  }
  void retransform_ultimate_value2(int sum)//函数。5.转换最终值 
  {
  	switch(sum)
		{
		case 0:printf("十");break;
		case 1:printf("十一");break;
		case 2:printf("十二");break;
		case 3:printf("十三");break;
		case 4:printf("十四");break;
		case 5:printf("十五");break;
		case 6:printf("十六");break;
		case 7:printf("十七");break;
		case 8:printf("十八");break;
		case 9:printf("十九");break;
		}
  }

  3)设置初始值函数

int set_initial_value(char in[])//函数。6.设置初始值 
{   int length=strlen(in),sum;char b[3],c[3];
    int transform_initial_value1(char initial_value[]);
	int transform_initial_value2(char initial_value[]);
	int transform_initial_value3(char initial_value[]);
	 if(length==2)
	    sum=transform_initial_value1(in);
	else if(length==4)
	{   
	    sum=transform_initial_value3(in);
	}
	else if(length==6)
	{ 
	     b[0]=in[0];b[1]=in[1];
	     b[2]=in[2];b[3]=in[3];
		 b[4]='\0';
		 c[0]=in[4];c[1]=in[5];
		 c[2]='\0';
		sum=transform_initial_value3(b)+transform_initial_value1(c);
	} 
	return sum;
}

  4)负责计算的函数

int set_changing_value(int sum,char variable_name[])//函数.7.设定中间值 
{   int i,s;char variable_name2[25],operating[3],value[3];
    int set_initial_value(char in[]);
    scanf("%s%s%s",variable_name2,operating,value);
	for(i=0;strcmp(variable_name,variable_name2)==0;i++)
	{
		if(i!=0)
		scanf("%s",value);//输入 
		s=set_initial_value(value);
	    if(strcmp("增加",operating)==0)//判断 
		sum+=s;
		else if(strcmp("减少",operating)==0)
		sum-=s;
		scanf("%s%s",variable_name2,operating);
		
	}
	return sum;
}

  5)由于主函数行数太多,就分裂出一个终函数

void last(int sum)
{   int i,a[3];void retransform_ultimate_value1(int sum);
     void retransform_ultimate_value2(int sum);//函数声明 
	for(i=0;;i++)
	{    a[i]=sum%10;    
	      sum=sum/10;	
	      if(sum==0)break;
	}
	if(i==0&&sum>=0)
		   retransform_ultimate_value1(a[0]);
	else if(i==1&&sum>=0) 
	{
		retransform_ultimate_value1(a[1]);
	    retransform_ultimate_value2(a[0]);
	}
	else
	printf("error!");//结果不能超过九十九 也不能小于零 
}

  整个过程,我做的工作主要是把原本的一个主函数分裂成好多个短小的函数,和运行错误的纠错,的确,我绞尽脑汁也想不到是计算字符串长度时犯的错,怪不得结果那么大。还有为了命名规范,规范是规范了,但是有点冗长了。尤其是在找错的时候,面对一大堆变量,脑袋是快炸掉了,感觉在自己自己增添难度,自讨苦吃。

2.测试函数

测试主要测试,两个大函数,汉字与数字的相互转换,每个配置十个数据测试,结果为pass fail。

测试脚本,本来一直在想怎么让脚本在运行exe文件时可以把某一个文本的内容输入其中,再把运行结果输出到一个txt文件,再把txt 文件type 出来完成自动输入;

去问了一下百度,竟然有人也这么问,但是用了好多回答,都不行,后来才知道是写一个可以测试数据的代码。还用到了freopen函数才弄好。

函数一-->汉字-->数字

#include
#include
int main()
{   int set_initial_value(char in[]);
int test(int i,char initial_value[]);
   int s,n,i;char initial_value[6];
    FILE *freopen( const char *path, const char *mode, FILE *stream ); 
    freopen("c:\\test\\out2.txt","w",stdout);
    for(i=0;i<10;i++)
{
     n=test(i,initial_value);
	s=set_initial_value(initial_value);
	if(n==s)  printf("Pass\n");
	else  printf("Fail\n");
}   fclose(stdout);//关闭文件 
	return 0;
} 
int test(int i,char initial_value[])
{ int n;
	if(i==0){strcpy(initial_value,"零"); n=0;}
if(i==1){strcpy(initial_value,"七"); n=7;}
if(i==2){strcpy(initial_value,"一十四"); n=14;}
if(i==3){strcpy(initial_value,"二十一"); n=21;}
if(i==4){strcpy(initial_value,"一十九"); n=19;}
if(i==5){strcpy(initial_value,"三十五"); n=35;}
if(i==6){strcpy(initial_value,"四十七"); n=47;}
if(i==7){strcpy(initial_value,"五十二"); n=52;}
if(i==8){strcpy(initial_value,"七十八"); n=78;}
if(i==9){strcpy(initial_value,"八十九"); n=89;}
return n;
}

    int transform_initial_value1(char initial_value[])//函数.1. 
 {
 	int s;
 	if(strcmp("零",initial_value)==0) s=0;
	 else if(strcmp("一",initial_value)==0)s=1;
	 else if(strcmp("二",initial_value)==0)s=2;
	 else if(strcmp("三",initial_value)==0)s=3;
	 else if(strcmp("四",initial_value)==0)s=4;
     else if(strcmp("五",initial_value)==0)s=5;
	 else if(strcmp("六",initial_value)==0)s=6;
	 else if(strcmp("七",initial_value)==0)s=7;
	 else if(strcmp("八",initial_value)==0)s=8;
	 else if(strcmp("九",initial_value)==0)s=9;
	 else if(strcmp("十",initial_value)==0)s=10;
 
 return s;}
 int transform_initial_value2(char initial_value[])//函数.2. 
 {
 	int s;
 	 if(strcmp("十一",initial_value)==0)s=11;
	 else if(strcmp("十二",initial_value)==0)s=12;
	 else if(strcmp("十三",initial_value)==0)s=13;
	 else if(strcmp("十四",initial_value)==0)s=14;
     else if(strcmp("十五",initial_value)==0)s=15;
	 else if(strcmp("十六",initial_value)==0)s=16;
	 else if(strcmp("十七",initial_value)==0)s=17;
	 else if(strcmp("十八",initial_value)==0)s=18;
	 else if(strcmp("十九",initial_value)==0)s=19;
	 
 
 return s;}
 int transform_initial_value3(char initial_value[])//函数.3. 
 {
 	int s;
 	if (strcmp("一十",initial_value)==0) s=10;
 	else if(strcmp("二十",initial_value)==0) s=20;
	 else if(strcmp("三十",initial_value)==0)s=30;
	 else if(strcmp("四十",initial_value)==0)s=40;
     else if(strcmp("五十",initial_value)==0)s=50;
	 else if(strcmp("六十",initial_value)==0)s=60;
	 else if(strcmp("七十",initial_value)==0)s=70;
	 else if(strcmp("八十",initial_value)==0)s=80;
	 else if(strcmp("九十",initial_value)==0)s=90;
	return s;
}
int set_initial_value(char in[])//函数。6.设置初始值 
{   int length=strlen(in),sum;char b[3],c[3];
    int transform_initial_value1(char initial_value[]);
	int transform_initial_value2(char initial_value[]);
	int transform_initial_value3(char initial_value[]);
	 if(length==2)
	    sum=transform_initial_value1(in);
	else if(length==4)
	{   
	    sum=transform_initial_value3(in);
	}
	else if(length==6)
	{ 
	     b[0]=in[0];b[1]=in[1];
	     b[2]=in[2];b[3]=in[3];
		 b[4]='\0';
		 c[0]=in[4];c[1]=in[5];
		 c[2]='\0';
		sum=transform_initial_value3(b)+transform_initial_value1(c);
	} 
	return sum;
}

  函数二-->数字-->汉字

#include
#include
int main()
{  	void retransform_ultimate_value1(int sum,char n[]);
	 void retransform_ultimate_value2(int sum,char m[]);
	 FILE *freopen( const char *path, const char *mode, FILE *stream ); 
	 int  test(int j,char x[]);
	 int i,sum,j,a[3];char n[6],m[6],x[6];
	 freopen("c:\\test\\out.txt","w",stdout);
	 for(j=0;j<10;j++)
{   sum=test(j,x);
	 for(i=0;;i++)
	{    a[i]=sum%10;    
	      sum=sum/10;	
	      if(sum==0)break;
	}
	if(i==0&&sum>=0)
		   retransform_ultimate_value1(a[0],n);
	else if(i==1&&sum>=0) 
	{
		retransform_ultimate_value1(a[1],n);
	    retransform_ultimate_value2(a[0],m);
	    strcat(n,m);
	}
	else
	strcpy(n,"error!");//结果不能超过九十九 也不能小于零 
 if(strcmp(n,x)==0)printf("Pass\n");
 else printf("Fail\n");
}
 fclose(stdout);//关闭文件 
    return 0;
 } 
int  test(int j,char x[])
{  int sum;
	switch(j)
	{case 0:strcpy(x,"零");sum=0;break; 
		case 1:strcpy(x,"一十七");sum=17;break; 
		case 2:strcpy(x,"二十八");sum=28;break; 
		case 3:strcpy(x,"三十九");sum=39;break; 
		case 4:strcpy(x,"四十五");sum=45;break; 
		case 5:strcpy(x,"五十");sum=50;break; 
		case 6:strcpy(x,"六十一");sum=61;break; 
		case 7:strcpy(x,"八十九");sum=89;break; 
		case 8:strcpy(x,"九十九");sum=99;break; 
		case 9:strcpy(x,"error!");sum=178;break; 
	}
	return sum;
}
  void retransform_ultimate_value1(int sum,char n[])//函数。4.转换最终值 
  {
  	switch(sum)
		{
		case 0:strcpy(n,"零");break; 
		case 1:strcpy(n,"一");break;
		case 2:strcpy(n,"二");break;
		case 3:strcpy(n,"三");break;
		case 4:strcpy(n,"四");break;
		case 5:strcpy(n,"五");break;
		case 6:strcpy(n,"六");break;
		case 7:strcpy(n,"七");break;
		case 8:strcpy(n,"八");break;
		case 9:strcpy(n,"九");break;
		
	   }
  }
  void retransform_ultimate_value2(int sum,char m[])//函数。5.转换最终值 
  {
  	switch(sum)
		{
		case 0:strcpy(m,"十");break;
		case 1:strcpy(m,"十一");break;
		case 2:strcpy(m,"十二");break;
		case 3:strcpy(m,"十三");break;
		case 4:strcpy(m,"十四");break;
		case 5:strcpy(m,"十五");break;
		case 6:strcpy(m,"十六");break;
		case 7:strcpy(m,"十七");break;
		case 8:strcpy(m,"十八");break;
		case 9:strcpy(m,"十九");break;
		}
  }

  测试脚本A-->测试结果

测试脚本时本来exe 文件会闪退,怎么都弄不好,后来请教了下广大网友,得到了一个C语言的system 函数,一下子就成了。

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

 

 测试脚本B-->测试结果

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

 

 3.编译脚本

说到脚本,我就不禁泪流满面,主要是因为选择太多,所以对于我这种选择困难症来说,有些为难,首先我查询资料想寻找比较简单的脚本语言来学习,天杀的百度,什么答案都有,结果最后powershell shell 都学了一些,还是没大懂。最后批处理,终于让我学到了些能做作业的内容

我的编译脚本,不知道,为什么g++,gcc,cc,为什么我都用不了,做完了到时候去讨教一下吧,我只能把可执行文件执行出来。

果然历尽千帆,我觉得还是批处理好用些,我觉得主要是要运行它用cmd 就行了,更可恶的是那个shell 据说linus有自带的可运行它的软件,还有一些回答说,Windows用不了shell,主要是,我始终搞不懂到哪里去运行它。还有那个powershell,我看了好多相关资料,还是不大会。

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

 

 

 本来以为编译脚本是脚本可以完成编译,因为上次作业有一题是关于编译的过程,天哪,竟然让脚本做那样的操作,后来发现和上次命令行的实现竟然差不多。

4.git运用

git desktop 我下载了好几次,不知道为什么每次都该安装时都提示该程序不能安装,检测到什么不安全的东西,总之都不行,所以就去下git ,因为gitdesktop 的页面比较好用,但是没办法,选择了git ,它确实偏麻烦一些,但是跟着教程做就好多了。

1).gitignore忽略文件 在本地仓库里

根据一个教程本来是建立了一个这样命名的文件夹,但是不允许,后来看了另外的应该是这样吧。

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

 

 

 

 

2)登录git 感觉贫穷就是力量,登录没有界面得是这样的

登录:点击电脑上的“win”键,然后搜索git bash,打开之后就是命令行界面了。

输入代码

git config --global user.name "(我的登录名)"
git config --global user.emial "(我的登陆邮箱)"

确认自己是否登陆成功,输入代码

git config --global user.name

回车之后出现我的登录名则已经登陆成功,同理可得email的情况,两者同时成功才会真正的登陆成功。

3)创建本地代码仓库

与win下的cmd是大致相似的,选择创建本地仓库的地址

输入以下代码:

cd c:

回车,再输入:

zhomework

然后输入命令:

git init

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

 

 4)提交本地代码:

github上找到https链接

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

 

 

再在git bash上输入代码:

git clone https://github.com/smallgrape14/-.git

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

 

 文件目录下出现刚刚在github上所创建的仓库名所表示的文件夹

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

 

 添加该文件夹下所有的代码到git本地仓库里。输入代码:

cd happy
git add .

此时再把代码同步到git上:

git commit -m "First commit"

最后,再写上:

git push -u origin master

出现登录界面

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

 

 成功了

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

 

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

 

 

5.添加功能

主函数的代码用freopen 函数和主函数的传参

#include
#include
#include
int main(int argc,char *argv[])
{  FILE *freopen( const char *path, const char *mode, FILE *stream ); 
    if(argc>1)freopen("argv[1]","r",stdin);
     //输入重定向,输入数据将从1.txt文件中读取 
    //freopen("c:\\test\\2.txt","w",stdout); //输出重定向,输出数据将保存在2.txt文件中 
	char type_of_variable[5],variable_name[25],initial_value[6],operating[3];
	scanf("%s%s%s%s",type_of_variable,variable_name,operating,initial_value);//初始化的输入 
	int sum,s=0;   void last(int sum);
	int set_initial_value(char in[]);
	int set_changing_value(int sum,char variable_name[]);//函数声明 
    s=set_initial_value(initial_value);//初始值 
	sum=set_changing_value(s,variable_name);   //最终值 
	last(sum);
	fclose(stdin);//关闭文件 
    //fclose(stdout);//关闭文件 
	//system("PAUSE");
	    return 0;
} 

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

 

 

 

  

 

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