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("\n");
	}
	 if(s<=999&&s>=-999)
	 {
	 	printf("%d\n",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("\n");
	}
	 if(s<=999&&s>=-999)
	 {
	 	printf("%d\n",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("\n");
	}
    else
	 {
	 	printf("%d\n",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--]='\0';
	while(i>=0)
	{
		 printf("%c",result[i--]);
	} 
	printf("\n");
	}
	 else 
	 {
	 	printf("%d\n",s);
	}
	return 0; 
} 

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

posted @ 2017-01-29 22:44  Fleur''  阅读(137)  评论(2编辑  收藏  举报