这个作业属于哪个课程 | 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 函数,一下子就成了。
测试脚本B-->测试结果
3.编译脚本
说到脚本,我就不禁泪流满面,主要是因为选择太多,所以对于我这种选择困难症来说,有些为难,首先我查询资料想寻找比较简单的脚本语言来学习,天杀的百度,什么答案都有,结果最后powershell shell 都学了一些,还是没大懂。最后批处理,终于让我学到了些能做作业的内容
我的编译脚本,不知道,为什么g++,gcc,cc,为什么我都用不了,做完了到时候去讨教一下吧,我只能把可执行文件执行出来。
果然历尽千帆,我觉得还是批处理好用些,我觉得主要是要运行它用cmd 就行了,更可恶的是那个shell 据说linus有自带的可运行它的软件,还有一些回答说,Windows用不了shell,主要是,我始终搞不懂到哪里去运行它。还有那个powershell,我看了好多相关资料,还是不大会。
本来以为编译脚本是脚本可以完成编译,因为上次作业有一题是关于编译的过程,天哪,竟然让脚本做那样的操作,后来发现和上次命令行的实现竟然差不多。
4.git运用
git desktop 我下载了好几次,不知道为什么每次都该安装时都提示该程序不能安装,检测到什么不安全的东西,总之都不行,所以就去下git ,因为gitdesktop 的页面比较好用,但是没办法,选择了git ,它确实偏麻烦一些,但是跟着教程做就好多了。
1).gitignore忽略文件 在本地仓库里
根据一个教程本来是建立了一个这样命名的文件夹,但是不允许,后来看了另外的应该是这样吧。
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
4)提交本地代码:
github上找到https链接
再在git bash上输入代码:
git clone https://github.com/smallgrape14/-.git
文件目录下出现刚刚在github上所创建的仓库名所表示的文件夹
添加该文件夹下所有的代码到git本地仓库里。输入代码:
cd happy
git add .
此时再把代码同步到git上:
git commit -m "First commit"
最后,再写上:
git push -u origin master
出现登录界面
成功了
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; }