C语言中关于数组的问题

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在列上最小。也可能没有鞍点。
下面的程序如何错的。
#include<stdio.h>
int main()
{
int a[4][4],colum[4],row[4],i,j,k=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0,colum[i]=a[i][j];j<4;j++)
if(colum[i]<a[i][j])colum[i]=a[i][j];
for(i=0;i<4;i++)
for(j=0,row[i]=a[j][i];j<4;j++)
if(row[i]>a[j][i])row[i]=a[j][i];
for(i=0;i<4;i++)
if(colum[i]==row[i])
{
printf("%d",colum[i]);
k++;
}
if(k==0)printf("Not have digit");
printf("\n");
return 0;
}

你的思路很直接,求出了每行最大和每列最小,存入到对应数组当中。
这里有点小小的问题,column是指列,row是指行,但是对应的你弄相反了,这个不是主要问题。
主要问题在于,你没有保存下标。每行最大的那个数组下标,和每列最小的数组下标并不像你所理解的那样这好用对应判断所得到的。
for(i=0;i<4;i++)
if(colum[i]==row[i])//错误就在于此,并不是对应相等,要保存下标进行比较的
{
printf("%d",colum[i]);
k++;
}

#include<stdio.h>
int main()
{
int a[4][4],colum[4],row[4],i,j,k=0,temp,flg=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

for(i=0;i<4;i++)
{
for(j=0,colum[i]=a[i][j];j<4;j++) //行
if(colum[i]<a[i][j])
{
colum[i]=a[i][j];
temp = j; //这里保存每行最大对应的列的下标。
}
for(j=0,row[i]=a[i][temp];j<4;j++) //进而对这个位置上的列进行比较
{
if(row[i]>a[j][temp]) //如果这个数在该列不是最小,那么就跳出
{
row[i]=a[j][temp];
flg++;
//break;
}
}
if(!flg)
{
printf("a[%d][%d] = %d\n",i,temp,a[i][temp]);
k++;
}
}
if(k==0)printf("Not have digit");
printf("\n");
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-17
#include<stdio.h>
int main()
{
int a[4][4],colum[4],row[4],i,j,k=0;
int max, min;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++)
{
max = a[i][0];
for(j=1;j<4;j++)
{
if(max<a[i][j])
{
colum[i] = j;
}
}
}
for(i=0;i<4;i++)
{
min = a[i][colum[i]];
for(j=0;j<4;j++)
{
if(min>a[j][colum[i]])
{
break;
}
}
if (j == 4)
{
printf("%d",min);
k++;
}
}
if(k==0)
printf("Not have digit");
printf("\n");
return 0;
}

c语言关于定义二维数组的问题
在C语言中,二维数组可以视为一个表格或者矩阵。你可以通过指定数组的行数和列数来定义它。例如,定义一个有3行4列的二维数组可以写作:`int array[3][4];`。这表示数组名为`array`,包含3行和4列,总共可以存储12个整数。你也可以在定义时初始化数组的值,如:`int array[3][4] = {{1, ...

关于C语言中数组定义问题
(1)在堆栈段中分配内存,由于太大无法分配,所以错误。(2)在数据段中分配内存,数据段可以分配,无错误。(3)数组比(1)需要的内存少,在堆栈段大小范围内,可以分配,无错误 (4)同(3)

c语言关于定义二维数组的问题
理解二维数组的关键在于明确其结构:第一维代表数据的开始位置,第二维则指特定数据在组内的位置。例如,数组a[][4]意味着a是一个由4个元素构成的一维数组的集合,编译器会根据你给定的初始值数量自动计算第一维的长度,通常是元素总数除以4,若有余数,长度会加1,未赋值的部分会默认为0。然而,对...

c语言中输入数组的问题
}}printf(“%d\\n”,t); } 可以观察到,arr[0]并未存入字符,t的数值比预期少1 原因:这种情况通常发生在前面已经有了输入语句,而当前的scanf是在接收字符(即用%c控制输入)时。由于前面的输入语句(不一定是scanf)把最后输入的'\\n'遗留在了输入缓冲区,而当前的scanf(“%c”,......

关于c语言数组的一些疑惑?
在C语言中,array[10]有两种含义:①它指含有10个元素的数组array,如:int array[10];②它指数组array的第10号元素,如:array[10] =5;因此,对于使用数组array[10](这里,你要把array[10]理解成含有10个元素的数组array,而不能理解成第10号元素)做形参,只写array[]即可(只写一个空的中...

c语言数组问题
问一:c语言开辟数组,如果里面存的是整数,那么没有复制之前,数组中默认的值为零,还是乱码。答:C语言声明数组变量时,只分配相应的空间和地址,而不对里面存放的数据初始化。不管是int、float、还是char型等,即里面存的无论是整数、小数还是字符,再没有复赋值之前,数组中默认的值都是乱码,而不...

C语言数组问题
数组a[5],意思是数组名为:a,数组中一共有5个元素。每个元素是从下标0开始,依次为:a[0]、a[1]、a[2]、a[3]、a[4],记住如果你声明了数组,比如:int a[5],那么你就不能操作a[5]=5 或者a[6]=12等等之类的。因为数组一共有5个元素,那么它的下标最多到a[4]=xx。如果你写:...

C语言数组问题
一个变量2个字节,9个变量18个字节,18化为16进制是12,然后看图

c语言三维数组问题
三维数组的基本概念 在C语言中,数组是一种用于存储相同类型元素的数据结构。三维数组是数组的扩展,它具有三个维度或层次。这对于处理如图像、三维空间中的点或任何其他需要三层索引的数据非常有用。每个维度都有一个索引,这些索引允许我们访问数组的特定部分。如何声明和初始化三维数组 在声明三维数组时,...

c语言二维数组问题求解
c语言的数组在定义时的方括号里的数字就是数组的大小,比如 char ch[100],数组大小就是100,但是多数组进行操作时,是从0开始的,ch[0],就是第一个,ch[99]是第100个。这道题目 int x[2][3],表示一个2行3列的二维数组,所以c是正确的 ...

相似回答
大家正在搜