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

这个作业属于哪个课程 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上仓库地址
面向对象程序设计寒假作业2_第1张图片

继续键入命令
git remote add origin [email protected]:名字/仓库名.git地址
然后键入git init刷新仓库,cd 进入本地克隆仓库
此时输入git add .文件夹下面的文件都添加进来)
然后继续键入命令
git commit -m "提交信息" (“提交信息”里面换成你需要,如“first commit”)
git push -u origin master (注:此操作目的是把本地仓库push到github上面),上传成功
面向对象程序设计寒假作业2_第2张图片
大功告成!!!!

编程题(请使用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

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

单元测试

我主要对我代码中所使用到的两个函数进行了测试,分别为,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,但好像只是多出来一个空格……
面向对象程序设计寒假作业2_第4张图片

添加功能,命令行参数

这题真的是在百度上疯狂搜索才知道是c语言命令行参数int argc,char argv[],argc代表个数,系统自会统计,argv[]则是你在命令行窗口那里输入的参数,搜索到这里才迈向成功一点,题目要求是可以在命令行窗口里打开文件,
再次百度百度百度得知一些与文件相关的函数,如fopen,fgetc什么的,这些函数全部包含在文件里,
而本次题目则要求使用freopen函数,
freopen(argv[1],"r",stdin);
按照样例创建文本文档,从命令行窗口输入结果如下图
面向对象程序设计寒假作业2_第5张图片

本次收货颇丰,就是windows批处理语法仍有些糊里糊涂,后面接着努力!!!

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