1054平均値を求める——c実現

2655 ワード

1054平均を求める(20 point(s))
本題の基本的な要求は非常に簡単である:N個の実数を与え、それらの平均値を計算する.しかし、複雑なのは、一部の入力データが不正である可能性があることです.「正当」の入力は[−10000000]区間の実数であり、小数点以下2桁まで正確である.平均値を計算するときは、不正なデータを含めてはいけません.
入力形式:
最初の行に正の整数N(≦100)を入力します.その後、1行にN個の実数を入力し、数値間をスペースで区切ります.
出力フォーマット:
各不正入力に対して、ERROR: X is not a legal numberが1行に出力され、Xが入力である.最後に、行に出力された結果:The average of K numbers is Y、そのうちKは合法的に入力された個数であり、Yはそれらの平均値であり、小数点以下2桁まで正確である.平均値が計算できない場合は、UndefinedYに置き換えます.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

考え方:
この問題はsscanf()とsprintf()関数を用い,この関数のヘッダファイルが含まれているため,直接使用できる.sscanf()とsprintf()関数の使用は、scanf()/printf()/sscanf()/sprintf()/sprintf()
注意:
sscanf(a,"%lf",&tmp);
sprintf(b,"%.2lf",tmp);

コードの中のa,bはすべて文字配列の最初のアドレスで、文字列を使わないでください、私は試してみました~~~
文字列aを%lfの形式でdouble変数に読み込み、double変数を%.2lfの形式で文字列bに読み込み、2つの文字列を比較してdoubleが入力されるかどうかを確認します.注意forサイクルではstrlen(a)とstrlen(b)を使用してもよい.またstrlen関数を使用するため、ヘッダファイルを含めなければならないので、含めてはいけません.
コード:
#include 
#include 
using namespace std;
int main(){
	int N,i,j,cnt=0;	cin>>N;
	double sum=0,tmp;
	char a[50],b[50];
	for(i=0;i1000){
			printf("ERROR: %s is not a legal number
",a) ; continue; } else{ sum+=tmp; cnt++; } } if(cnt>1) printf("The average of %d numbers is %.2lf",cnt,sum/cnt); else if(cnt==1) printf("The average of 1 number is %.2lf",sum); else printf("The average of 0 numbers is Undefined"); return 0; }

次のコードはsscanf()とsprintf()の理解に役立ちます.
#include 

int main(){
	char a[10],b[10];
	double tmp;
	scanf("%s",&a);
	sscanf(a,"%lf",&tmp);
	sprintf(b,"%.2lf",tmp);
	if(a[0]==b[0])	printf("hello	%c	%c	%lf",a[0],b[0],tmp);
	if(a[0]!=b[0])	printf("world	%c	%c	%lf",a[0],b[0],tmp);
}
/*
input:s
output:world   s       0

input:23
output:hello   2       2
*/