この問題の基本的な要件は単純です:与えられたために Nの実数、その平均を算出します。しかし、合併症は、入力データの一部が違法であってもよいことです。[「法的」の入力がある- ]本物の間隔で数、および小数点以下1桁に最も正確な。あなたは平均値を計算し、それらのない不正なデータ数。
入力フォーマット:
最初の行の入力は正の整数で与えられる Nを(≤)。次に行所定の 数の間のスペースで区切られたN個の実数を、。
出力フォーマット:
、不正入力の行ごとに出力 ERROR: X is not a legal number
、 X
入力されます。最終的な出力とライン: 法的入力の数であるが、 その平均値、2桁です。平均値で、計算できない場合は 、交換 。もし 、その後、1出力 。The average of K numbers is Y
K
Y
Undefined
Y
K
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
する#include <stdio.hに> する#include < 文字列・H> の#include <iostreamの> する#include <math.h>の 書式#include <のctype.h> の#include < malloc関数 .H> の#include <iomanip> する#include <STDLIB。 H> 使用して 名前空間はstdを、 int型 youxiaoを(CHAR S []) { int型 N1 = 0、N2 = 0、I = 0、ドット= 0 。 もし(S [I] == ' - ' ) { I =。1 ; } のための(; S [I] =!' \ 0 ' ; Iは++ ) { IF((S [I] < 48 || 57である!<S [I])&& S [I] = ' ')に戻ります0 ; IF(DOT == 1つの && S [I] == ' ')戻り0 ; IF(DOT == 1)N2 ++; // このステップ及び次ではないかもしれ逆さ位置、またはマルチコンピューティングN2 IF(S [I] == ' ')= DOT 1。; IF(DOT == 0)N1 ++ ; } IF(N> 2)戻り 0 ; // 小数部分は、二つ以上の正規でない IF(atof(S)< - 1000.0 || atof(S)> 1000.0)戻り 0 ; // 浮動小数点へatof文字列を、有効な範囲か否かを判断する リターン 1。; } int型(メイン) { int型 N-、CNT = 0 ; ダブル SUM = 0.0 、V; CHAR TMP [ 101 ] = { 0 }; CINは>> N; 以下のために(int型 i = 0 ; iがn <I ++の) { CIN >> TMPを、 もし(youxiao(TMP)) { 合計 + = atof(TMP)。 CNT ++ ; } 他 { COUT << " ERROR:" << TMP << " ではない法的番号" << ENDL。 } } 、V =和/ CNT。 coutの << "平均" ; もし(CNT == 0 ) { COUT << " 0番号が定義されていない" ; } もし(CNT == 1 ) { COUT << " 1の数である" ; のprintf(" %の.2f " 、V ); } もし(CNT> = 2 ) { のprintf(" %d個の数は%.2fある" 、CNT、V); } 戻り 0 ; }