PAT1054 -----値は、選択の要件を満たしていません

この問題の基本的な要件は単純です:与えられたために  Nの実数、その平均を算出します。しかし、合併症は、入力データの一部が違法であってもよいことです。[「法的」の入力がある- ]本物の間隔で数、および小数点以下1桁に最も正確な。あなたは平均値を計算し、それらのない不正なデータ数。

入力フォーマット:

最初の行の入力は正の整数で与えられる  Nを(≤)。次に行所定の  数の間のスペースで区切られたN個の実数を、。

出力フォーマット:

、不正入力の行ごとに出力  ERROR: X is not a legal number、  X 入力されます。最終的な出力とライン: 法的入力の数であるが、 その平均値、2桁です。平均値で、計算できない場合は   、交換  もし   、その後、1出力  The average of K numbers is YKYUndefinedYKThe 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 ; 
}

https://blog.csdn.net/plank_root/article/details/51714578

おすすめ

転載: www.cnblogs.com/BananaMan/p/11324476.html