C语言例程:求解二维数组的最大/最小元素


求解二维数组的最大/最小元素

实例说明

在 n 行 n 列的二维整数数组中,按以下要求选出两个数。首先从每行选出最大数,再从选出
的 n 个大数中选出最小数;其次,从每行选出最小数,再从选出的 n 个小数中选出最大数。

实例解析

设二维数组为 a[ ][ ],首先在 n 行 n 列二维整数数组中,从每行选出最大数,再从选出的 n
个大数中选出最小数,可以用以下算法实现:

[算法 1]在二维整数数组中,从每行选出最大数,再从选出的大数中选出最小数

{/*设最小元变量用 min 标记,各行的最大元变量用 max 标记*/ 
 for(min=a[0][0],row=0;row<n;row++)
  { 
 /*从每行选出最大数*/ 
 for(max=a[row][0],col=1;col<n;col++) /*从 row 行选出最大数*/ 
 if(max<a[row][col]) 
 max=a[row][col]; 
 if(min>max)/*保存至 row 行的最小数*/ 
 min=max; 
 } 
 printf("The minimum of maximum numbers is %d\n",min) ; 
}

从每行选出最小数,再从选出的 n 个小数中选出最大数,有如下的算法:

[算法 2]在二维整数数组中,从每行选出最小数,再从选出的小数中选出最大数

{/*设最大元变量用 max 标记,各行的最小元变量用 min 标记*/ 
 for(max=a[0][0],row=0;row<n;row++) 
 { 
 /*从每行选出最大数*/ 
 for(min=a[row][0],col=1;col<n;col++) /*从 row 行选出最小数*/ 
 if(min>a[row][col]) 
 min=a[row][col]; 
 if(max<min)/*保存至 row 行的最大数*/ 
 max=min; 
 } 
 printf("The maximum of minimum numbers is %d\n",max); 
}

程序代码

#include <stdio.h>
// system("cls");/* 清屏 */
void clrscr(){
    system("cls");/* 清屏 */
}
/* 计算二维数组的最大最小值*/
#define MAXN 20
int a[MAXN][MAXN];

int main()
{
    int min, /* 存储最小值 */
    max; /* 存储最大值 */
    int row,col,n;
    clrscr();
    printf("Please input the order of the matrix:\n");/* 输入方阵的阶次 */
    scanf("%d",&n);
    printf("Please input the elements of the matrix,\n from a[0][0] to a[%d][%d]:\n",n-1,n-1);
    for(row=0;row<n;row++)
        for(col=0;col<n;col++)
            scanf("%d",&a[row][col]);
    for(min=a[0][0],row=0;row<n;row++)
    {
        /* 从每行选出最大数 */
        for(max=a[row][0],col=1;col<n;col++)/*从 row 行选出最大数 */
            if(max<a[row][col])
                max=a[row][col];
        if(min>max)/* 保存至 row 行的最小数 */
            min=max;
    }
    printf("The minimum of maximum number is %d\n",min);
    for(max=a[0][0],row=0;row<n;row++)
    {
        /* 每行选出最小数 */
        for(min=a[row][0],col=1;col<n;col++)/* 从 row 行选出最小数 */
            if(min>a[row][col])
                min=a[row][col];
        if(max<min)/*保存至 row 行的最大数 */
            max=min;
    }
    printf("The maximum of minimum numbers is %d\n",max);
    printf("\nPress any key to quit...\n");
    getch();
    return 0;
}

程序运行截图

在这里插入图片描述

归纳注释

本例应用数组 primes[]来存储已经找到的前 n−1 个质数,再通过对第 n−1 个质数加 2,并测试
是否能被前 n−1 个质数整除来寻找第 n 个质数,从而可以求出前 n 个质数。这里 n 可以足够大(取
决于 int 型数据的取值范围,可以改为 long 型数组,以便求取更多的质数)。
本例子中求取前 n 个质数,n 用宏定义来实现,也可以通过用户的输入来进行。比如定义一
个最大的数以便定义数组“#define MAX 1000”,数组定义改为 int primes[MAX],n 则由用户输入。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斗士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值