c语言问题菜鸟求助

#include<stdio.h>
void change(int*a)
{
int i,k,max,min,tem,t[3],g[3];
for(i=1;i<5;i++)
{
min=0;
if(i==1)
{
for(k=1,max=0;k<25;k++)
{
if(*(a+k)>=*(a+max))
max=k;
else if(*(a+k)<*(a+min))
min=k;
}
t[0]=*(a+min);
printf("%d\n",t[0]);
g[0]=min;
*(a+min)=*(a+max);
tem=*(a+12);
*(a+12)=*(a+max);
*(a+max)=tem;

}
else
{
for(k=1;k<25;k++)
if(*(a+k)<*(a+min))
min=k;
t[i-1]=*(a+min);printf("%d\n",t[i-1]);
g[i-1]=min;
*(a+min)=*(a+max);
}
}printf("%d%d%d%d\n",t[0],t[1],t[2],t[3]);
*(a+g[0])=*a;
printf("%d\n",t[0]);
*a=t[0];
*(a+g[1])=*(a+4);
*(a+4)=t[1];
*(a+g[1])=*(a+20);
*(a+20)=t[2];
*(a+g[2])=*(a+24);
*(a+24)=t[3];

}
int main()
{
int a[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},*p,*p1,i;
p=&a[0][0];
change(p);
for(i=1;i<26;i++)
{
printf("%3d",*(p+i-1));
if(i%5==0)
putchar('\n');
}

return 0;
}
为什么t[0]的值从一开始的1变为3 以至于a[0][0]本来应该等于1却变成了3

第1个回答  2014-03-01

我将代码复制后 结果与楼主完全不同

话说 楼主想做什么我完全没看懂……

是蛇形填数么?

如果上面的结果是楼主想要的 虽然没必要 但你可以在主过程加 memset ,把要用的数组什么的全都清零。如果还不好使可以单步跟踪。

追问

将一个5阶矩阵的最大元素放在中心 四个最小元素放在四角 你电脑上的运行结果基本符合条件只是不应该重复出现13 为什么会重复出现13呢 我觉得算法没问题阿 还有为什么同一个程序却有不同的运行结果呢

追答

不同的机器,对浮点数的处理是有所不同的。尤其是CPU类型不同的时候,涉及浮点运算的时候,出现这个问题很正常。你的机器位数不同,出现这个问题更是正常。除了与硬件本身有关以外,也可能与你的软件环境有关系。比如你的运算是否都是同样的类型数据之间的运算?有没有强制转换?有没有双精度与单精度混用的问题?有没有存在着隐含的数据类型的自动转换?操作系统版本是否相同?编译器是否同一版本?
楼主可以去下个最新的编译器看看,我一直用DEVc++
楼主可以把正解手打出来么?你这说的我根本不明白正解应该是怎么样的。

追问

这个程序的数据都是不大于25的整型 并且只涉及到加法和赋值运算不应该不一样啊 change函数中的printf语句不用管他那只是用来观察数据的赋值情况

相似回答
大家正在搜