关于c语言的实践活动

2.
以你的学号作为一个数字模43,如果结果小于10,则增加10,得到的结果作为一个in型数组
的大小。例如,张三的学号是1234,1254%43=7,则数组大小应为size=17。
使用动态内存管理的方法为数组开辟存储空间。并且使用你的学号作为随机种子初始化sand函
数,得到一个值属于5,5引之间的随机数组。
设计一个程序;计算数组元素的总和,平均值,方差,最大值,最小值,并且对数组进行从小到
大的排序(要求将排序函数单独封装,其他功能写在main中)。

OK

你学号多少啊????

#include <time.h>

#include <stdlib.h>

#include <stdio.h>
//得到一个值属于5,5引之间的随机数组。---这句话没看懂啊

void sort(int *a,int n)
{
    int i,j,t;
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
        {
            if(a[j] > a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
}

int main()
{
    int i,sum=0,max=0,min=0;
    int n = STU_ID%43;
    double avg = 0,fc=0;
    if(n<10)
        n+=10;
    srand(STU_ID);
    int *arr = (int*)malloc(sizeof(int)*n);
    for(i=0;i<n;i++)
    {
        arr[i] = rand()%55;
        sum += arr[i];
        if(i==0 || arr[i] > max)
            max = arr[i];
        if(i==0 || arr[i] < min)
            min = arr[i];
    }
    sort(arr,n);
    avg = sum*1.0/n;
    for(i=0;i<n;i++)
        fc += (arr[i]-avg)*(arr[i]-avg);
    fc/=n;
    printf("总和=%d,平均值=%.1f,方差=%.1f,最大值=%d,最小值=%d\n",sum,avg,fc,max,min);
    printf("排序后数组为:\n");
    for(i=0;i<n;i++)
        printf("%d ",arr[i]);
    return 0;
}


#include <stdio.h>
/* 需要用到数学公式,所以添加头文件 */
#include <math.h>
 
//定义常量,数组长度
#define LEN 5
 
//计算方差
float calculateSD(int arr[],float ave);
 
int main()
{
    int array1[LEN] = {1,2,3,0,-1};
    int sum = 0;//和
    float ave = 0.0;//平均值
    int max,min;//最大值和最小值
 
    printf("示例1:正序或者逆序依次输出数组中的元素\n");
 
    for(int i = 0; i < LEN; i++)
    {
        printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
    }
 
    printf("\n");
 
    for(int j = LEN; j >= 0; j--)
    {
        printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
    }
 
    printf("***********************************************\n");
    printf("示例2:求数组的和以及平均值\n");
 
    for(int i = 0; i < LEN; i++)
    {
        sum += array1[i];
    }
 
    ave = (float)sum / LEN;
 
    printf("数组的和为:%d",sum);
    printf("数组的平均值为:%.2f",ave);
 
    printf("***********************************************\n");
    printf("示例3:求数组的最大值和最小值\n");
 
    max = array1[0];//默认数组的最大值和最小值均为数组的第一个元素
    min = array1[0];
 
    for(int i = 0; i < LEN; i++)
    {
        if( max < array1[i])
        {
            max = array1[i];
        }
 
        if(min > array1[i])
        {
            min = array1[i];
        }
    }
 
    printf("数组的最大值为:%d,数组的最小值为:%d",max,min);
 
    printf("示例4:数学中的方差计算\n");
 
    calculateSD(arr,ave);
 
    return 0;
}
 
//函数实现
float calculateSD(int arr[],float ave)
{
    printf("%.f\n",ave);                /* 输出平均值 */
    float s = 0.0;                      /* 方差 */
    float total = 0.0;                  /* 平方和 */
    float SD = 0.0;                     /* 标准偏差 */
 
    for(int i = 0;i < LEN; i++)
    {
        total += pow(arr[i] - ave,2);
        printf("%d\n",arr[i]);          /* 输出每一项 */
    }
 
    s = (float) total / LEN;            /* 方差 */
    printf("方差为:%.2f\n",s);
 
    SD = (float)sqrt(s);                /* 标准偏差 */
    printf("标准偏差为:%.2f\n",SD);
 
    return s;
}