• 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
     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
    ", 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]!=''; 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 }
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    [整理]Win下好用的Markdown工具
    tcpip http socket
    [整理].net中的延迟初始化器
    [整理]ASP.NET WEB API 2学习
    [整理]ASP.NET MVC 5
    [转载]AngularJS 指令 用法
    [整理]HTML5 WebSocket
    [整理]CSS3 滤镜
    [整理]WebAPP开发的框架
    [整理]AngularJS移动端开发遇到的问题
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8526773.html
Copyright © 2020-2023  润新知