说明是编写一个使用二维数组的程序来查找大于其所有邻居的元素。
For example if my input is:
1 2 11
13 5 6
7 6 9
The output would be: 11, 13, 9
由于某种原因,它根本没有显示任何数字。有人可以帮助纠正代码。
以下是代码:
#include <stdio.h>
#include "genlib.h"
#include "simpio.h"
#define N 3
bool neighbourCheck(int array[N+2][N+2], int i, int j);
void getArray(int array[N+2][N+2]);
main()
{
int array[N+2][N+2], i, j;
printf("This program will ask you to enter nine integers of an aray.\n");
getArray(array);
for (i=1; i<N+1; i++)
{
for(j=1; j<N+1; j++)
{
if(neighbourCheck(array, i, j)==TRUE)
{
printf("%d\t", array[i][j]);
}
}
}
getchar();
}
void getArray(int array[N+2][N+2])
{
int i, j;
for(j=0;j<=N+1;j++)
{
i=0;
array[i][j]=-1;
i=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
j=0;
array[i][j]=-1;
j=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
for(j=1;j<4;j++)
{
printf("\nEnter a positive integer: ");
array[i][j]=GetInteger();
}
}
}
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
}
谢谢:D
答案 0 :(得分:1)
我不认为你在检查所有的邻居。
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
}
如果要检查(1,1),则必须将其与{(0,0),(0,1),(0,2),(1,0),(1,2)进行比较, (2,0),(2,1),(2,2)}。但我不会对你的循环进行检查。
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<=i+1; l++)
{
for(m=j-1; m<=j+1; m++)
{
// Returns false if any of the neighbour element is greater then & equal to current element.
if(array[l][m]>=array[i][j]) return(FALSE);
}
}
//You will reach end
return(TRUE);
}
以上代码将与其自身,对角线邻居进行比较但仍然是条件>这样可以避免混淆。
如果你只是想避免与对角线邻居进行比较,那么你可以使用direct if else语句。
工作正常...... 这是完整的代码。
#include <stdio.h>
#include<stdbool.h>
#define N 3
bool neighbourCheck(int array[N+2][N+2], int i, int j);
void getArray(int array[N+2][N+2]);
int main()
{
int array[N+2][N+2], i, j;
printf("This program will ask you to enter nine integers of an aray.\n");
getArray(array);
for (i=1; i<N+1; i++)
{
for(j=1; j<N+1; j++)
{
if(neighbourCheck(array, i, j))
printf("%d\t", array[i][j]);
}
}
getchar();
}
void getArray(int array[N+2][N+2])
{
int i, j;
for(j=0;j<=N+1;j++)
{
i=0;
array[i][j]=-1;
i=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
j=0;
array[i][j]=-1;
j=4;
array[i][j]=-1;
}
for(i=1;i<N+1;i++)
{
for(j=1;j<4;j++)
{
printf("\nEnter a positive integer: ");
scanf("%d",&array[i][j]);
}
}
}
bool neighbourCheck(int array[N+2][N+2], int i, int j)
{
int l, m;
for(l=i-1; l<=i+1; l++)
{
for(m=j-1; m<=j+1; m++)
{
// Returns false if any of the neighbour element is greater then and equal to current element.
if(array[l][m]>=array[i][j]) return false;
}
}
//You will reach end
return true;
}
答案 1 :(得分:1)
你必须改变部分
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
成:
for(l=i-1;l<=i+1;l++)
{
for(m=j-1;m<=j-1;m++)
干杯!
答案 2 :(得分:0)
在邻居检查功能中使用以下代码
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j-1; m++)
{
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
return(TRUE);
}
}
表示l
和m
的值包含i
和j
,此时测试成为
if(array[i][j]>=array[i][j])
始终为TRUE
,您将返回FALSE
另外,进一步看,return TRUE
似乎不在应有的位置。在测试所有可能的组合后,您应该只返回TRUE,而不仅仅是第一个。虽然这使您不打印任何数字令人惊讶。
在回应评论时,一种可能的方法是以下替代:
for(l=i-1; l<i+1; l++)
{
for(m=j-1; m<j+1; m++)
{
if (l == i && m == j)
continue;
if(array[l][m]>=array[i][j])
{
return(FALSE);
}
}
}
return(TRUE);
答案 3 :(得分:0)
表示(m = j-1; m 在上述语句中对于各种j值,条件总是为false,因此无法进入循环。