华为2014机试题

http://blog.csdn.net/feigebuting/article/details/11769365

/************************************************************************/
/*  华为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、付费专栏及课程。

余额充值