用C语言编程,输入n个数,按绝对值从小到大排序后输出
时间: 2024-02-13 20:01:21 浏览: 39
好的,我来回答你的问题。下面是用C语言编写的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于qsort排序
int cmp(const void *a, const void *b) {
int x = abs(*(int*)a);
int y = abs(*(int*)b);
return x - y;
}
int main() {
int n, i;
int a[1000];
// 输入n个数
printf("请输入n个数:");
scanf("%d", &n);
printf("请输入这%d个数:", n);
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 按绝对值进行排序
qsort(a, n, sizeof(int), cmp);
// 输出排序结果
printf("按绝对值从小到大排序后的结果为:\n");
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
以上代码使用了C语言的qsort函数进行排序,该函数需要传入比较函数cmp,用于指定排序的方式。cmp函数中使用了C语言的abs函数计算绝对值。
相关问题
输入 10 个数,按绝对值从大到小排序后输出。(要求用指针做)c语言编程
以下是使用指针进行绝对值排序的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h> // 包含 abs 函数
void sort(int *arr, int n);
int main() {
int n, i;
printf("请输入数字个数:");
scanf("%d", &n);
int arr[n];
int *p = arr;
printf("请输入数字:");
for (i = 0; i < n; i++) {
scanf("%d", p + i);
}
sort(p, n);
printf("排序后的数字:");
for (i = 0; i < n; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
void sort(int *arr, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (abs(*(arr + i)) < abs(*(arr + j))) {
temp = *(arr + i);
*(arr + i) = *(arr + j);
*(arr + j) = temp;
}
}
}
}
```
使用指针可以使代码更加简洁,也更加高效。在输入数据时,我们使用指针 p 指向数组 arr 的首位,然后通过 `p + i` 访问数组的每个元素。在排序时,我们使用 `*(arr + i)` 访问数组的每个元素,并使用 `abs()` 函数计算其绝对值。
输入n个字符串按从小到大排序输出c语言
要按照从小到大的顺序对n个字符串排序并输出,可以使用C语言的字符串数组和字符串处理函数来实现。
首先,我们需要定义一个字符串数组来存储输入的n个字符串。假设我们定义的数组名为str,可以定义为char类型的二维数组,其中每一行存储一个字符串。
接下来,我们可以使用循环语句来读取n个字符串,并将它们存储到字符串数组中。
然后,我们可以使用排序算法对字符串数组进行排序。常见的排序算法有冒泡排序、快速排序和归并排序等。在这里,我们可以选择使用冒泡排序算法。
冒泡排序是一种简单且易于理解的排序算法。它通过比较相邻的两个元素并交换它们的位置来实现排序。由于我们要按照字符串的大小进行排序,可以使用strcmp()函数来比较两个字符串的大小。
最后,我们可以使用循环语句遍历已经排序好的字符串数组,并依次输出每个字符串。
下面是具体的代码实现:
```c
#include <stdio.h>
#include <string.h>
void bubbleSort(char str[][100], int n) {
int i, j;
char temp[100];
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (strcmp(str[j], str[j + 1]) > 0) {
strcpy(temp, str[j]);
strcpy(str[j], str[j + 1]);
strcpy(str[j + 1], temp);
}
}
}
}
int main() {
int n, i;
printf("请输入字符串的个数:");
scanf("%d", &n);
char str[n][100];
printf("请输入%d个字符串:\n", n);
for (i = 0; i < n; i++) {
scanf("%s", str[i]);
}
bubbleSort(str, n);
printf("按照从小到大排序后的字符串为:\n");
for (i = 0; i < n; i++) {
printf("%s\n", str[i]);
}
return 0;
}
```
以上是一个简单的实现方法,它可以实现按照从小到大的顺序对输入的n个字符串进行排序并输出。