PTA 7-2 实数排序(指针)

本题要求编写程序,输入n个实数,使用指针引用的方式将它们按从大到小的顺序排列。

输入格式:
输入第一行给出一个正整数n(2≤n≤10),输入第二行给出n个实数,其间以空格分隔。

输出格式:
输出从大到小排好序的n个数(保留2位小数),每个数之间空一格,行末没有空格。

输入样例:
在这里给出一组输入。例如:

5
3.2 5.4 6.12 2.51 4.23

输出样例:
在这里给出相应的输出。例如:

6.12 5.40 4.23 3.20 2.51

代码:

#include<stdio.h>
#include<stdlib.h>
double order(double *p, int num,double *k);
int main() {
	double  a[10], b[10];
	int num, i;
	scanf("%d", &num);
	for (i = 0; i < num; i++) {
		scanf("%lf", &a[i]);
	}
	order(a, num,b);
	for (i = 0; i < num; i++) {
		if (i == num - 1) {
			printf("%.2lf", b[num - 1]);
		}
		else {
			printf("%.2lf ", b[i]);
		}
	}
	return 0;
}
double order(double* p, int num,double*k) {
	int cnt = 0;
	int i, t;
	for (i = 0; i < num; i++) {
		for (t = 0; t < num; t++) {
			if ( * (p + i) < *(p + t)) {
				cnt++;
			}
		}
		*(k + cnt) = *(p + i);
		cnt = 0;
	}
}
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是 C 语言代码的实现示例: ``` #include <stdio.h> #include <stdlib.h> void swap(double *a, double *b) { double temp = *a; *a = *b; *b = temp; } void sort(double *arr, int size) { int i, j; for (i = 0; i < size - 1; i++) { for (j = 0; j < size - i - 1; j++) { if (arr[j] < arr[j + 1]) { swap(&arr[j], &arr[j + 1]); } } } } int main() { int n, i; double *arr; printf("Enter number of elements: "); scanf("%d", &n); arr = (double*) malloc(n * sizeof(double)); printf("Enter %d elements: ", n); for (i = 0; i < n; i++) { scanf("%lf", &arr[i]); } sort(arr, n); printf("Sorted elements: "); for (i = 0; i < n; i++) { printf("%.2lf ", arr[i]); } return 0; } ``` ### 回答2: 要实现按从大到小的顺序排列,可以使用冒泡排序算法。该算法通过不断比较相邻两个数的大小,并交换位置,从而将最大值交换到序列末尾。重复此过程,直至整个序列变为有序。 具体实现过程如下: 1. 首先定义一个指针数组,用于存储n个实数的地址。 2. 接着循环遍历数组,读入每个实数,并将其地址存入指针数组中。 3. 接下来开始排序。实现排序的函数接受指针数组和数组长度作为参数。函数内部使用指针引用方式实数进行比较和交换。 4. 在函数中使用冒泡排序算法指针数组进行排序,从而实现按从大到小的顺序排列。 5. 最后在主函数中调用排序函数,并输出排序后的结果。 以下是代码实现: #include <stdio.h> void sort(float **p, int n) { int i, j; float *t; for (i = 0; i < n - 1; i++) { for (j = i + 1; j < n; j++) { if (**(p + i) < **(p + j)) { t = *(p + i); *(p + i) = *(p + j); *(p + j) = t; } } } } int main() { int n, i; float a[100], *p[100]; printf("请输入实数个数n: "); scanf("%d", &n); // 将实数的地址存入指针数组 for (i = 0; i < n; i++) { printf("请输入第%d个实数: ", i + 1); scanf("%f", &a[i]); p[i] = &a[i]; } // 调用排序函数 sort(p, n); // 输出排序结果 printf("按从大到小的顺序排序后的结果为:\n"); for (i = 0; i < n; i++) { printf("%.2f ", *p[i]); } printf("\n"); return 0; } 在代码中,float **p表示一个指向指针指针,也可以表示一个指向指针数组的指针,因为指针数组本质就是一个指针指针使用指针引用方式,可以通过*p来访问指针所指向的实数值,而使用**p,可以直接访问指针所指向的实数值。 ### 回答3: 这个问题需要我们编写一个程序,输入n个实数,并使用指针引用方式将它们按从大到小的顺序排列。这个问题可以通过一些基本的算法和数据结构来解决。 首先,我们需要定义一个数组来存储n个实数。然后,我们可以使用指针引用方式,将这些实数按从大到小的顺序排序。下面是使用指针引用排序算法: 1. 声明一个指向实数数组的指针p。 2. 循环遍历整个数组,找到最大的实数,并将其指针p指向该数。 3. 将最大的实数与数组中最后一个数交换。这样,最大的实数就被放到了正确的位置。 4. 重复第2步和第3步,直到所有的实数都被排序。 这个算法的时间复杂度是O(n^2),因为它需要遍历整个数组n次。然而,它是非常简单和易于实现的。 下面是一个使用指针引用排序算法的代码示例: ```c #include <stdio.h> void sort(int n, double *p) { double *max; double tmp; for (int i = 0; i < n; i++) { max = p; for (int j = i + 1; j < n; j++) { if (*max < *(p + j)) { max = p + j; } } tmp = *max; *max = *(p + i); *(p + i) = tmp; } } int main() { int n; double arr[100]; printf("请输入实数的个数:"); scanf("%d", &n); printf("请输入实数:"); for (int i = 0; i < n; i++) { scanf("%lf", &arr[i]); } sort(n, arr); printf("按从大到小的顺序排列后的实数:"); for (int i = 0; i < n; i++) { printf("%lf ", arr[i]); } return 0; } ``` 这个程序首先要求用户输入实数的个数和实数。然后它调用sort函数,使用指针引用方式按从大到小的顺序排列实数。最后,它打印出排列后的实数。 这个程序演示了如何使用指针引用方式实现排序算法。这种方法可以使排序更快、更有效,并且更容易实现和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值