当前位置:编程学习 > C/C++ >>

一道C语言改错题

二维数组的局部鞍点定义如下:对任意一个二维数组中的元素,若该元素的值比其上下2个相邻元素的值都小并且比其左右2个相邻元素的值都大,则称该元素是一个局部鞍点。位于矩阵拐角和边界的元素分别只有2个和3个相邻元素。 函数localmax的形参a指向输入数组,b指向输出数组。该函数的功能是找出输入数组中所有局部鞍点,若输入数组的某个元素是局部鞍点,则将输出数组的相同位置处的元素置1;否则置0 【含有错误的源程序】 #include <stdio.h> #define MIN –32768 #define MAX 32767 void localmax(int a[6],int b[6]) {int i,j,k,m; for(i=1;i<=4;i++) for(j=1;j<=4;j++) { b[i][j]=1; for(k=-1;k<=1;k++) for(m=-1;m<=1;m++) { if(k==-1||k==1 && m==-1||m==1) continue; if((k==0&&a[i][j]<a[i+m][j+k])||(m==0 &&a[i][j]>a[i+m][j+k])) b[i][j]=0; } } } main() { int b[][]; int i,j,a[6][6]={{0},{0,6,9,2,4},{0,3,6,8,5},{0,2,1,4,1},{0,6,2,9,4}}; for(j=0;j<6;j++) { a[0][j]=MAX; a[j][0]=MIN; a[5][j]=MAX; a[j][5]=MIN; } localmax(a,b); for(i=1;i<=4;i++) { for(j=1;j<=4;j++) printf("%8d",a[i][j]); printf("\n"); } for(i=1;i<=4;i++) { for(j=1;j<=4;j++) printf("%8d",b[i][j]); printf("\n"); } }
追问:额。。有四个错误。。我把localmax的函数定义改成了int a[][6],这应该算一个错误,其他的三个就找不出来了,输出数组成了16个0.。。
答案:#include <stdio.h>
#define MIN -32768       // 小写的 -
#define MAX 32767 
void localmax(int a[][6],int b[][6]) 
{
	int i,j,k,m;
	for(i=1;i<=4;i++)
		for(j=1;j<=4;j++)
		{
			b[i][j]=1;
			for(k=-1;k<=1;k++)
				for(m=-1;m<=1;m++)
				{
					if(m*k!=0 || m+k==0) continue;
					if((k==0&&a[i][j]>=a[i+m][j])||(m==0 &&a[i][j]<=a[i][j+k]))
						b[i][j]=0;
				}   
		}
}

main()
{
	int b[6][6];
	int i,j,a[6][6]={{0},{0,6,9,2,4},{0,3,6,8,5},{0,2,1,4,1},{0,6,2,9,4}};
	for(j=0;j<6;j++)
	{
		a[0][j]=MAX;
		a[j][0]=MIN;
		a[5][j]=MAX;
		a[j][5]=MIN; 
	}
	localmax(a,b);
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=4;j++) 
			printf("%8d",a[i][j]);    
		printf("\n");
	}
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=4;j++)
			printf("%8d",b[i][j]);  
		printf("\n"); 
	}
}
其他:我个人认为你应该把错误现象也要描述一下 fun(char*pstr[6]) 这是什么?char*pstr[6],这是一个指针数组,有六个5.及时总结自己的学习经验,养成写C语言日记的习惯。软件有编程日记功能。 6 1:int b[][]; //必须有完整的元素个数,不能这样写。
2:void localmax(int a[6],int b[6]) 修改为void localmax(int (*a)[6],int (*b)[6]);
3: #define MIN –32768 这里混杂汉字了,重新在英语下输入。 fun(char*pstr[6])  这是什么?char*pstr[6],这是一个指针数组,有六个元素,每个元素都是一个指针,指针的指向是待比较字符串的首地址。

p=*(pstr+i);这里边*(pstr+i)是数组里的第i个元素的内容,是一个指针,你能把一个指针给一个字符变量吗?
 

上一个:求一份湖南省二级C语言题库,谢谢…… 365534402@qq.com
下一个:C语言作业题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,