1054 求平均值

本题的基本要求非常简单:给定 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
 
思路:注意还有一个合法区间 [1000,1000]的问题......
 
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 int main()
 6 {
 7     int N;
 8     scanf("%d",&N);
 9     float sum=0;
10     int T=0,mark;
11     char str[100]; 
12     for(int i=0;i!=N;i++)
13     {
14         scanf("%s",str);
15         int len=strlen(str);
16         int flag=0;
17         int fu=0,dian=0;
18         for(int i=0;i<len;i++)
19         {
20             if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
21             {
22                 flag=1;
23                 break;
24             }
25             else if(str[i]=='-')
26                 fu++;
27             else if(str[i]=='.')
28             {
29                 dian++;
30                 mark=i;
31             }
32         }
33         int flag1=0;
34         if(flag==1||dian>1||fu>1)
35             printf("ERROR: %s is not a legal number
",str);
36         else 
37         {
38             if(atof(str)>1000||atof(str)<-1000)
39                 printf("ERROR: %s is not a legal number
",str);
40             else 
41             {
42                 if(dian==1)
43                 {
44                     if((len-mark)>3)
45                     {
46                         flag1=1;
47                          printf("ERROR: %s is not a legal number
",str);
48                     }
49                  }
50                 if(flag1==0)
51                 {
52                     sum=sum+atof(str);
53                     T++;
54                 }
55             }
56         }
57     }
58     if(T==0)
59         printf("The average of 0 numbers is Undefined
");
60     else if(T==1)
61     {
62         float average=sum/T;
63         printf("The average of %d number is %.2f
",T,average);
64     }
65     else 
66     {
67         float average=sum/T;
68         printf("The average of %d numbers is %.2f
",T,average);
69     }
70     return 0;
71 }
大佬见笑,,
原文地址:https://www.cnblogs.com/xwl3109377858/p/10479402.html