怎么样利用c从2.0-10.0之间随机5个任意实数?

怎么样用c语言实现 随机五个介于2.0-10.0之间的实数(包含小数,且每次随机的数字不一样),然后把这五个数字赋值给五个变量 并用冒泡排序法排序



//编写一个可以执行下列任务的C语言程序。
// 1.创建5个在2.0和10.0之间的随机实数。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//冒泡排序
void sort(int arr[], int size)
{
    int j,i,temp;
    for (i = 0; i < size-1;i ++)
    {
        int count = 0;
        for (j = 0; j < size-1 - i; j++)//size-1-i是因为每一趟就会少一个数比较
        {
            if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                count = 1;
                
            }
        }
        if (count == 0)            //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
                break;    
    }
}
int main(){
    float nums[5];
    int i;  
    //1、生产5个2.0~10.0的随机数
    //rand()%8:表示生产0-7的随机数
    //rand()%10/10.00:表示生产0.0-0.9的随机数
    //rand()%10/100.00:表示生产0.00-0.09的随机数
    for(i=0;i<5;i++){
        nums[i]=rand()%8+2.0+rand()%10/10.00+rand()%10/100.00;
    } 
    sort(nums,5);
    //2、输出排序后随机数
    for(i=0;i<5;i++)
    {
        printf("%.2f ",nums[i]);
    }    
    return 0;
}

img

????可以用数组吗?还是必须单独的5个变量啊?
升序还是降序?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    float a[5],t,sum=0;
    int i,j;
    srand(time(NULL));
    for(i=0;i<5;i++)
    {
        a[i] = rand()%81/10.0+2;
        sum += a[i];
    }
    printf("平均值为:%.1f\n",sum/5);
    for(i=0;i<4;i++)
        for(j=0;j<4-i;j++)
        {
            if(a[j] > a[j+1])
            {
                 t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    for(i=0;i<5;i++)
        printf("%.1f ",a[i]);
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main()
{
    // 随机数种子
    srand((unsigned int)time(NULL));

    float a[5], buf;
    for (int i = 0; i < 5; i++)
    {
        //生成随机数取余0~799
        a[i] = (rand() % 800) / 100.0 + 2;
        printf("%.2f ", a[i]);
    }

    float sum = 0;
    for (int i = 0; i < 5; i++)
    {
        sum += a[i];
    }
    float avg = sum / 5;
    printf("\n平均值:%.2f", avg);


    for (int i = 0; i < 4; ++i) //比较n-1轮
    {
        for (int j = 0; j < 4 - i; ++j) //每轮比较n-1-i次,
        {
            if (a[j] < a[j + 1])
            {
                buf = a[j];
                a[j] = a[j + 1];
                a[j + 1] = buf;
            }
        }
    }
    printf("\n");
    for (int i = 0; i < 5; i++)
    {
        printf("%.2f ", a[i]);
    }

    return 0;
}

解答如下

img

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort(double arr[],int size)//冒泡排序
{
    for(int i=0; i<size-1; i++)
    {
        for(int j=0; j<size-1-i; j++)
        {
            if(arr[j]>arr[j+1])
            {
                double tem=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=tem;
            }
        }
    }
}
void prin(double arr[],int size)
{
    for(int i=0; i<size; i++)
    {
        printf("%.1lf ",arr[i]);
    }
    printf("\n");
}
int main()
{
    int n=5;
    double t[n];
    srand(time(NULL));
    for(int i=0;i<n;i++)
    {
        t[i]=rand()%80/10.0+2;
    }
    printf("排序前:\n");
    prin(t,n); 
    sort(t,n);
    printf("排序后:\n");
    prin(t,n);
    return 0;
}