当時は五十から四は、2点のテストエラーを平均化の基本的な演習をなでる処罰

経験:

1.sscanf())(デジタル2.sprintf文字列の形式から抽出することができ、デジタル形式の文字の配列で存在することができます

文字列が所望のフォーマットであるかどうかを、この特徴によれば確認することができ、sscanf関数は、()、sprintfの所望のフォーマット()は、所望のフォーマットに文字列を読み出す読み出し、

浮動小数点数が読み出される場合、それは、2つの小数点以下の精度が望まれる、はsprintf()は読み出し%.2f、その後、最初の文字列を横断することができ、それを決定することができるかどうか、それがない場合はフローティングため形式、 sscanf関数は、()の変化を生成する際のポイントは、間違っています

整数は自動的にいくつかの後ろに小数点とゼロが追加されますが、それは最初の文字列トラバーストラバースまでの時間だった、小数に横断していないと、コンソールの書き込みためと浮動小数点形式の整数を読み込むときは、右にカウントすることができます一部では、それはまだ同じ分析になります

例えば:のsscanf(STR1、 "%のLF")、STR1に5を書き込むコンソールは、ある5.000000とのsprintf(STR2、 "%の2F"、A)、STR2 5.00が、トラバーサルに読み込まれますstr1は、コンパレータ5 = 5の一部のみ

 

トピック:

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

入力フォーマット:

最初の行の入力は、正の整数N(≤100)が与えられます。次いで、ラインNの実数を与えられた数の間のスペースで区切られました。

出力フォーマット:

、不正入力の行ごとに出力ERROR: X is not a legal numberX入力されます。最終的な出力とライン:法的入力の数であるが、平均値その二進場所です。平均値で、計算できない場合は、交換もし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

 

アイデア:

文字列が有効な数値であるかどうかを判断するために使用のsscanf()、sprintfの()変換、他の人と学んだトリック

エラーのテストポイント2原因:注さて、出力されたときK = 1のThe average of 1 number is Y,是number而不是numbers

 

コード:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
    int num,legal=0;
    double temp,sum=0;
    cin>>num;
    for(int i=0;i<num;i++)
    {
        bool is_legal=true;
        char a[100],b[100];
        scanf("%s",a);
        sscanf(a,"%lf",&temp);
        sprintf(b,"%.2f",temp);
        for(int j=0;j<strlen(a);j++)
        {
            if(a[j]!=b[j])
            {
                is_legal=false;
                break;
            }
        }
        if(!is_legal||temp<-1000||temp>1000)
            printf("ERROR: %s is not a legal number\n",a);
        else
        {
            legal++;
            sum+=temp;
        }
    }
    if(legal==1)
        printf("The average of 1 number is %.2f\n",sum);
    else if(legal==0)
        printf("The average of 0 numbers is Undefined\n");
    else
        printf("The average of %d numbers is %.2f",legal,sum/legal);
    return 0;
}

 

 

 

公開された67元の記事 ウォンの賞賛5 ビュー2708

おすすめ

転載: blog.csdn.net/qq_40930559/article/details/104282427