C语言实现计算二维数组每列最大值与最小值的差值(C语言基础例题5例-二维数组篇)

1-3题

C语言基础例题1-3题-指针篇

前言

本篇文章的题目为C的基础练习题,二维数组部分。做这些习题之前,你需要确保已经学习了二维数组的知识。

题目

题目4

编写一个程序,定义一个二维整型数组,大小为3行4列。从键盘输入12个整数,将它们存储到数组中。

编写一个函数,接受一个二维数组和数组的行数作为参数,计算并返回数组中所有元素的和。

在主函数中调用该函数,计算并打印数组中所有元素的和。
在这里插入图片描述

测试用例

运行这个程序时,可以输入以下测试数据进行验证:

输入:
1 2 3 4 5 6 7 8 9 10 11 12
输出:
二维数组所有元素的和为: 78

题目5

编写一个程序,定义一个二维整型数组,大小为4行5列。从键盘输入20个整数,将它们存储到数组中。

编写一个函数,接受一个二维数组和数组的行数作为参数,计算并返回数组中每一列元素的最大值和最小值的差值。

扫描二维码关注公众号,回复: 17156964 查看本文章

在主函数中调用该函数,计算并打印每一列元素的最大值和最小值的差值。

在这里插入图片描述

测试用例

运行这个程序时,可以输入以下测试数据进行验证:

输入:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
输出:
第1列元素的最大值和最小值的差值为: 15
第2列元素的最大值和最小值的差值为: 15
第3列元素的最大值和最小值的差值为: 15
第4列元素的最大值和最小值的差值为: 15
第5列元素的最大值和最小值的差值为: 15

输入:
-1 -2 -3 -4 -5
-6 -7 -8 -9 -10
-11 -12 -13 -14 -15
-16 -17 -18 -19 -20
输出:
第1列元素的最大值和最小值的差值为: 15
第2列元素的最大值和最小值的差值为: 15
第3列元素的最大值和最小值的差值为: 15
第4列元素的最大值和最小值的差值为: 15
第5列元素的最大值和最小值的差值为: 15

输入:
9 5 7 2 1
6 8 3 4 10
11 15 12 13 14
16 18 17 20 19
输出:
第1列元素的最大值和最小值的差值为: 10
第2列元素的最大值和最小值的差值为: 13
第3列元素的最大值和最小值的差值为: 14
第4列元素的最大值和最小值的差值为: 18
第5列元素的最大值和最小值的差值为: 18

参考答案

题目4

#include<stdio.h>
#define ROW 3
#define COLUMN 4
int calculateSum(int arr[][COLUMN],int row);
int main(void)
{
    
    
    int arr[ROW][COLUMN];
    for(int i=0;i<ROW;i++)
    {
    
    
        for(int j=0;j<COLUMN;j++)
        {
    
    
            scanf("%d",&arr[i][j]);
        }
    }
    printf("二维数组所有元素的和为: %d\n",calculateSum(arr,ROW));

    getchar();
    getchar();
    return 0;
}
int calculateSum(int arr[][COLUMN],int row)
{
    
    
    int sum=0;
    for(int i=0;i<row;i++)
    {
    
    
        for(int j=0;j<COLUMN;j++)
        {
    
    
            sum+=arr[i][j];
        }
    }
    return sum;
}

解析

首先,定义了一个常量ROW表示二维数组的行数,定义了一个常量COLUMN表示二维数组的列数。接下来,在main函数中,通过嵌套的for循环逐个读取用户输入的二维数组的元素,并将其存入arr数组中。然后,调用calculateSum函数计算二维数组所有元素的和,并将结果打印出来。

在calculateSum函数中,首先定义一个局部变量sum用于保存计算结果。然后,通过嵌套的for循环遍历二维数组的每个元素,并将其累加到sum中。最后,返回计算结果sum。

题目5

答案1

