控制 C 语言编写程序,实现对用户通过键盘输入的 10 个无序浮点数的从大到小输出

总体要求:控制 C 语言编写程序,实现对用户通过键盘输入的 10 个无序浮点数的从大到小输出具体要求: 1、使用动态内存分配存储键盘输入的浮点数 2、使用函数对输入的浮点数进行排序,函数参数使用指针变量 3、排序结果在主程序中输出显示
个人要求:最好能够重要代码写注释,希望能够让我看懂,因为还有答辩
软件:codeblocks

基于new bing的编写:

img

#include <stdio.h>
#include <stdlib.h>

// sort函数,利用指针变量对输入的浮点数进行排序,参数为待排序数组和数组长度
void sort(float *arr, int len) {
    int i, j;
    float tmp;
    for (i = 0; i < len - 1; i++) { // 冒泡排序
        for (j = 0; j < len - i - 1; j++) {
            if (*(arr + j) < *(arr + j + 1)) {
                tmp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = tmp;
            }
        }
    }
}

int main() {
    float *arr; // 定义指向浮点数的指针变量
    int len = 10; // 数组长度

    arr = (float*)malloc(len * sizeof(float)); // 动态内存分配

    printf("请输入10个无序浮点数:\n");
    for (int i = 0; i < len; i++) {
        scanf("%f", arr + i); // 通过指针变量接收键盘输入
    }

    sort(arr, len); // 调用排序函数

    printf("从大到小排序结果为:\n");
    for (int i = 0; i < len; i++) {
        printf("%.2f ", *(arr + i)); // 通过指针变量输出排序结果
    }

    free(arr); // 释放动态内存

    return 0;
}


详细介绍代码:

#include <stdio.h>
#include <stdlib.h>

这两行代码是包含所需的头文件。其中<stdio.h>包含了标准输入输出函数库,<stdlib.h>包含了内存分配和释放函数库。

void sort(float *arr, int len) {
    int i, j;
    float tmp;
    for (i = 0; i < len - 1; i++) { // 冒泡排序
        for (j = 0; j < len - i - 1; j++) {
            if (*(arr + j) < *(arr + j + 1)) {
                tmp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = tmp;
            }
        }
    }
}

这是定义了一个名为sort的函数,其形参为指向浮点数数组的指针变量arr和数组长度len。函数中通过冒泡排序算法实现了对输入数据的排序过程。具体实现时,使用指针变量来对数组元素进行访问和操作,实现了相邻元素比较和位置交换的操作,最终得到从大到小的排列形式。

int main() {
    float *arr; // 定义指向浮点数的指针变量
    int len = 10; // 数组长度

    arr = (float*)malloc(len * sizeof(float)); // 动态内存分配

    printf("请输入10个无序浮点数:\n");
    for (int i = 0; i < len; i++) {
        scanf("%f", arr + i); // 通过指针变量接收键盘输入
    }

    sort(arr, len); // 调用排序函数

    printf("从大到小排序结果为:\n");
    for (int i = 0; i < len; i++) {
        printf("%.2f ", *(arr + i)); // 通过指针变量输出排序结果
    }

    free(arr); // 释放动态内存

    return 0;
}

主函数中首先定义了一个指向浮点数的指针变量arr和数组长度len,并使用了动态内存分配函数malloc对arr进行分配。接着通过printf()函数输出提示信息,并调用scanf()函数实现用户输入10个浮点数的过程。随后,程序调用sort()函数对输入的浮点数进行排序,最终使用printf()函数输出排序结果。在输出排序结果时,也是通过指针变量来完成输出操作。最后,通过free()函数释放程序中分配的动态内存空间。整个程序采用了典型的分步设计思路,代码简介明了,可读性较强。

【答辩演示问题过程:】
老师:binjie09同学,请你向大家介绍一下你的程序。

binjie09:好的,我的程序是一个以C语言编写的排序程序,可以实现对用户通过键盘输入的10个无序浮点数的从大到小输出。程序中使用了动态内存分配存储输入的浮点数,并使用函数对输入的浮点数进行排序。

老师:你的程序所采用的排序算法是什么?

binjie09:我的程序使用了冒泡排序算法,这是一种简单但基本的排序算法,在每一轮中比较相邻两个元素的大小关系,并根据需要交换它们的位置,直到所有元素都有序为止。

老师:在程序中,动态内存分配是如何进行的?并且它的作用是什么?

binjie09:在程序中,我使用了malloc函数进行动态内存分配,分配了一个大小为10个浮点数的数组空间,这样可以避免在程序编译时就确定数组大小,更加灵活地使用内存空间。动态内存分配的作用是可以根据需要在运行时分配和释放内存,这样可以防止内存浪费和溢出的问题,提高程序的效率和健壮性。

老师:程序中的指针变量有什么作用?可以详细讲一下吗?

binjie09:指针变量在程序中起到了至关重要的作用,它可以用来保存和操作内存地址,实现对动态分配的内存空间的访问。在我的程序中,通过定义一个指向浮点数的指针变量arr,并使用malloc函数动态分配内存空间,接收用户通过键盘输入的10个无序浮点数。在排序时,我利用指针变量和偏移量实现对数组元素的访问和操作,在主程序中输出从大到小的排序结果。

老师:好的,非常感谢您的介绍和分享。

用malloc分配内存,scanf输入。冒泡排序

