您的位置:首页 > 其它

输入5个数(含负数、小数)将它们按由小到大的顺序排列起来 提示:需要排数的数字通过参数传递进来, 例如:输入:./a.out -1 2.1 -3 5 7输出: -3 -1 2.1 5 7

2017-08-04 14:55 1171 查看
#include<stdio.h>

#define False 0

#define True 1

double StrToFloat(const char *str)

{
if (str == NULL)
{
return -1;
}

double s = 0.0;
double d = 10.0;
int flag = False;

while (*str == ' ') //跳过多余的空格
{
str++;
}

if (*str == '-') //负号处理,防止True标志,并跳至下一位
{
flag = True;
str++;
}

if (!(*str >= '0' && *str <= '9')) //如果遇到的第一个非数字则返回0.0
{
return s;
}

while (*str <= '9' && *str >= '0') //整数部分先转化为int型
{
s = s * 10.0 + *str - '0';
str++;
}

if (*str == '.') //到达小数点
{
str++;
}

while (*str >= '0' && *str <= '9') //处理小数部分,转换为浮点型
{
s = s + (*str - '0') / d;
d *= 10;
str++;
}

return s * (flag? -1.0 : 1.0); //负数则返回-1*s

}

void Swap(double *a, double *b)

{
double temp = 0;
temp = *a;
*a = *b;
*b = temp;

}

void Sort(double *Arr, int n)  //冒泡排序

{
int i = 0;
int j = 0;

for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (Arr[j] > Arr[j + 1])
{
Swap(&Arr[j], &Arr[j + 1]);
}
}
}

}

void PrintArr(const double *Arr, int n)

{
int i = 0;

for (i = 0; i < n; i++)
{
if (Arr[i])
  //除去第一个执行命令的0.0,打印排序好的数字
{
printf ("%g ", Arr[i]);
}
}
printf ("\n");

}

 

int main(int argc, char *argv[])

{
int i = 0;
double Arr[100];

for (i = 0; i < argc; i++)
{
Arr[i] = StrToFloat(argv[i]); //将输入的浮点数字符串转换为浮点型放到数组中
}

Sort(Arr, argc); //排序
PrintArr(Arr, argc); //打印数组

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