C言語は、配列の最大値と最小値、和、平均値、正数と逆数の出力、分散と標準偏差を計算し、2つの2次元配列の加算を実現し、2次元配列の行と列の要素を交換します。次元配列

例 1: 配列内の要素を順次および逆順に出力する

例 2: 配列の合計と平均を求める

例 3: 配列の最大値と最小値を見つける

例 4: 分散と標準偏差を求める

例 5: 2 次元配列の加算を計算して別の 2 次元配列を生成する

例 6: 配列の行と列を入れ替える

最後に、完全なソース コードを添付します。

実装コードは次のとおりです。

例 1: 配列内の要素を順次および逆順に出力する

最初に、配列の長さを表す main 関数の外で定数を定義します。

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

次に、メイン関数で配列を宣言します。これら 3 つの例では同じ配列を使用しています。

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: 配列の合計と平均を求める

合計/平均を格納する 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: 配列の最大値と最小値を見つける

最大値と最小値を表す 2 つの変数を宣言します。

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

分散式がわからない場合は、Baidu https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE%E5%85%AC%E5%BC%8F/ 3638551

Baidu が不要な場合は、次の図を参照してください。 

 関数の実装は次のとおりです。

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: 2 次元配列の加算を計算して別の 2 次元配列を生成する

まず、行数と列数を表す 2 つの変数を宣言します。

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

次に、3 つの配列を宣言します。2 つは既知の配列で、これら 2 つの 2 桁の配列は加算に使用され、1 つは結果を保存するために使用される配列です。

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

2 つの 2 次元配列の加算演算の計算を開始します。

    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