这个作业属于哪个课程 | 2020面向对象程序设计 |
---|---|
这个作业要求在哪里 | 面向对象程序设计寒假作业2 |
这个作业的目标 | 1、学习使用github 2、学习命令行相关操作、继续深化了解编程 |
作业正文 | 第二次寒假作业 |
其他参考文献 | 使用git上传项目到github c语言命令行参数详解 windows批处理详解 freopen函数用法 2020面向对象寒假作业(二) |
实践题
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。用法自行百度。
----------------------------------------------------------------------------------------
使用git远程仓库上传代码到github:
1.先在github上新建一个仓库和安装git;
2.添加SSH公钥,添加SSH Key,现在本地新建一个本地库以方便后续使用
在刚刚新建好的文件夹内点击右键Git Bash Here进入git命令行键入ssh-keygen -t rsa -C "[email protected]"
这是在目标目录下会生成.ssh文件夹,进去打开id_rsa.pub,复制里面的key再绑定到github上。
3.把本地仓库传到github上
继续在本地文件夹上打开git命令行,将github上的库克隆到本地,键入
git clone git@+github上仓库地址
继续键入命令
git remote add origin [email protected]:名字/仓库名.git地址
然后键入git init刷新仓库,cd 进入本地克隆仓库
此时输入git add .文件夹下面的文件都添加进来)
然后继续键入命令
git commit -m "提交信息" (“提交信息”里面换成你需要,如“first commit”)
git push -u origin master (注:此操作目的是把本地仓库push到github上面),上传成功
大功告成!!!!
编程题(请使用C语言或者C++完成以下题目):
- 继续完成作业一的编程题。
- 优化架构,一般要求每个函数长度不超过15行。
- 优化规范,尤其是命名规范。
- 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
示例脚本:
gcc 1.cpp -o lang.exe
-进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
示例脚本:
gcc 1.cpp test.cpp -o test.exe test
- 在作业一编程题的基础上添加以下功能:
通过命令行读取一个文件,然后运行这个文件。如我的程序叫lang,lang 1.txt代表我要运行1.txt这个文本中的代码。
假设我的1.txt内容如下:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输入lang 1.txt后,命令行输出一。
优化代码,代码如下
#include
#include
void switch_printf(int a);//数字转换为汉字并输出
int switch1(char num[]);// 汉字转换为数字
int switch1(char num[])
{
if (strcmp("零", num) == 0) return 0;
if (strcmp("一", num) == 0) return 1;
if (strcmp("二", num) == 0) return 2;
if (strcmp("三", num) == 0) return 3;
if (strcmp("四", num) == 0) return 4;
if (strcmp("五", num) == 0) return 5;
if (strcmp("六", num) == 0) return 6;
if (strcmp("七", num) == 0) return 7;
if (strcmp("八", num) == 0) return 8;
if (strcmp("九", num) == 0) return 9;
if (strcmp("十", num) == 0) return 10;
return -1;
}
void switch_printf(int a)
{
switch (a) {
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;
case 10:printf("十");break;
}
}
int main(int argc,char *argv[])
{
freopen(argv[1],"r",stdin);
char s1[20], s2[20], s3[20], s4[20] = { 0 };
int n = 0, a = 0, b, c, sum = 0;
scanf("%s%s%s%s", s1, s2, s3, s4);
n = switch1(s4);
sum = n;
if (n == -1) {
printf("Error");
return 0;
}
//判断输入是否有误
char a1[20] = { 0 }, a2[20] = { 0 }, a3[20] = { 0 };
while (1)
{
scanf("%s%s", a1, a2);
if (strcmp(a1, "看看") == 0)
break;
scanf("%s", a3);
a = switch1(a3);
if (a == -1) {
printf("Error");
return 0;
}
if (strcmp(a2, "增加") == 0)
sum += a;
else if (strcmp(a2, "减少") == 0)
sum -= a;
a = 0;
}
//输出答案
b = 10;
if (sum <= 10)
switch_printf(sum);
else if (sum < 20)
{
switch_printf(b);
switch_printf(sum % 10);
}
else if (sum % 10 == 0)
{
switch_printf(sum / 10);
switch_printf(b);
}
else
{
switch_printf(sum / 10);
switch_printf(b);
switch_printf(sum % 10);
}
return 0;
}
编译脚本
使用windows批处理,真的是相当头痛,刚开始根本不知道从哪里入手,看了一下同学们的作业和助教的范例,什么都不懂真的是,什么-o什么的,最后捣鼓出来的脚本如下,
@echo off
gcc bai.c -o bai.exe
if exist bai.exe (echo 编译成功)
Pause
单元测试
我主要对我代码中所使用到的两个函数进行了测试,分别为,test1和test2,将所有文件全部放入了一个文件夹中
test1的测试代码如下,将汉字转化为数字
#include
int switch1(char num[]);
int switch1(char num[])
{
if (strcmp("零", num) == 0) return 0;
if (strcmp("一", num) == 0) return 1;
if (strcmp("二", num) == 0) return 2;
if (strcmp("三", num) == 0) return 3;
if (strcmp("四", num) == 0) return 4;
if (strcmp("五", num) == 0) return 5;
if (strcmp("六", num) == 0) return 6;
if (strcmp("七", num) == 0) return 7;
if (strcmp("八", num) == 0) return 8;
if (strcmp("九", num) == 0) return 9;
if (strcmp("十", num) == 0) return 10;
return -1;
}
int main()
{
char a[][4]={"零","一","二","三","四","五","六","七","八","九","十","hh"};
int i=0;
for(i=0;i<=11;i++){
if(i==switch1(a[i]))
continue;
else if(i==11&&switch1(a[i])==-1)
continue;
else
return 0;
}
printf("Pass");
return 0;
}
test2测试代码如下,比起原函数稍作改动,将数字转换为汉字,貌似和test1差不多
#include
int switch_printf(int a);
int switch_printf(int a)
{
switch (a) {
case 1:printf("一");return 1;
case 2:printf("二");return 2;
case 3:printf("三");return 3;
case 4:printf("四");return 4;
case 5:printf("五");return 5;
case 6:printf("六");return 6;
case 7:printf("七");return 7;
case 8:printf("八");return 8;
case 9:printf("九");return 9;
case 10:printf("十");return 10;
}
}
int main()
{
char a[][4]={"零","一","二","三","四","五","六","七","八","九","十"};
int i;
for(i=1;i<=10;i++){
if(switch_printf(i)==i)
continue;
else
return 0;
}
printf("\nPass");
return 0;
}
编译脚本如下,借鉴了周浩东同学的作业
@echo off
title 测试
echo test1开始测试
test1.exe
echo\ test2开始测试
test2.exe
Pause
结果如图,还没有解决换行问题,明明打上了bat语法的换行符号^但好像没什么用,又去找其他办法比如echo,但好像只是多出来一个空格……
添加功能,命令行参数
这题真的是在百度上疯狂搜索才知道是c语言命令行参数int argc,char argv[],argc代表个数,系统自会统计,argv[]则是你在命令行窗口那里输入的参数,搜索到这里才迈向成功一点,题目要求是可以在命令行窗口里打开文件,
再次百度百度百度得知一些与文件相关的函数,如fopen,fgetc什么的,这些函数全部包含在
而本次题目则要求使用freopen函数,
即freopen(argv[1],"r",stdin);
按照样例创建文本文档,从命令行窗口输入结果如下图