1054平均値を求める——c実現
2655 ワード
1054平均を求める(20 point(s))
本題の基本的な要求は非常に簡単である:N個の実数を与え、それらの平均値を計算する.しかし、複雑なのは、一部の入力データが不正である可能性があることです.「正当」の入力は[−10000000]区間の実数であり、小数点以下2桁まで正確である.平均値を計算するときは、不正なデータを含めてはいけません.
入力形式:
最初の行に正の整数N(≦100)を入力します.その後、1行にN個の実数を入力し、数値間をスペースで区切ります.
出力フォーマット:
各不正入力に対して、
サンプル1を入力:
出力サンプル1:
入力サンプル2:
出力サンプル2:
考え方:
この問題はsscanf()とsprintf()関数を用い,この関数のヘッダファイルが含まれているため,直接使用できる.sscanf()とsprintf()関数の使用は、scanf()/printf()/sscanf()/sprintf()/sprintf()
注意:
コードの中のa,bはすべて文字配列の最初のアドレスで、文字列を使わないでください、私は試してみました~~~
文字列aを%lfの形式でdouble変数に読み込み、double変数を%.2lfの形式で文字列bに読み込み、2つの文字列を比較してdoubleが入力されるかどうかを確認します.注意forサイクルではstrlen(a)とstrlen(b)を使用してもよい.またstrlen関数を使用するため、ヘッダファイルを含めなければならないので、含めてはいけません.
コード:
次のコードはsscanf()とsprintf()の理解に役立ちます.
本題の基本的な要求は非常に簡単である: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桁まで正確である.平均値が計算できない場合は、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
考え方:
この問題は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
*/