【问题描述】输入 10 个数,按绝对值从大到小排序后输出。(要求用指针做) 【输入形式】输入10个float实数 【输出形式】以小数点后两位有效数字输出从大到小数列! 【样例输入】11.3 -24.1 31.6 -41 57.6 -68.1 72.5 -89.7 96.8 -100.3 【样例输出】 -100.30,96.80,-89.70,75.50,-68.10,57.60,-41.00,31.60,-24.10,11.30 【样例说明】 【评分标准】 用简单的c语言写
时间: 2023-11-27 12:49:48 浏览: 95
以下是参考代码,使用冒泡排序进行排序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10
void swap(float *a, float *b)
{
float tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
float arr[N];
float *ptr[N];
int i, j;
// 读入数据
for (i = 0; i < N; i++) {
scanf("%f", &arr[i]);
ptr[i] = &arr[i]; // 将指针数组的元素指向数据数组的元素
}
// 冒泡排序
for (i = 0; i < N - 1; i++) {
for (j = 0; j < N - 1 - i; j++) {
if (fabs(*ptr[j]) < fabs(*ptr[j+1])) { // 按绝对值比较
swap(ptr[j], ptr[j+1]);
}
}
}
// 输出结果
for (i = 0; i < N; i++) {
printf("%.2f%s", *ptr[i], i == N-1 ? "\n" : ",");
}
return 0;
}
```
首先定义一个长度为10的float数组 `arr`,以及一个长度为10的指针数组 `ptr`,将 `ptr` 的元素指向 `arr` 的元素。然后读入数据,按照冒泡排序的思路比较指针数组元素所指向的数据数组元素的绝对值大小,如果前一个比后一个小,就交换它们的指针。最后按照指针数组的顺序输出排序后的数据数组元素。
阅读全文