华为2014机试题

/************************************************************************/
/*  华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和,
   输入以逗号隔开(c语言)                                                           */
/************************************************************************/
#include <stdio.h>
#include <MALLOC.H>
#include <string.h>
#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(*len<N)
	num[(*len)++]*=flag;
    
}
/************************************************************************/
/* 找出最大最小值                                                                     */
/************************************************************************/
void sort(double num[],int len)
{
   double max=num[0];
   double min=num[0];
   int i=1;
   for(;i<len;++i)
   {
	   if(num[i]>max)
		   max=num[i];
	   if(num[i]<min)
		   min=num[i];
   }
   printf("max(%f)+min(%f)=%f\n",max,min,max+min);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值