1054. 求平均值 (20)
阿新 • • 發佈:2017-07-26
lag += 均值 分隔 2.3 blog define stdio.h 區間
本題的基本要求非常簡單:給定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 }
1054. 求平均值 (20)