这个作业属于哪个课程 | 2020面向对象程序设计张栋班 |
---|---|
这个作业要求在哪里 | 【寒假作业2】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10231) |
这个作业的目标 | 完善代码、新建GitHub仓库并上传代码、制作编译脚本、进行单元测试并制作测试脚本、添加文件读取功能 |
作业正文 | 【面向对象程序设计2020第二次作业】( https://www.cnblogs.com/dudu340/p/12255700.html) |
参考文献 | 1、【如何在github创建新的仓库项目】(https://blog.csdn.net/qq_35869389/article/details/79472564)2、【C语言中函数返回字符串的四种方法】(https://www.cnblogs.com/qingergege/p/6496683.html)3、【GitHub Desktop的简易使用方法】(https://blog.csdn.net/xiaolongqinghua/article/details/87785139) 4、【Windows批处理(cmd/bat)常用命令教程】(https://www.cnblogs.com/xpwi/p/9626959.html) |
一、编程题
在这次作业中,作业要求我们对上次编程题的程序进行优化,要求每个函数的长度一般不超过15行。因此,在这次优化中,我主要针对输出进行优化。在上次的代码中,由于我在输出时使用枚举法进行输出,更由于在输入时的加减运算可能不止一次,那么最后输出的范围则可能很大,因此我用于输出的函数会很长。因此,我在这次函数中,即
char shuchu(int sum);
if(strcmp(b,str2)==0)
if(sum<10)
{
printf("%c",shuchu(sum));
}
else
{
m=sum/10;n=sum%10;
if(n==0)
{
printf("%c十",shuchu(m));
}
else
{
printf("%c十%c",shuchu(m),shuchu(n));
}
}
char shuchu(int x)
{
if(x==1)
return '一';
else
if(x==2)
return '二';
else
if(x==3)
return '三';
else
if(x==4)
return '四';
else
if(x==5)
return '五';
else
if(x==6)
return '六';
else
if(x==7)
return '七';
else
if(x==8)
return '八';
else
return '九';
}
但如果我这样优化,又会出现问题,即
在编译时,这样的程序并不能编译成功,我试过对(一~九)加过双引号或者不加引号,但编译都不能成功,但如果不把函数值返回,我就无法在函数中将大于十的数输出。我在网上查到一些可以用函数输出字符串的方法(C语言中函数返回字符串的四种方法(https://www.cnblogs.com/qingergege/p/6496683.html)),但是还没有试验过能否也适用于中文的返回,会在之后去试试。
至于命名规范这一问题,我认为,要想让每一个阅读程序的人更容易地理解每个函数的意思,那么首先应该见名知义。如果我们随意的命名每个函数的名字,诸如用x,y来命名,那么过一段时间之后可能连作者都不能理解程序了。因此,一个好的名字有助于我们更好的理解函数。我在之前程序中命名函数时都是采用拼音形式命名,碰上例如“钱包 增加 八”则会对应到“zengjia”这个函数。
在作业中,要求制作一个编译脚本,并用该脚本编译代码,我选择的脚本语言是Windows批处理。
Windows批处理:
首先打开记事本,在记事本输入
然后“另存”为文件名“xx.bat”,并且在“保存类型”中下拉“所有类型”,则可得到一个bat文件。但我在第一次弄完后得到一个乱码文件,即
后来在群里大佬的建议下,改为用写字板,
就可以得到一个正常的文件啦。
然后开始编译脚本:方法一、(这个我参考了其他人的方法)
@echo off
echo 请输入文件所在磁盘
set /p a=
echo 正在转移到该磁盘
cd "%a%"
echo 请输入文件所在路径
set /p b=
echo 转移到文件路径
cd "%b%"
echo 请输入文件名
set /p c=
echo 编译开始
gcc "%c%" -o try.exe
if exist "try.exe" echo 编译成功
if not exist "try.exe" echo 编译失败
Pause
但是我在编译时,并未能编译成功,
我本来以为这与我代码本身存在问题有关;但后来我又写了一个“Hello World”的简单代码,仍然提示编译失败,那么应该不是代码本身的问题,在尝试后我在文件名后加上.cpp后,发现就可以编译成功了。
方法二:(按照作业中的示例脚本)
在写字板写上以下内容:
gcc CCC.cpp -o lang.exe
pause
则可以在运行后得到一个lang的.exe文件
接下来开始测试脚本:
# include
# include
int main()
{
int zhi(char s[]);
char a[11][10]={"零","一","二","三","四","五","六","七","八","九","十"};
char b[6][10]={"傲","慢","与","偏","见"};
int i,j,k,t;
for(i=0;i<=9;i++)
{
printf("%s",a[i]);
t=zhi(a[i]);
if(t!=-2)
printf("pass");
else
printf("error");
}
for(i=0;i<=4;i++)
{
printf("%c\n",b[i]);
t=zhi(b[i]);
if(t!=-2)
printf("pass");
else
printf("error");
}
return 0;
}
int zhi(char s[])
{
if(strcmp(s,"一")==0) return 1;
else
if(strcmp(s,"二")==0) return 2;
else
if(strcmp(s,"三")==0) return 3;
else
if(strcmp(s,"四")==0) return 4;
else
if(strcmp(s,"五")==0) return 5;
else
if(strcmp(s,"六")==0) return 6;
else
if(strcmp(s,"七")==0) return 7;
else
if(strcmp(s,"八")==0) return 8;
else
if(strcmp(s,"九")==0) return 9;
else
if(strcmp(s,"零")==0) return 0;
else return -2;
}
并且在写字板上写下以下内容用于测试:
@echo off
cd d:
echo 开始测试
biancheng3.exe
echo 测试结束
Pause
则测试成功
通过在其他大佬的帮助下,明白了为了可以通过命令行读取一个文件,我还需要使用一个freopen函数。而操作方法就是在原函数中的main函数中再加上以下语句:
printf("请输入文件名\n");
char s[15];
scanf("%s",s);
freopen(s,"r",stdin);
在写字板上写下要测试的内容:
然后在编译时输入文件名,即可
(这个不能编译出结果与我自己的代码本身有问题有关)
二、实践题
在这次实践题中,要求新建一个github仓库,并将该次作业中编程题中的代码以及脚本搬到仓库中。因此,首要问题便是如何新建一个仓库。首先,打开github页面,选择“Create a new repository”,即可出现一下这个界面,
然后,在填好“Repository name”等信息后,即可进入下一个界面,
那么,一个新的仓库我们就建好了。
接下来就是将文件上传到我们新建的这个仓库了。
安装git:
下载git。首先,需要下载git安装文件, 安装好git之后,可以这样测试是否成功:安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!即
使用github Desktop:
首先打开github Desktop,则会出现这样一个界面:
点击clone a repository,则
往仓库里上传文件:
我在这里碰上了一个大难题,打开github Desktop之后,我完全没有找到可以添加的按键,然后在查阅资料后,发现可以将需要添加的文件放在目录下,这就可以将文件贴在仓库里了。这样我就将文件上传到github了。
然后填好一下的内容后,就可以点击“Commit to master”。
反思与总结:
总的来说,这次作业对我的挑战很大,毕竟绝大部分对我来说都是新知识(之前真的一点都不会),但是,经过百度以及参考多位大佬的作业,还是艰难的做完作业,收获良多。但还有一些部分并没有真正的做好,会在之后的时间再去努力。