如何使用C查找二维数组特定行中大元素和小元素之间的差异

How to find difference between large and small element in a specific row of an 2D array using C

写一个C程序,可以显示四个城市最近五天的温度,并显示每个城市最高和最低温度的差异

示例输入

20 27 28 22
12 22 12 20
22 24 25 33
33 30 30 29

示例输出

8
8
11
4

我一直在使用 C 查找二维数组特定行中大元素和小元素之间的区别。我能够找到大元素和小元素,但我在搜索特定行之间有点迷茫找出大元素和小元素之间的区别。下面我展示了我的一段代码 -

#include<stdio.h>

int main()
{
    int array1[10][10];
    int num, row, column;

    printf("How many rows and columns are needed: ");
    scanf("%d %d", &row, &column);

    printf("\nHow many cities temperature you want to enter: ");
    scanf("%d", &num);

    printf("\nEnter %d cities temperature: ", num);

    for(int i=0; i<row; i++)
    {
        for(int j=0; j<column; j++)
        {
            scanf("%d", &array1[i][j]);
        }
        printf("\n");
    }

    int largeA = array1[0][0];
    int smallA = array1[0][0];
    int diff = 0;

    for(int i=0; i<row; i++)
    {
        int diff = 0;
        for(int j=1; j<column; j++)
        {
            if(array1[i][j] > largeA)
            {
                largeA = array1[i][j];
            }
            if(array1[i][j] < smallA)
            {
                smallA = array1[i][j];
            }
        }
        diff = largeA - smallA;
        printf("%d\n", diff);
    }

    return 0;
}

for(i)循环中每次设置最小值和最大值

使用 unsigned 数学来避免 int 溢出。

// Not needed
// int largeA = array1[0][0];
// int smallA = array1[0][0];
// int diff = 0;

for(int i=0; i<row; i++)
{
    //int diff = 0;
    int largeA = array1[i][0]; // add
    int smallA = array1[i][0]; // add
    for(int j=1; j<column; j++)
    {
        if(array1[i][j] > largeA)
        {
            largeA = array1[i][j];
        }
        if(array1[i][j] < smallA)
        {
            smallA = array1[i][j];
        }
    }
    // diff = largeA - smallA;
    unsigned diff = 0u + largeA - smallA;
    // printf("%d\n", diff);
    printf("%u\n", diff);
}
  1. 使用函数。它使代码更具可读性,不要在 main
  2. 中编程
  3. 使用正确的索引类型(size_t)
  4. 在您测试您的代码时避免用户输入会容易得多。它将为您节省大量输入 table 值的时间。
#include <stdio.h>

int getDiff(const size_t cols, const int *arr)
{
    int max = 0, min = 0;
    if(arr)
    {
        max = arr[0]; min = arr[0];
        for(size_t col = 1; col < cols; col++)
        {
            if(min > arr[col]) min = arr[col];
            else if(max < arr[col]) max = arr[col];
        }
    }
    return max - min;
}

int main(void)
{
    int temps[][4] =  {
        {20, 27, 28, 22,},
        {12, 22, 12, 20,},
        {22, 24, 25, 33,},
        {33, 30, 30, 29,},
    };

    for(size_t row = 0; row < 4; row++)
    {
        printf("Diff row %zu = %d\n", row, getDiff(4, temps[row]));
    }
}