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上面提交。没想到提交了有一个错误。

最开始我以为是自己开的数组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不足之处希望能够指出,我将感激不尽( ω )

面向对象程序设计 第二次作业<1>的更多相关文章

  1. 程序设计第二次作业<1>

    面向对象程序设计第二次作业<1> Github 链接:https://github.com/Wasdns/object-oriented 题目: <1>第一次尝试 我立马认识到 ...

  2. hdoj上的一题和程序设计第二次作业的拓展-人见人爱a+b

    hdoj上一道有意思的题目,题目: 人见人爱a+b 敲的也蛮快的,大概十分钟左右就AC了.代码如下: 人见人爱a+b #include<stdio.h> int main() { int ...

  3. C语言程序设计第二次作业--顺序结构

    C语言程序设计第二次作业--顺序结构 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 #include <stido ...

  4. THE LAST ONE!! 2017《面向对象程序设计》课程作业八

    THE LAST ONE!! 2017<面向对象程序设计>课程作业八 031602230 卢恺翔 GitHub传送门 题目描述 1.时间匆匆,本学期的博客作业就要结束了,是否有点不舍,是否 ...

  5. C语言程序设计第二次作业

    一.学习内容 掌握关系运算符.逻辑运算符.条件运算符 掌握常用数学函数的用法 if语句(单分支,双分支和多分支) 用switch语句实现多分支 理解多个if语句,if...else if... 和if ...

  6. C语言程序设计第二次作业——顺序结构

    (一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. 错误信息1: 错误原因:i和d位置错误 改正方法:i和d位置互换 错误信息2: 错误原因:\n后缺了一个" 改正方法:\n后加一个 ...

  7. 面向对象程序设计_课堂作业_01_Circle

    The 1st classwork of the C++ program 题目: Create a program that asks for the radius of a circle and p ...

  8. Java面向对象程序设计作业目录(作业笔记)

    持续更新中............. 我的大学笔记>>> 第1章 面向对象 >>> 1.1.5 编写Java程序,创建Dota游戏中的防御塔类,通过两个坐属性显示防 ...

  9. C语言程序设计第二次作业——

    1,编译过程过程中的错误缺引号和分号并且拼写错误. 正确结果: 2,编译过程 改正错误: 正确结果: 3,利用SIZEOF运算符求出的数据类型所占字节大小: 4,在头文件LIMITS.H中相关的编译 ...

随机推荐

  1. Python: 列表的基本用法

    列表是可变的,可以改变的序列,它能够保存任何数据类型. >>> list = []        #定义一个空列表>>> list.append(1)        ...

  2. {POJ}{3925}{Minimal Ratio Tree}{最小生成树}

    题意:给定完全无向图,求其中m个子节点,要求Sum(edge)/Sum(node)最小. 思路:由于N很小,枚举所有可能的子节点可能情况,然后求MST,memset()在POJ G++里面需要cstr ...

  3. jquery ajax get /post

    $.get(URL,callback); $("button").click(function(){ $.get("demo_test.asp",functio ...

  4. c#FileStream文件读写(转)

    FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类 ...

  5. Android菜鸟成长记13 -- 初识application

    二.Application 简介 Application 类是用来维护应用程序全局状态.你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> ...

  6. scrollview技巧

    一行 CGFloat buttonX = 0; CGFloat buttonY = 25; CGFloat buttonW = 37; CGFloat buttonH = 60; CGFloat ma ...

  7. C# 委托和事件 与 观察者模式(发布-订阅模式)讲解 by天命

    使用面向对象的思想 用c#控制台代码模拟猫抓老鼠 我们先来分析一下猫抓老鼠的过程 1.猫叫了 2.所有老鼠听到叫声,知道是哪只猫来了 3.老鼠们逃跑,边逃边喊:"xx猫来了,快跑啊!我是老鼠 ...

  8. Html+Ajax+Springmvc+Mybatis,不用JSP

    有一个原因如下很合本人观点: http://bbs.csdn.net/topics/390939813 前端使用HTML+Ajax,后端使用Java Servlet,这样完全可以做到前后端分离,前端那 ...

  9. Android笔记:DrawerLayout抽屉布局的使用

    DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn.. 如下示,只要从屏幕侧边滑一下,或者点击左上角的图标,抽屉就会出来. DrawerLayout要点: 1.使用Drawer ...

  10. Android两个子线程之间通信

    Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信 ...