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

1054. 求平均值 (20)

时间:2018-03-08 10:40:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:scanf   1.3   div   atof   数字   stdio.h   出现   double   小数   

本题的基本要求非常简单:给定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
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 char str[100];
 5 int IsRight();
 6 int main()
 7 {
 8     int n,cnt=0;
 9     double sum=0.0, mean;
10     int i;
11     scanf("%d",&n);
12     for( i=0; i<n; i++)
13     {
14         scanf("%s",str);
15         if(IsRight(str))
16         {
17             sum += atof(str); //atof将字符串转换为double型浮点数,要带上stdlib.h头文件
18             cnt++;
19         }
20         else printf("ERROR: %s is not a legal number\n", str);
21     }
22     mean = sum/cnt;
23     printf("The average of %d number",cnt);
24     if( cnt==0 )
25         printf("s is Undefined");
26     else if( cnt==1)
27         printf(" is %.2f",mean); //number是单数的情况,坑
28     else printf("s is %.2f",mean);
29     return 0;
30 }
31 
32 int IsRight()
33 {
34     int i=0,dot=0,num=0; // 小数点数,小数点后的位数
35     if( str[0]==-) i++;
36     for( ; str[i]!=\0; i++)
37     {
38         if(( str[i]>=0 && str[i]<=9)|| str[i]==.)
39         {
40             //如果是0-9或者小数点
41             if( dot>0 && str[i]==.) //出现两个小数点
42                 return 0;
43             if( dot>0) num++;
44             if( str[i]==.)
45                 dot=1;
46         }
47         else return 0;
48     }
49     if( num>2) return 0;  //小数点后超过两位
50     if( atof(str)>1000.0 || atof(str)<-1000.0)
51         return 0;
52 
53     return 1;
54 }

 

1054. 求平均值 (20)

标签:scanf   1.3   div   atof   数字   stdio.h   出现   double   小数   

原文地址:https://www.cnblogs.com/yuxiaoba/p/8526773.html

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