| 这个作业属于哪个课程 | 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<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
#include<stdlib.h>
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;
}

浙公网安备 33010602011771号