任务描述
题目描述:按如下函数原型编程从键盘输入一个m
行n
列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中m
和n
的值由用户键盘输入。已知m
和n
的值都不超过10
。
相关知识(略)
输入
输入数组大小:"%d,%d"
下面输入数组中元素。
输出
输出格式: 数组大小输入提示信息:"Input m, n:"
数组元素输入提示信息:"Input %d*%d array: "
输出格式:"max=%d, row=%d, col=%d"
样例输入
5,5
1 2 3 4 5
4 5 6 100 2
3 2 1 5 6
1 2 3 5 4
3 5 6 4 8
样例输出
Input m, n:Input 5*5 array:
max=100, row=2, col=4
1,首先是数组数据的录入,在c89中数组无法使用变量进行定义,可以先给一个大的区间,再用m,n进行有效值的输入范围;
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int m, n, i, j, arr[10][10];
scanf("%d,%d", &m, &n);
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= n - 1; j++)
scanf("%d", &arr[i][j]);
}
2.对二维数组进行比大小,每次比较记录下,最大值,行数,列数;二维数组比大小我们可以先把第一个位置的值给max,再用循环将不同位置的值与max比较,如果大于max就赋值给max,并且记录行数,列数组中是从0开始所以行数列数要加1;
int max = arr[0][0], row = 1, col = 1;
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
if (arr[i][j] >max)
max = arr[i][j ], row = i + 1, col = j + 1;
}
(不过要注意除了给max初值,还要给行数,列数初值1,因为若第一个位置就是最大值,那么if语句就不需要执行,而row和col也就不会赋值,也就是随机值,但我们知道是第一行第一列所以要进行赋值)
3.按格式输出结果;
以下是全部代码
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int m, n, i, j, arr[10][10];
scanf("%d,%d", &m, &n);
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= n - 1; j++)
scanf("%d", &arr[i][j]);
}
int max = arr[0][0], row = 1, col = 1;
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
if (arr[i][j] >max)
max = arr[i][j ], row = i + 1, col = j + 1;
}
}
printf("Input m, n:Input %d*%d array:\n",m,n);
printf("max=%d, row=%d, col=%d",max,row,col);
/*********End**********/
return 0;
}