面向对象程序设计 第二次作业<1>

Github链接https://github.com/zora02/object-oriented/tree/master/1001.A%2BB Format (20)

一、解题

题目

题目

解题过程

这是一道简单的a+b的问题,可是说简单也不简单,题目对输出的结果有要求,这才是这道题要考我们的地方吧。我一开始的想法就是把a+b的结果变成一个字符串,然后在其中加入逗号。这是我最开始的想法,然后我开始做题了。

我第一个遇到的问题就是怎样将整数变成字符串(感觉自己好弱T^T):

我去找度娘了,知道了有sprintf这个函数可以实现这一功能。我就去百度百科里认真的看了一遍有关sprintf这个函数的知识,虽然还是有看不懂的地方,但是至少我又多知道了一种函数,在以后的学习中肯定还会遇到,慢慢的应该就知道该如何很好的使用这个函数了。

springf函数的百度百科

第一次调试遇到的问题

这是我写完代码以后拿样例调试的结果

问题一下子就出来了,我没有考虑负号的情况,我把负号也当作一个数了。

这是我第一次写出来的代码:

 #include <stdio.h>
 #include <string.h>
int main()
{
    int a,b,c,i;
    int l=0;
    char s[100];
    scanf("%d%d",&a,&b);
    c=a+b;
    sprintf(s,"%d",c);
    l=strlen(s);
    if(l>4)
    {for(i=0;i<l;i++){
        printf("%c",s[i]);
        if(i==l-1) continue;
        if((i+1-l%3)%3==0)
            printf(",");
    }
    }
    else if(l<=4) printf("%s",s);
    return 0;
}

第二次尝试 修改代码

这是我第二次写出来的代码:

 #include <stdio.h>
 #include <string.h>
int main()
{
    int a,b,c,i;
    int l=0;
    char s[100],s1[100];
    scanf("%d%d",&a,&b);
    c=a+b;
    sprintf(s,"%d",c);
    l=strlen(s);
    if(l>4)
    {if(s[0]=='-') {printf("%c",'-');
        for(i=1;i<l;i++) {s1[i-1]=s[i];}
        for(i=0;i<l;i++){
        printf("%c",s1[i]);
        if(i==l-1) continue;
        if((i+1-l%3)%3==0)
            printf(",");
    }
    }
        else for(i=0;i<l;i++){
                printf("%c",s[i]);
                if(i==l-1) continue;
                if((i+1-l%3)%3==0)
                    printf(",");
            }

    }
    else if(l<=4) printf("%s",s);
    return 0;
}

我拿了样例去调试,过了!超级开心的,就赶紧拿到pat上面提交。没想到提交了有一个错误。

pat第一次提交结果

最开始我以为是自己开的数组s、s1没有初始化的原因,可是改了以后去交还是同样的错误。我感觉蛮奇怪的,也尝试了其他的例子,都可以过。就去问了学姐。学姐刚开始建议我把对负号的判断提出来,然后将剩下的数字赋值到另一个数组进行判断,这样思路会比较清晰。想想我的代码确实有点冗长。

第三次尝试 再次修改代码

这是我第三次写出来的代码

#include <stdio.h>
#include <string.h>
int main()
{
    int a,b,c,i;
    int l=0;
    int t=0;
    char s[100]={'/0'};
    char s1[100]={'/0'};
    scanf("%d%d",&a,&b);
    c=a+b;
    sprintf(s,"%d",c);
    l=strlen(s);
    if(s[0]=='-') {printf("%c",'-');
        for(i=0;i<l-1;i++) {s1[i]=s[i+1];}}
    else for(i=0;i<l;i++) {s1[i]=s[i];}
    t=strlen(s1);
    if(t>4)
    for(i=0;i<t;i++){
        printf("%c",s1[i]);
        if(i==t-1) continue;
        if((i+1-t%3)%3==0)
            printf(",");
        }
    else if(t<=4) printf("%s",s1);
    return 0;
}

没想到后来交上还是同一点错误!我开始想我是不是有哪个情况没有考虑,后来在认真看了一遍题目才发现,原来我的判断条件错了。当结果是4位数的时候也是要加逗号的,还是太粗心了。原来是这个错误。但是我在改代码过程中还是学到了很多。

成功ac!!!

终极版代码:

#include <stdio.h>
#include <string.h>
int main()
{
    int a,b,c,i;
    int l=0;
    int t=0;
    char s[100]={'/0'};
    char s1[100]={'/0'};
    scanf("%d%d",&a,&b);
    c=a+b;
    sprintf(s,"%d",c);
    l=strlen(s);
    if(s[0]=='-') {printf("%c",'-');
        for(i=0;i<l-1;i++) {s1[i]=s[i+1];}}
    else for(i=0;i<l;i++) {s1[i]=s[i];}
    t=strlen(s1);
    if(t>=4)
    for(i=0;i<t;i++){
        printf("%c",s1[i]);
        if(i==t-1) continue;
        if((i+1-t%3)%3==0)
            printf(",");
        }
    else if(t<4) printf("%s",s1);
    return 0;
}

PAT提交纪录:
终于给过了!!!

小结

其实感觉这是一道蛮基础的题目,可是我还是遇到各种问题。哎,感觉自己c真的没有好好学啊T^T。但是在写代码和修改代码的过程中,我都觉得是一个学习的过程。在写代码的时候会可能学到新的解题思路和新的函数,在修改代码的过程中我可以知道自己解题思路和方法不好的地方,知道了自己不足之处。以后还是应该多多做题,让自己好好学习。

二、上传代码

(其实这部分内容并不在作业的要求范围内。但是我还是想讲一下。因为它花了我更多的时间去解决(´・_・`))

看到作业要求里说要把代码提交到Github里,我最开始以为不就是上传一下代码而已,有什么难的。

But!真的好难啊,首先是全英文的界面,这都是什么专业术语啊,我看不懂>_<。然后开始了各种百度,由于我的电脑是MacBook,好多百度出来的方法都是在windows下的操作方法,我看群里面大家讨论的也都是windows下的操作。我也只能看看,还是继续我自己的搜索之路吧。然后在百度了各种教程以后我搞定了ssh key,然后开始打算上传代码了。可是我还是不知道改怎么上传orz。。。后来在各种搜索中,我发现了sourcetree这个神器,然后就成功上传了!这喜悦不比我ac了少啊!

最后我想说其实我还是不知道该怎么使用Github,我看到班导师说要用命令行什么的,我什么都看不懂啊,到最后我也是没有用。不过我觉得这些东西好像要我们亲自去实践了才会真正的弄明白,光听别人讲并不能学到什么。

三、总结

通过完成这项作业我学到了不少东西:

  1. 知道了Github这个神器的网站,虽然我都不怎么会用(´・_・`)
  2. 学会了Markdown的一些基本用法,慢慢学会用Markdown码字。
  3. 知道了成为一名合格的程序猿需要学习很多,路漫漫啊,我能做的就是一步一步的学好。
  4. 感受到了实践出真知真是个伟大的真理啊!!!

Ps.感觉我这篇随笔写的像在记流水账一样,我不知道这样对于阅读者来说会不会很糟糕(╥﹏╥),希望能够见谅。这些都是我想说的话,也许有些废话,可能还有一些逻辑混乱的话。这是我写的第一篇随笔,so不足之处希望能够指出,我将感激不尽( ω )

posted @ 2016-01-28 17:45  perhap_s  阅读(277)  评论(2编辑  收藏  举报