前言
正文
参考题解
#include<iostream>
#include<string.h>
using namespace std;
/* 题意:计算实数的平均值,值得注意的是有些非法的实数不需要计算在内, 合法实数应该是范围在[-1000,1000],小数点后不超过两位的实数 思路:这题刚开始想了一会儿,首先如何判断该实数是一个非法的实数(因为它 可能是其他什么乱七八糟的字符串,同时对于小数点后两位的要求) ,后面查找发现可以 巧妙地使用sscanf和ssprintf来将保留小数点后两位的该实数输出为一个字符串b,再与 原字符串a进行比较就可以判定是不是非法实数。 */
int n,cnt=0;
char a[100],b[100];
double temp,sum=0.0;
int main(){
cin>>n;
for(int i=0;i<n;i++){
scanf("%s",a);
sscanf(a,"%lf",&temp);
sprintf(b,"%.2lf",temp);
int len=strlen(a);
bool flag=false;
//注意len一定是a的长度
for(int j=0;j<len;j++){
if(a[j]!=b[j]){
flag=true;
break;
}
}
if(flag||temp<-1000||temp>1000){
printf("ERROR: %s is not a legal number\n",a);
}else{
sum+=temp;
cnt++;
}
}
//这里要注意当cnt==1时是写sum,不是temp,否则测试点2过不了
if(cnt==1)printf("The average of 1 number is %.2lf\n",sum);
else if(cnt>1)printf("The average of %d numbers is %.2lf\n",cnt,sum/cnt);
else printf("The average of 0 numbers is Undefined\n");
return 0;
}