1108 Finding Average (20 分)
题目大意
简单的数字处理问题。给出一组序列,找出其中的合法元素(在[-1000,1000]之内的最多保留小数点后两位的浮点数),并求合法浮点数的个数和平均值。
基本思路
用下面两个函数可以巧妙地解决这个问题:
sscanf() – 从一个字符串中读进与指定格式相符的数据
sprintf() – 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
看不明白可以打开我的注释,一目了然~
代码
/*sscanf() – 从一个字符串中读进与指定格式相符的数据
sprintf() – 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中 */
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 0;
int cnt = 0;//合法的数字个数
double sum = 0.0;//合法的数字之和
cin >> n;
for(int i = 0; i < n; i++) {
char a[50], b[50];
double temp;
//把读入的字符串经过如下过程的处理
scanf("%s", a);
// printf("%s ",a);
sscanf(a, "%lf", &temp);
// printf("%lf ",temp);
sprintf(b, "%.2f",temp);
// printf("%s\n",b);
//根据数组a和数组b中的字符是否全部相同判断当前字符是否合法
int flag = 0;
for(int j = 0; j < strlen(a); j++){
if(a[j] != b[j]){
flag = 1;
}
}
//判断数组a是否合法,并作相应的处理
if(flag || temp < -1000 || temp > 1000) {
printf("ERROR: %s is not a legal number\n", a);
} else {
sum += temp;
cnt++;
}
}
if(cnt == 1)
printf("The average of 1 number is %.2f", sum);
else if(cnt > 1)
printf("The average of %d numbers is %.2f", cnt, sum / cnt);
else
printf("The average of 0 numbers is Undefined");
}