第二次作业之编程题

1、Github的链接:

https://github.com/mingyueanyao/object-oriented.git

2、解题的思路过程:

因为开始做题的时间比较晚,多少看到了大家的讨论,所以在做题之前就知道要注意按要求输出,也就是每隔三位要求输出一个逗号,就像学生计算器上的那样,怎么按要求输出应该就是这题的关键了。又因为曾经做过一个幸运数的题目(大致是说若一个数各个数位之和是素数,那么它就是一个幸运数),当时就需要求出各个数位上的数从而得到数位之和,所以我就想把 a+b的结果的各个数位存到一个数组里,这样循环输出数组元素的时候就可以加入输出逗号的操作。此外晚做题的我还注意到要小心结果有可能是负值,因为今天才稍微看慕课计划的我(刚开始计划里c语言的复习那部分)发现取余运算的符号取决于被除数,要是a+b是负的,那我数组元素就都是负的了吧。

3、具体操作(编写代码):

看到同学的博客,试着开始加上一些注释。

第一次尝试:

  • 代码1.0:

    #include<stdio.h>
    int main ()
    {
        int a,b,c,d[7],i=0,j=0;
        scanf("%d %d",&a,&b);
        c=a+b;                    //将a+b的结果存到c里,便于操作。
        if(c==0) printf("%d",c);  //实际操作发现也要考虑这一情况(打到while语句循环条件时)。
        else
        {
            if(c<0)
            { 
                c=-c;                
                printf("-");      //对结果是负值的操作。
            }
    
            while(c>0)
            {
                d[i]=c%10;
                c=c/10;
                i++; 
                j++;             
            }                     //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。
        }
        for(i=0;i<j;i++)
        {
            if((i+1)%3==0)printf(",");  //输出逗号的操作。
            printf("%d",d[i]);          //逐个输出数位上的数。
        }
        return 0;
     }
    
  • 样例调试结果:

  • 分析:因为数位是从个位开始存的,所以输出数位的时候应该倒着输,还有逗号的输出也要相应的作调整。

第二次尝试:

(经过一番修改,跳过期间的各种小错误:无限循环、逗号多输、逗号输错...)

  • 代码2.0:

      #include<stdio.h>
      int main ()
      {
          int a,b,c,d[7],i=0;
          scanf("%d %d",&a,&b);
          c=a+b;                    //将a+b的结果存到c里,便于操作。
          if(c==0) printf("%d",c);  //实际操作发现也要考虑这一情况(打到while语句循环条件时)。
          else
          {
              if(c<0) 
              {
                  c=-c;                
                  printf("-");      //对结果是负值的操作。
              }
              while(c>0)
              {
                  d[i]=c%10;
                  c=c/10;
                  i++;              
              }                     //将非零结果绝对值上的的各个数位存入数组中,并记录数位个数。
          }
          for(;0<i;i--)
          {
              printf("%d",d[i-1]);          //逐个输出数位上的数。
              if((i-1)%3==0&&i-1>0)printf(",");  //输出逗号的操作。
          }
          return 0;
       }
    
  • 样例调试结果:

  • 分析:感觉虽然代码写得不是很高明,但是又调式了几次的结果都没错,于是我决定先交一次试试。

4、上交过程:

截图一:

  • 分析:选错语言而导致出错,以下为改为c语言的评测结果。

截图二:

  • 分析:全部通过,还好没有意料之外的其他错误。
原文地址:https://www.cnblogs.com/mingyueanyao/p/5169988.html