• 用指针和动态内存分配的方法输入10,2,30, 4,5,按输入顺序逆置排序,输出排序后的元素,即输出5,4,30,2,10


    该问题涉及到了指针和动态内存分配的运用,以及对数组进行排序和逆序输出的实现。以下是一个基于C语言的技术博客,包含了对输入数据进行排序和逆序输出的详细代码案例。

    首先,我们需要引入头文件 ​​stdio.h​​ 和 ​​stdlib.h​​ 以使用标准输入输出函数和动态内存分配函数。

    1. c复制代码
    2. #include
    3. #include

    接下来,我们需要定义一个结构体 ​​struct Number​​,用于存储输入的数字数据。同时,我们还需要定义一个指向该结构体的指针 ​​struct Number *numbers​​,以便进行动态内存分配和排序操作。

    1. c复制代码
    2. struct Number {
    3. int number;
    4. };
    5. struct Number *numbers;

    在主函数中,我们需要先使用 ​​malloc()​​ 函数为 ​​numbers​​ 分配足够的内存空间,以存储输入的数字数据。这里我们使用了 ​​sizeof()​​ 函数计算结构体 ​​Number​​ 的大小,并分配了能够存储 10 个 ​​Number​​ 结构体的内存空间。

    1. c复制代码
    2. int main() {
    3. int count = 10;
    4. numbers = (struct Number *)malloc(count * sizeof(struct Number));
    5. if (numbers == NULL) {
    6. printf("Memory allocation failed.\n");
    7. return 1;
    8. }

    接下来,我们需要从标准输入中读取 10 个数字数据,并将它们存储到 ​​numbers​​ 中。这里我们使用了循环和指针操作来实现。

    1. c复制代码
    2. for (int i = 0; i < count; i++) {
    3. printf("Enter number %d: ", i + 1);
    4. scanf("%d", &(numbers[i].number));
    5. }

    然后,我们需要对这些数字数据进行排序。这里我们使用了冒泡排序算法,通过比较相邻元素的大小,并进行交换操作来实现排序。排序完成后,我们就可以输出这些数字数据了。为了实现逆序输出,我们还需要将数组进行倒序排列。

    1. c复制代码
    2. for (int i = 0; i < count - 1; i++) {
    3. for (int j = i + 1; j < count; j++) {
    4. if (numbers[i].number > numbers[j].number) {
    5. int temp = numbers[i].number;
    6. numbers[i].number = numbers[j].number;
    7. numbers[j].number = temp;
    8. }
    9. }
    10. }
    11. for (int i = count - 1; i >= 0; i--) {
    12. printf("%d ", numbers[i].number);
    13. }

    最后,我们需要释放动态内存以避免内存泄漏。这里我们使用了 ​​free()​​ 函数来实现。

    1. c复制代码
    2. free(numbers);
    3. return 0;

    完整的代码如下:

    1. c复制代码
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. struct Number {
    5. int number;
    6. };
    7. int main() {
    8. int count = 10;
    9. struct Number *numbers = (struct Number *)malloc(count * sizeof(struct Number));
    10. if (numbers == NULL) {
    11. printf("Memory allocation failed.\n");
    12. return 1;
    13. }
    14. for (int i = 0; i < count; i++) {
    15. printf("Enter number %d: ", i + 1);
    16. scanf("%d", &(numbers[i].number));
    17. }
    18. for (int i = 0; i < count - 1; i++) {
    19. for (int j = i + 1; j < count; j++) {
    20. if (numbers[i].number > numbers[j].number) {
    21. int temp = numbers[i].number;
    22. numbers[i].number = numbers[j].number;
    23. numbers[j].number = temp;
    24. }
    25. }
    26. }
    27. for (int i = count - 1; i >= 0; i--) {
    28. printf("%d ", numbers[i].number);
    29. }
    30. free(numbers);
    31. return 0;
    32. }
  • 相关阅读:
    Redis的安装教程(Windows+Linux)【超详细】
    VS系列多通道振弦温度采发仪的选型与开机操作
    python基础语法(四)
    原生js做打地鼠游戏
    音视频开发—V4L2介绍,FFmpeg 打开摄像头输出yuv文件
    基于C++的简单ANN(人工神经网络)模型
    下载Windows 10操作系统和在VMware虚拟机中配置完成
    AXS2030 5.2W 单通道 AB/D 类音频功率放大器
    01-Typescript基础
    ROS中关于时间的API
  • 原文地址:https://blog.csdn.net/weixin_41489908/article/details/133889385