#include<stdio.h>
#include<stdlib.h>
#define ROW 4
#define COLUMN 5
int* calculateColumnDiff(int arr[][COLUMN],int row);
int main(void)
{
    
    
    int arr[ROW][COLUMN];
    int *difference;
    for(int i=0;i<ROW;i++)
    {
    
    
        for(int j=0;j<COLUMN;j++)
        {
    
    
            scanf("%d",&arr[i][j]);
        }
    }
    difference=calculateColumnDiff(arr,ROW);
    for(int i=0;i<COLUMN;i++)
    {
    
    
        printf("第%d列元素的最大值和最小值的差值为: %d\n",i+1,difference[i]);
    }

    getchar();
    getchar();
    return 0;
}
int* calculateColumnDiff(int arr[][COLUMN],int row)
{
    
    
    int max,min;
    int *difference=(int*)malloc(COLUMN*sizeof(int));
    for(int c=0;c<COLUMN;c++)
    {
    
    
        max=min=arr[0][c];
        for(int r=1;r<row;r++)
        {
    
    
            if(arr[r][c]>max)
                max=arr[r][c];
            else if(arr[r][c]<min)
                min=arr[r][c];
        }
        difference[c]=max-min;
    }
    return difference;
}
解析

首先,定义了一个常量ROW表示二维数组的行数,定义了一个常量COLUMN表示二维数组的列数。

在main函数中,声明了一个指向整型的指针difference,用于保存每列最大值和最小值之差的结果。然后,通过嵌套的for循环逐个读取用户输入的二维数组的元素,并将其存入arr数组中。接下来,调用calculateColumnDiff函数来计算每列的差值,并将返回的结果赋值给difference。

在calculateColumnDiff函数中,首先定义了局部变量max和min分别表示当前列的最大值和最小值。然后,通过动态内存分配使用malloc函数来分配一个一维数组,其大小为COLUMN*sizeof(int),并将其地址赋给指针difference。接着,使用两层的for循环遍历每一列的元素,更新max和min的值。最后,计算差值max-min,并将结果保存在difference数组的对应位置上。

最后,在主函数中,使用for循环打印出每列的差值结果。

答案2

#include <stdio.h>

int calculateColumnDiff(int arr[][5], int rows)
{
    
    
    int diffArr[5];

    for (int j = 0; j < 5; j++)
    {
    
    
        int max = arr[0][j];
        int min = arr[0][j];

        for (int i = 1; i < rows; i++)
        {
    
    
            if (arr[i][j] > max)
            {
    
    
                max = arr[i][j];
            }

            if (arr[i][j] < min)
            {
    
    
                min = arr[i][j];
            }
        }

        diffArr[j] = max - min;
    }

    for (int i = 0; i < 5; i++)
    {
    
    
        printf("第%d列元素的最大值和最小值的差值为: %d\n", i + 1, diffArr[i]);
    }
}

int main()
{
    
    
    int arr[4][5];

    printf("请输入20个整数:\n");
    for (int i = 0; i < 4; i++)
    {
    
    
        for (int j = 0; j < 5; j++)
        {
    
    
            scanf("%d", &arr[i][j]);
        }
    }

    calculateColumnDiff(arr, 4);
    getchar();
    getchar();
    return 0;
}
解析

主要思路是使用两个嵌套的循环来遍历数组,并在每一列中查找最大值和最小值,然后计算差值,并将结果存储在一个一维数组diffArr中。

在主函数中,先定义了一个二维数组arr来存储用户输入的整数,并通过两个嵌套的for循环来读取用户输入的整数。然后调用calculateColumnDiff函数来计算每列的差值。

在calculateColumnDiff函数中,首先定义了一个一维数组diffArr,用于存储每列的差值。然后,在每一列中初始化max和min的值为当前列的第一个元素。通过两个嵌套的循环遍历二维数组的每个元素,更新max和min的值。最后,将每列的差值max-min存储在diffArr数组对应位置上,并通过一个循环打印出每列的差值结果。

两个答案对比,第一个答案更符合题意要求,但考虑到有些读者此时并没有学习动态内存分配,所以第二种答案也是可以的。

猜你喜欢

转载自blog.csdn.net/weixin_44499065/article/details/134006351
今日推荐