标签:[] 区间 简单 平均值 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 }
标签:[] 区间 简单 平均值 atof class 3.2 基本 无法
原文地址:http://www.cnblogs.com/huyuan1004/p/7241780.html