这个题目的关键在于非法条件的判定,其它都还好。
需要注意的是,k为1的时候,number后面没有s。
#include <stdio.h>
#include <math.h>
#include <string.h>
double trans(char *a);
int judge(char *a);
int main()
{
int N,k=0,i;
double temp,total;
char s[200];
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%s",s);
if(judge(s)){
k++;
if(s[0]!='-')
total+=trans(s);
else{
total-=trans(&s[1]);
}
}
else
printf("ERROR: %s is not a legal number\n",s);
}
if(k!=1)
printf("The average of %d numbers is ",k);
else
printf("The average of 1 number is ");
if(k)
printf("%.2f\n",total/k);
else
printf("Undefined\n");
}
double trans(char *a)
{
int len=strlen(a);
int i=0,k=0,j;
double result=0;
for(;i<len;i++)
{
if(a[i]=='.')
{
result/=pow(10,len-i);
j=i;
k=1;
}
else if(!k)
result+=(a[i]-'0')*pow(10,len-i-1);
else if(k)
result+=(a[i]-'0')*pow(0.1,i-j);
}
return result;
}
int judge(char *a)
{
int len=strlen(a);
if(len>8)
return 0; //长度不可能大于8
int i,c=0,d=0;
for(i=0;i<len;i++){
if(c)
d++;
switch(a[i]){
case '-':if(i)
return 0;
break;
case '.':c++;
if(c>1)
return 0;
break;
default:if(a[i]>='0'&&a[i]<='9')
break;
else
return 0;
}
}
double k;
if(a[0]!='-')
k=trans(a);
else
k=-trans(&a[1]);
if(d>2||k>1000||k<-1000)
return 0;
return 1;
}