【问题描述】输入 10 个数,按绝对值从大到小排序后输出。(要求用指针做) 【输入形式】输入10个float实数C语言
时间: 2023-11-27 11:50:38 浏览: 109
c语言+从键盘输入10个无序的整数,存放在数组中,找出数组中最大值与最小值的所在的位置,并输出数组元素所在的位置与数组元素的值
5星 · 资源好评率100%
以下是一个用指针实现的C语言程序,可以实现按绝对值从大到小排序的功能:
```c
#include <stdio.h>
#include <stdlib.h> // 使用 abs 函数需要包含的头文件
int cmp(const void *a, const void *b); // 自定义比较函数
int main() {
float arr[10];
float *p[10];
int i;
printf("请输入10个实数:\n");
for (i = 0; i < 10; i++) {
scanf("%f", &arr[i]);
p[i] = &arr[i];
}
qsort(p, 10, sizeof(float *), cmp); // 调用 qsort 函数排序
printf("按绝对值从大到小排序后的结果为:\n");
for (i = 0; i < 10; i++) {
printf("%f ", *p[i]);
}
printf("\n");
return 0;
}
int cmp(const void *a, const void *b) {
float abs_a = abs(*(float *)a);
float abs_b = abs(*(float *)b);
if (abs_a > abs_b) {
return -1;
} else if (abs_a < abs_b) {
return 1;
} else {
return 0;
}
}
```
程序首先定义了一个长度为10的浮点数组 `arr`,以及一个指针数组 `p`,并且将 `p` 的每个元素指向 `arr` 中相应元素的地址。然后通过循环输入10个实数,并将 `p` 中的元素指向的值按绝对值从大到小排序,最后输出排序结果。
注意,这里自定义了一个比较函数 `cmp`,用于比较两个指针指向的值的绝对值大小。在比较函数中,首先通过 `(float *)a` 和 `(float *)b` 将指针转换为指向浮点数的指针,然后用 `abs` 函数计算这两个浮点数的绝对值,并根据绝对值的大小返回相应的比较结果。最后,在 `main` 函数中调用 `qsort` 函数进行排序,其中的 `sizeof(float *)` 表示指针的大小。
阅读全文