用c语言将数组中的负数提取出来并且将数组中的负数从大到小排序正数按原位置输出
时间: 2024-02-13 22:05:42 浏览: 90
C语言程序设计-编写程序。从键盘读入8个整数存入数组a中并输出这8个数据。和、最大值、最小值及平均值。正数之和、负数之和
5星 · 资源好评率100%
好的,我来为您解答这个问题。
您可以按照以下步骤实现:
1. 定义一个整型数组,并初始化数组元素。
2. 遍历数组,将负数提取出来,并存放到一个新的数组中。
3. 对新的数组进行从大到小排序。
4. 再次遍历原数组,将正数按原位置输出。
5. 最后,输出排序后的负数数组。
以下是完整的 C 代码实现:
```c
#include <stdio.h>
int main() {
int arr[] = {5, -3, 8, -2, -9, 0, 4};
int len = sizeof(arr)/sizeof(arr[0]); // 数组长度
int neg[len], pos[len]; // 定义负数数组和正数数组
int neg_cnt = 0; // 负数计数器
// 遍历数组,将负数提取出来
for (int i = 0; i < len; i++) {
if (arr[i] < 0) {
neg[neg_cnt] = arr[i];
neg_cnt++;
}
}
// 对负数数组进行从大到小排序
for (int i = 0; i < neg_cnt-1; i++) {
for (int j = i+1; j < neg_cnt; j++) {
if (neg[i] < neg[j]) {
int tmp = neg[i];
neg[i] = neg[j];
neg[j] = tmp;
}
}
}
// 输出正数按原位置的值
for (int i = 0; i < len; i++) {
if (arr[i] >= 0) {
printf("%d ", arr[i]);
}
}
// 输出排序后的负数数组
printf("\n");
for (int i = 0; i < neg_cnt; i++) {
printf("%d ", neg[i]);
}
printf("\n");
return 0;
}
```
输出结果为:
```
5 8 0 4
-2 -3 -9
```
希望能够帮到您!
阅读全文