1054 求平均值 (20分)

1054 求平均值 (20分)
 

本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。

输入格式:

输入第一行给出正整数 N(100)。随后一行给出 N 个实数,数字间以一个空格分隔。

输出格式:

对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The average of K numbers is Y,其中 K 是合法输入的个数,Y 是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined 替换 Y。如果 K 为 1,则输出 The average of 1 number is Y

输入样例 1:

7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
 

输出样例 1:

ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38
 

输入样例 2:

2
aaa -9999
 

输出样例 2:

ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined


这题我看别人都是用sscanf去做的,我用的是最傻的办法,
看起来不太整洁,思路还是通的。。我首先把前面有可能是
正号还是负号先用个变量标记上,由于是浮点数,所以只有
数字和点能是合法的字符,需要两个变量去看数字和点的个数
以及小数点后有几位了。。。这是因为有可能有好几个小数点
或者只有一个小数点没有数字,或者小数点后有效位已超过俩位
这几个变量可以识别这些,其他就没什么了。。。









#include<stdio.h>
#include<math.h>
 int main()
 {
  int n;
 scanf("%d",&n);
 int count=0;
 double sum=0;
 double temp;
 char a[1000];
 int i,j;
 int flag;
 int fu;
 int count_idot,count_num,num_idot;
 for(i=0;i<n;i++)
 {
  fu=1;
  flag=0;
  count_idot=0;
  count_num=0;
  temp=0;
  temp=0;
  num_idot=0;
  scanf("%s",a);
  j=0;
  if(a[0]=='+'||a[0]=='-')
  {
   j=1;
   if(a[0]='-')
   fu=-1;
  }
  for(;a[j]!=0;j++)
  {
   if(a[j]>='0'&&a[j]<='9'||a[j]=='.')
   {
    if(a[j]=='.')
    {
    count_idot++;
    if(count_idot>1)
    {
    flag=1;
    break;
        }
    continue;
       }
       else
       {
        if(!count_idot)
        temp=temp*10+a[j]-'0';
        else
        {
         num_idot++;
         if(num_idot>2)
         {
         flag=1;
         break;
            }
         temp+=(a[j]-'0')/pow(10,num_idot);
     }
     count_num++;
    }
   }
   else
   {
    flag=1;
    
   }
  }
  if(count_idot==1&&count_num==0)
  flag=1;
  if(temp<-1000||temp>1000)
  flag=1;
  if(flag)
  {
   printf("ERROR: %s is not a legal number\n",a);
  }
  else
  {
   count++;
   sum+=temp*fu;
  }
   
 }
 if(count==0)
 {
  printf("The average of 0 numbers is Undefined\n");
 }
 else
 {
  if(count!=1)
  printf("The average of %d numbers is %.2f\n",count,sum/count);
  else
  printf("The average of 1 number is %.2f\n",sum);
 }
  return 0;
 }



posted @ 2020-11-07 18:29  罪梦者  阅读(131)  评论(0)    收藏  举报