华为2014机试题

/************************************************************************/
/*  华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和,
   输入以逗号隔开(c语言)                                                           */
/************************************************************************/
#include 
#include 
#include 
#define N 50
void readStr(char **);
void getArray(const char * ,int *,double []);
void sort(double [],int);
int main()
{

	
    char *str=0;
	int len=0;
	double num[N]={0};
	readStr(&str);

	getArray(str,&len,num);
    sort(num,len);
	return 0;
}
/************************************************************************/
/* 读取字符串                                                                     */
/************************************************************************/
void readStr(char **str)
{
    char *oldStr=0;
	int ch;
	int len=1;
	while((ch=getchar())!='\n')
	{
		
		(*str)=(char*)malloc(++len*sizeof(char));
		if(oldStr)
		{
			strcpy(*str,oldStr);
			free(oldStr);
		}
		(*str)[len-2]=(char)ch;
        (*str)[len-1]='\0';
		oldStr=*str;
	}
	
}
/************************************************************************/
/*  解析字符串为double数组                                                                     */
/************************************************************************/
void getArray(const char * str,int *len,double num[])
{
   
	int index=0;
	int flag=1;
	int point=1;
	int minus=10;
	while((*str)!='\0')
	{
	
	   if(*str!=',')
	   {
		   
		   if(*str=='-')
		   {
               flag=-1;
		   }
		   else if(*str=='.')
		   {
			   point=0;
		   }
		   else if(point==1)
		   {
			 num[*len]=num[*len]*10+(*str-'0');
		   }
		   else
		   {
			  
			   num[*len]+=(double)(*str-'0')/minus;
			   minus*=10;
		   }
	   }
	   else
	   {
		   num[(*len)++]*=flag;
		   if(*len>N)
			   break;
		   flag=1;
		   point=1;
		   minus=10;
	   }
	   ++str;
	}
	if(*lenmax)
		   max=num[i];
	   if(num[i]

你可能感兴趣的:(c)