C语言 输入一个3×6的二维整型数组,输出其中最大值、最小值以及它们所在行和列的下标(用指针完成)

#include<stdio.h>
main()
{
int a[3][6],b,c,d,x,d1=0,d2=0,x1=0,x2=0,*p;
printf("输入一个3×6的二维整型数组\n");
d=a;
x=a;
p=a;
for(b=0;b<3;b++)
for(c=0;c<6;c++)
{
scanf("%d",&a[b][c]);
if(d<a[b][c]) { d=a[b][c];d1=b;d2=c;}
if(x>a[b][c]) { x=a[b][c];x1=b;x2=c;}
p++;
}

printf("最大值:%d,行下标:%d,列下标:%d\n最小值:%d,行下标:%d,列下标%d\n",d,d1,d2,x,x1,x2);
}
d=a;变成 d=a[0][0];又可以了,为什么呢
为什么x 正确呢

你的程序有问题。
第一,如果你一开始想将a[0][0]的值赋值给d和x,必须写成d=a[0][0],和x=[0][0]。
第二,就算你第一步正确,结果也可能不正确。因为你这个时候的a[0][0]是什么都不知道,这样赋值产生的后果不确定。
一般情况求最大值和最小值,你可以把保存最小值的变量,比如说你的x初始化为一个极大数,而把你的保存最大值得d,初始化为一个极小数。这里的极大极小数你可以自己假定,认为你的数组的数在它们之间就行了。
这样就能保证结果正确。
还有问题请百度hi追问

为什么x 正确呢

追答

x也不正确,你一开始赋给了x一个非法值,但是在计算机中x仍然会有一个有效值,然后碰巧这个值恰好又比你输入的第一个值大,所以x马上就变成了你的第一个值,接着运行正常。
逻辑上仍然是错误的。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-27
额。。你的程序错误很多呀
1.“d=a;x=a;” 有什么含义这应该是错误的语句,应该去掉。
2. 你的指针变量没用,p完全没作用,如果要求使用指针的话,那就用 p[b][c] 代替 for 循环中的a[b][c], 去掉p++; 或者 用 p 代替 a[b][c],不去掉p++.
3.你在 scanf语句后 加上语句 if(b==0&&c==0) d=x=a[0][0]; 就可以改正你的错误了
相似回答