码迷,mamicode.com
首页 > 其他好文 > 详细

1054. 求平均值 (20)

时间:2017-07-26 21:51:29      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:[]   区间   简单   平均值   atof   class   3.2   基本   无法   

本题的基本要求非常简单:给定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

code:
 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 
 5 int islegal(char a[]) 
 6 {
 7     int i = 0,flag = 0,count = 0;
 8     if(a[0] == -)
 9         i = 1;
10     for(;i < strlen(a);i++)
11     {
12         if((a[i] < 0 || a[i] > 9)&&a[i] != .)//只能是数字或小数点 
13             return 0;
14         if(a[i] == . && flag == 1)//只能有一个小数点 
15             return 0;    
16         if(flag == 1)//只能精确到小数点后两位 
17             count++;
18         if(a[i] == .)
19             flag = 1;
20                                 
21     }
22     if(count > 2)
23         return 0;
24     if(atof(a) < -1000.0 || atof(a) > 1000.0)
25         return 0;
26     return 1;        
27 }
28 int main()
29 {
30     int n,i,count = 0;
31     double sum = 0.0;
32     scanf("%d",&n);
33     getchar();
34     char a[101] = {0};
35     for(i = 0;i < n;i++)
36     {
37         scanf("%s",a);
38         if(islegal(a))
39         {
40             sum += atof(a);
41             count++;
42         }
43         else 
44             printf("ERROR: %s is not a legal number\n",a);                    
45     }
46     double average = sum/count;
47     if(count == 0)
48         printf("The average of 0 numbers is Undefined");
49     else if(count == 1)
50         printf("The average of 1 number is %.2lf",average);    
51     else
52         printf("The average of %d numbers is %.2lf",count,average);    
53 
54     return 0;
55 } 

 



1054. 求平均值 (20)

标签:[]   区间   简单   平均值   atof   class   3.2   基本   无法   

原文地址:http://www.cnblogs.com/huyuan1004/p/7241780.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!