zoukankan      html  css  js  c++  java
  • 2017《面向对象程序设计》寒假作业二

    https://github.com/Fleurrr/object-oriented

    解题的思路过程

    看到这道题目,首先想到的是分为两种情况讨论:第一种是和值小于999且大于-999的情况,这类情况不需要输出“,”,所以直接输出结果即可;第二种情况是和值大于999或者是小于-999的情况,该题应该主要讨论的是第二种情况。在第二种情况下,因为输出的值中可能含有“,”或者是“-”这类字符,所以我认为这道题的结果应该是用字符串的形式来输出,而出于简洁的考虑,当和值为负数时我选择先将负号消除,在最后选择将负号加上。最重要的部分来了:给输出的结果加上逗号,本来是想用for语句来进行循环的,但是心想输出结果的字符长度不一定,所以改用while语句来循环比较方便。如果是负数的话,只要在最后输出时加上一个负号即可。大致思路就是这个样子。

    编码过程中调试与上线测试(提交代码)后的bug发现与修改过程

    一开始根据自己的思路写出来的代码是这样的

    #include <stdio.h>
    int main()
    {
    	int a,b,s,flag=0;
    	char result[20];
    	scanf("%d %d",&a,&b);
    	s=a+b;
    	if(s>999||s<-999)
    	{
        if(s<0) 
    	{
    	flag=1;
    	s=s*(-1);
    	}
    	int n=1,i=0;	
    	while(s>0)
    	{
    	 result[i++]=s%10+48;
    	  if(n%3==0)
    	   result[i++]=',';
    	   s=s/10; 
    	   n++; 
    	} 
    	if(flag==1) 
    	{
    	result[i++]='-';
        }
    	for(i>=0;i--;)
    	{
    		 printf("%c",result[i]);
    	} 
    	printf("
    ");
    	}
    	 if(s<=999&&s>=-999)
    	 {
    	 	printf("%d
    ",s);
    	}
    	return 0; 
    }
    

    似乎是部分错的样子,可能是第二次循环的语句的问题,所以干脆将第二次的循环语句也改成了while语句

    #include <stdio.h>
    int main()
    {
    	int a,b,s,flag=0;
    	char result[20];
    	scanf("%d %d",&a,&b);
    	s=a+b;
    	if(s>999||s<-999)
    	{
        if(s<0) 
    	{
    	flag=1;
    	s=s*(-1);
    	}
    	int n=1,i=0;	
    	while(s>0)
    	{
    	 result[i++]=s%10+48;
    	  if(n%3==0)
    	   result[i++]=',';
    	   s=s/10; 
    	   n++; 
    	} 
    	if(flag==1) 
    	{
    	result[i++]='-';
        }
       	while(i>=0)
    	{
    		 printf("%c",result[i--]);
    	} 
    	printf("
    ");
    	}
    	 if(s<=999&&s>=-999)
    	 {
    	 	printf("%d
    ",s);
    	}
    	return 0; 
    } 
    

    结果一模一样的部分错误,所以我开始在编译器里一次一次调试代码发现错误,将判断是否需要加上“,”的那段代码稍微修正了一下,并且发现最后改成else就可以解决部分错误,但是不知道为什么输出结果前面会有一个小空格?

    #include <stdio.h>
    int main()
    {
    	int a,b,s,flag=0;
    	int n=1,i=0;
    	char result[20];
    	scanf("%d %d",&a,&b);
    	s=a+b;
    	if(s>999||s<-999)
    	{
        if(s<0) 
    	{
    	flag=1;
    	s=s*(-1);
    	}	
    	while(s>0)
    	{
    	 result[i++]=s%10+48;
    	  if(n%3==0)
    	   result[i++]=',';
    	   s=s/10; 
    	   n++; 
    	} 
    	if(flag==1) 
    	{
    	result[i++]='-';
        }
       	while(i>=0)
    	{
    		 printf("%c",result[i--]);
    	} 
    	printf("
    ");
    	}
        else
    	 {
    	 	printf("%d
    ",s);
    	}
    	return 0; 
    } 
    

    最后在同学的帮助下完成了最后的代码

    #include <stdio.h>
    int main()
    {
    	int a,b,s,n=1,i=0,flag=0;
    	char result[20];
    	scanf("%d %d",&a,&b);
    	s=a+b;
    	if(s>999||s<-999)
    	{
        if(s<0) 
    	{
    	flag=1;
    	s=s*(-1);
    	}	
    	while(s>0)
    	{
    	 result[i++]=s%10+48;
    	  if(n%3==0&&s/10!=0)
    	   result[i++]=',';
    	   s=s/10; 
    	   n++; 
    	} 
    	if(flag==1) 
    	result[i++]='-';
    	result[i--]='';
    	while(i>=0)
    	{
    		 printf("%c",result[i--]);
    	} 
    	printf("
    ");
    	}
    	 else 
    	 {
    	 	printf("%d
    ",s);
    	}
    	return 0; 
    } 
    

    在PAT上的提交记录列表截图

  • 相关阅读:
    B.Little Sub and Triples
    A.Little Sub and Applese
    1003 超级无敌简单题[暴力打表]
    1002 人类史上最大最好的希望事件[前缀和]
    1001 hzy 和zsl 的生存挑战
    Computer Arrangement [经典贪心]
    Linux指令
    LInux
    Servlet
    El表达式与JSTL表达式
  • 原文地址:https://www.cnblogs.com/fleur1025/p/6357780.html
Copyright © 2011-2022 走看看