#include <stdio.h>
//冒泡排序,实现数组元素从大到小排序
void sort(float *a, int n)
{
    int i,j;
    float t; //临时数据交换变量
    for(i=0;i<n-1;i++)  //排序共进行n-1趟,每趟实现将最小值移动到数组尾部
    {
        for(j=0;j<n-i;j++)  
        {
            //当相邻元素不满足从大到小顺序时,进行数据交换
            if(a[j] < a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
}
int main()
{
    //动态分配10个浮点数空间
    float *a = (float*)malloc(10*sizeof(float));
    int i;
    for(i=0;i<10;i++)
        scanf("%f",a+i);
    sort(a,10);
    for(i=0;i<10;i++)
        printf("%f ",*(a+i));
    free(a);
}

可以试试这样 可采纳

#include <stdio.h>
#include <stdlib.h>

// 比较函数,用于 qsort 排序
int cmp(const void *a, const void *b) {
    const float *fa = (const float *)a;
    const float *fb = (const float *)b;
    if (*fa < *fb) return 1;
    if (*fa > *fb) return -1;
    return 0;
}

int main() {
    float *arr = (float *)malloc(sizeof(float) * 10); // 动态分配数组
    if (arr == NULL) {
        fprintf(stderr, "Out of memory\n");
        exit(1);
    }

    // 循环输入 10 个浮点数
    for (int i = 0; i < 10; i++) {
        printf("输入浮点数 %d: ", i);
        scanf("%f", &arr[i]);
    }

    // 使用 qsort 排序
    qsort(arr, 10, sizeof(float), cmp);

    // 输出排序结果
    printf("排序的浮点数(从大到小):\n");
    for (int i = 0; i < 10; i++) {
        printf("%f\n", arr[i]);
    }

    free(arr); // 释放动态分配的数组内存
    return 0;
}

使用 malloc 动态分配一个大小为 10 的浮点数数组,然后循环输入 10 个浮点数,使用 qsort 函数进行排序,最后输出从大到小排序的结果。
qsort 函数,这是一个函数库中提供的排序函数。它需要四个参数:需要排序的数据指针,数据个数,每个数据项的大小,以及比较函数。比较函数采用两个数据指针作为参数,并返回一个整数结果,表示第一个参数小于、等于还是大于第二个参数。

GPT:

以下是用C语言编写的程序,实现对用户通过键盘输入的10个无序浮点数进行排序,并按照从大到小的顺序输出结果。程序中包含注释,以解释代码的功能和操作。

#include <stdio.h>
#include <stdlib.h>

// 函数原型
void sortFloatArray(float *arr, int size);
void swapFloats(float *a, float *b);
void printFloatArray(float *arr, int size);

int main() {
    int size = 10;
    float *arr = (float *)malloc(size * sizeof(float)); // 动态分配存储浮点数的内存

    // 从键盘读取浮点数并存储到数组中
    printf("请输入10个浮点数:\n");
    for (int i = 0; i < size; i++) {
        scanf("%f", &arr[i]);
    }

    // 调用排序函数对浮点数数组进行排序
    sortFloatArray(arr, size);

    // 输出排序结果
    printf("从大到小排序的结果为:\n");
    printFloatArray(arr, size);

    free(arr); // 释放动态分配的内存

    return 0;
}

// 使用冒泡排序对浮点数数组进行排序
void sortFloatArray(float *arr, int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] < arr[j + 1]) {
                // 交换两个浮点数的位置
                swapFloats(&arr[j], &arr[j + 1]);
            }
        }
    }
}

// 交换两个浮点数的值
void swapFloats(float *a, float *b) {
    float temp = *a;
    *a = *b;
    *b = temp;
}

// 输出浮点数数组的内容
void printFloatArray(float *arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%.2f ", arr[i]);
    }
    printf("\n");
}

以上程序首先使用malloc函数动态分配了一个大小为10的浮点数数组的内存空间,然后通过scanf函数从键盘读取10个浮点数,并将其存储到数组中。接着调用sortFloatArray函数对数组进行排序,排序使用了冒泡排序算法。最后,使用printFloatArray函数将排序后的数组按照从大到小的顺序输出到屏幕上。最后,使用free函数释放动态分配的内存。

注意:在编译和运行此程序之前,请确保您的C编译器已正确安装和配置。


#include<stdio.h>

int main()

{

int i,j,a[10],t;

printf("输入数");

for (i = 0; i < 10; i++)

scanf("%d",&a[i]);

for (i = 0; i < 10; i++)

{

for (j = i + 1; j < 10;j++) 

if (a[i] < a[j]){

t = a[i];

a[i] = a[j];

a[j] = t;

}

}

printf("从大到小");

for (i = 0; i < 10; i++)

printf("%2d", a[i]);

return 0;

}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7801117
  • 这篇博客你也可以参考下:【C语言】我解决了输入中文判断中文的问题!一个简单的扑克牌管理查询系统(CodeBlocks)
  • 以下回答来自chatgpt:
    //首先定义头文件,这样就能使用malloc函数和qsort函数
    #include <stdio.h>
    #include <stdlib.h>
    
    //该函数用来比较两个浮点数的大小
    int cmp(const void *a,const void *b)
    {
        return (*(float*)a < *(float*)b) ? 1:-1;
    }
    
    int main()
    {
        int i;
        float *float_array; //定义浮点数数组的指针
        float_array = (float *)malloc(sizeof(float)*10); //申请10个浮点数大小的动态内存
        printf("Please input 10 float numbers:\n");
        for (i = 0; i < 10; i++)
        {
            scanf_s("%f", &float_array[i]);
        }
        qsort(float_array, 10, sizeof(float), cmp); //使用qsort函数排序
        printf("The sorted float numbers are:\n");
        for (i = 9; i >= 0; i--) //倒序输出
        printf("%.2f\n", float_array[i]);
        free(float_array); //释放动态内存
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^