C语言求数组最大值和最小值、总和、平均值、正序和逆序输出、方差和标准偏差、实现2个二维数组相加、二维数组交换行与列的元素

示例1:顺序和逆序依次输出数组中的元素

示例2:求数组的和和平均值

示例3:求数组的最大值和最小值

示例4:求方差和标准偏差

示例5:计算二维数组相加生成另外一个二维数组

示例6:交换数组的行与列

最后附上完整源码。

下面就是实现代码:

示例1:顺序和逆序依次输出数组中的元素

首先在main函数外部定义一个常量,代表数组长度;

//切记一定不能在结尾带分号,否则会报错
#define LEN 5

然后在main函数中声明一个数组,这三个示例使用同一个数组就行;

int array1[LEN] = {1,2,3,0,-1};

接下来使用for循环来实现顺序输出数组中的每一个元素:

printf("示例1:正序或者逆序依次输出数组中的元素\n");

    for(int i = 0; i < LEN; i++)
    {
        printf("正序,输出数组第%d个元素:%d\n",i,array1[i]);
    }

接下来使用for循环来实现逆序输出数组中的每一个元素:

printf("\n");

    for(int j = LEN; j >= 0; j--)
    {
        printf("逆序,输出数组第%d个元素:%d\n",j,array1[j]);
    }

自己运行后,查看一下效果吧,这里就不截图了。

示例2:求数组的和和平均值

声明两个变量,用来存放和/平均值;

int sum = 0;//和
float ave = 0.0;//平均值

使用for循环遍历数组:

printf("示例2:求数组的和以及平均值\n");

    for(int i = 0; i < LEN; i++)
    {
        sum += array1[i];
    }

    ave = (float)sum / LEN;

    printf("数组的和为:%d",sum);
    printf("数组的平均值为:%.2f",ave);

 自己运行后,查看一下效果吧,这里就不截图了。

示例3:求数组的最大值和最小值

声明两个变量表示最大值和最小值;

int max,min;//最大值和最小值

接下来就是最关键的一步,指定数组中第一个元素暂时为最大值和最小值,根据第一个元素就可以遍历整个数组,依次与这个值进行比较。

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);

自己运行后,查看一下效果。

示例4:求方差和标准偏差

声明一个函数,用来实现方差和标准偏差的计算。

float calculateSD(int arr[],float ave);

如果不知道方差公式的,可以自行百度https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE%E5%85%AC%E5%BC%8F/3638551

不想百度的,可以看下图: 

 下面就是函数实现:

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;
}

下面附上完整代码:

#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;
}

真实可运行,结果也是正确的。

 示例5:计算二维数组相加生成另外一个二维数组

首先声明两个变量表示行数和列数

int r = 2, c = 3;   /* r:行数,c:列数 */

然后声明三个数组,2个是已知数组,这两个二位数组用来相加,一个是用来保存结果的数组

int a[2][3] = {
   
   {1,2,3},{2,2,3}}, b[2][3] = {
   
   {1,2,3},{1,2,3}}, sum[2][3];

依次输出数组中的元素

    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j< c; ++j)
        {
            //依次输出各数组中的元素,
            printf("a[%d][%d]:%d\n",i,j,a[i][j]);
            printf("\n");
            printf("b[%d][%d]:%d\n",i,j,b[i][j]);
        }
    }

开始计算两个二维数组相加操作:

    printf("计算二维数组相加:\n");
    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
            sum[i][j] = a[i][j] + b[i][j]; /*  */
        }
    }

显示相加的结果:

// 显示结果
    printf("\n二维数组相加结果: \n\n");

    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
            printf("%d   ",sum[i][j]);

            //换行
            if(j == c - 1)
            {
                printf("\n\n");
            }
        }
    }

示例6:交换数组的行与列

声明一个数组,用来存放交换后的数组

int Reverse[3][2] ;

交换时,行变成列,列变成行:

//交换,列变成行,行变成列
    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
           Reverse[j][i]  = sum[i][j];
        }
    }

显示交换后的结果:

//结果,列数变成行数,行数变成列数
    for(int i = 0; i < c; ++i)
    {
        for(int j = 0; j < r; ++j)
        {
            printf("%d   ", Reverse[i][j]);

            //换行
            if(j == r - 1)
            {
                printf("\n\n");
            }
        }
    }

相加的结果:

交换的结果:

最后附上完整代码,亲测可运行,结果正确!

#include <stdio.h>

int main()
{
    printf("示例1:计算二维数组相加生成另外一个二维数组\n");
    int r = 2, c = 3;   /* r:行数,c:列数 */
    int a[2][3] = {
   
   {1,2,3},{2,2,3}}, b[2][3] = {
   
   {1,2,3},{1,2,3}}, sum[2][3];

    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j< c; ++j)
        {
            //依次输出各数组中的元素,
            printf("a[%d][%d]:%d\n",i,j,a[i][j]);
            printf("b[%d][%d]:%d\n",i,j,b[i][j]);
        }
    }

    printf("计算二维数组相加:\n");
    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
            sum[i][j] = a[i][j] + b[i][j]; /*  */
        }
    }

    // 显示结果
    printf("\n二维数组相加结果: \n\n");

    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
            printf("%d   ",sum[i][j]);

            //换行
            if(j == c - 1)
            {
                printf("\n\n");
            }
        }
    }

    printf("示例2:交换数组的行与列\n");

    int Reverse[3][2] ;

    //交换,列变成行,行变成列
    for(int i = 0; i < r; ++i)
    {
        for(int j = 0; j < c; ++j)
        {
           Reverse[j][i]  = sum[i][j];
        }
    }

    //结果,列数变成行数,行数变成列数
    for(int i = 0; i < c; ++i)
    {
        for(int j = 0; j < r; ++j)
        {
            printf("%d   ", Reverse[i][j]);

            //换行
            if(j == r - 1)
            {
                printf("\n\n");
            }
        }
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_49456900/article/details/125910226
今日推荐