pat1054 求平均值 (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

分析:
(1)’.’ 点的使用 .123 错 -.123 错 123.对!!! 没想到吧,我也没想到
(2)- 只有他后面没了 错
(3)计算数的时候进制问题,小数点前面 101010 小数点后面0.10.10.1
(4)输出的时候 一个合法的话是 number 又是一个小坑坑
多个或0个合法用numbers

#include 
#include 
#include 
#include 
#include 
using namespace std;
char s[100];    //把数组啊,变量啊放在外面1.自动清零2.可以直接在各种函数中用
double Sum=0;    //这样的做法其实不好,容易混乱,但是简单啊省事啊。
int cnt=0;

void printerror(){   // 打出非法那串字
   printf("ERROR: %s is not a legal number\n",s);
}

void pan(){
    int cntd=0;  //数 "." 点 的个数(只能有一个点)
    for(int i=0;i'9'||s[i]<'0')||cntd>1)){    //不是点不是数字不是,或者点的个数多了
            if(s[i]=='-'&&i==0){    
                continue;
            }else{
                printerror();
                return;
            }
        }
    }
    int flag=0;    //判断是负是正
    int flag2=0;   //标一下到了小数部分换进制
    double sum=0;   目前这个数的大小
    double m=10;   //m是进制   
    int cntdd=0;     // 数 "." 点后字符 的个数(点后只能有两位)
    if(s[0]=='-'){
            flag=1;      //因为下面的计算没有负的关系,所以负号标一下千万别忘了
            if(strlen(s)==1){     //排除- 这种情况
                printerror();
                return;
            }
        }
    for(int i=0;i1000||sum<-1000||cntdd>2){  // 大还是小,小数点后几位的问题
        printerror();
        return;

    }
    Sum+=sum;
    cnt++;

}
void printave(){    //输出结果时候的各种sssss
    printf("The average of %d number",cnt);
    if(cnt!=1)printf("s");      
    printf(" is ");
    if(cnt==0){
        printf("Undefined");
    }else {
        printf("%.2lf",Sum/cnt);
    }

}
int main(){
    int n;
    scanf("%d",&n);
    getchar();
    for(int i=0;i

你可能感兴趣的:(pat)