| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 859 人关注过本帖
标题:[求助]好像是循环+括号+指针的问题(请纠错,谢谢)
只看楼主 加入收藏
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
 问题点数:0 回复次数:7 
[求助]好像是循环+括号+指针的问题(请纠错,谢谢)

将一个5×5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(按从

左到右、从上到下的顺序 ,依次从小到大存放),写一个函数实现之,并用main数调用。

怎么调试都不成功,只能换最大的和最小的,(我怀疑是不是循环的时候括号括错了),谁能告诉一下原因? 多谢各位了

#include<stdio.h>
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
void change(int *p)
{
int i,j,*pmin,*pmax;
pmax=pmin=p;
for(i=0;i<5;i++)

for(j=0;j<5;j++)
{
if(*pmax<*(p+5*i+j))

pmax=p+5*i+j;

if(*pmin>*(p+5*i+j))

pmin=p+5*i+j;


pmin=p+1;

if((p+5*i+j)!=p && *pmin>*(p+5*i+j))

pmin=p+5*i+j;


pmin=p+1;

if((p+5*i+j)!=p && (p+5*i+j)!=(p+4) && *pmin>*(p+5*i+j))

pmin=p+5*i+j;


pmin=p+1;

if((p+5*i+j)!=p && (p+5*i+j)!=(p+4) && (p+5*i+j)!=(p+20) && *pmin>*(p+5*i+j))

pmin=p+5*i+j;
}

swap(pmax,p+12);
swap(pmin,p);
swap(pmin,p+4);
swap(pmin,p+20);
swap(pmin,p+24);
}
int main()
{
int i,j,*p,a[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};

for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}
p=&a[0][0];
change(p);
printf("after changing:\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%d",a[i][j]);
printf("\n");
}
return(0);
}
怎么调试都不成功,只能换最大的和最小的,(我怀疑是不是循环的时候括号括错了),谁能告诉一下原因? 多谢各位了

[此贴子已经被作者于2006-9-4 12:11:05编辑过]

搜索更多相关主题的帖子: 括号 指针 纠错 
2006-09-04 00:08
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

#include<stdio.h>
#define N 5

void zhuanhuan(int *a)
{
int *min,*max;
int i,j,t;
max=a;
min=a;

for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
{
if(*min>*(a+N*i+j))
{
min=(a+N*i+j);
}
if(*max<*(a+N*i+j))
{
max=(a+N*i+j);
}
}
}
t=*(a+N/2*N+N/2);
*(a+N/2*N+N/2)=*max;
*max=t;
t=*a;
*a=*min;
*min=t;


min=a+1;//第二个
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if((a+N*i+j)!=a&&*min>*(a+N*i+j))
{
min=(a+N*i+j);
}
}
}
t=*(a+N-1);
*(a+N-1)=*min;
*min=t;

min=a+1;//第三个
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if((a+N*i+j)!=a&&(a+N*i+j)!=a+N-1&&*min>*(a+N*i+j))
{
min=(a+N*i+j);
}
}
}
t=*(a+N*(N-1));
*(a+N*(N-1))=*min;
*min=t;

min=a+1;//第四个
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if((a+N*i+j)!=a&&(a+N*i+j)!=a+N-1&&(a+N*i+j)!=a+N*(N-1)&&*min>*(a+N*i+j))
{
min=(a+N*i+j);
}
}
}
t=*(a+N*N-1);
*(a+N*N-1)=*min;
*min=t;
}

int main()
{
int data[N][N];
int i,j,*p;
p=&data[0][0];
printf("输入%d行%d列的数组\n",N,N);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&data[i][j]);
}
}
zhuanhuan(p);
printf("转换后的数组是\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%-3d",data[i][j]);
}
printf("\n");
}
return(0);
}


倚天照海花无数,流水高山心自知。
2006-09-04 09:07
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 

我就是不想多次的用for和一次一次的转换,才把他们写在一个for里,把转换编了一个函数,

能指出一下我的错误吗?


只剩一年了………… 够了!
2006-09-04 12:09
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
2楼给您的答案是对的,在您的程序中,只用一个for和一个pmin指针是完成不了的,因为在for循环里面的具体实现里,pmin的指向不断被改变,一会儿您要用它去查找最小的数,一会儿又让它去查找第二小的数,在查找的过程中,后来的指向不断覆盖掉前面的指向。所以这是错误的.
您可以考虑用多个指针,或者如2楼所说,改成多个for,先得到第一个pmin的正确指向后,进行交换,再查找下一个最小的数.

对不礼貌的女生收钱......
2006-09-04 15:50
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 

版主果然讲得明白,呵呵,不要您呀,您的,我可担待不起呀,

还得麻烦一下告诉我,用多个指针应该怎么写,因为最近主要在学指针,

我就多定义了几个*pmin1,*pmin2,*pmin3,用它们分别代替题中的*pmin,可是运行结果是一样的,不知道又是哪错了,

请指教,


只剩一年了………… 够了!
2006-09-04 18:49
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
哪一位给讲一讲呗,呵呵

只剩一年了………… 够了!
2006-09-05 13:04
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
举个例子,你要从一蓝苹果中取出最小的4个,先拿出一个,放在pointer[0]位置,再拿一个,如果比pointer[0]位置的苹果还小,则把原来的苹果替换,把原来的苹果放在pointer[1]位置,再拿一个,如果比pointer[0]还小,仍替换,pointer[0],pointer[1]位置的苹果都依次后移,如果比pointer[0]位置的苹果大,而比pointer[1]位置的苹果小,则把pointer[1]以后的后移,腾出pointer[1]的位置给这个苹果,依次继续下去。
你这个想法要比2楼给你的想法考虑的情况多了些,可读性也要比2楼的要差许多。

对不礼貌的女生收钱......
2006-09-05 16:22
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
噢,原来这么复杂呀,我只是刚学指针,想多用用,呵呵,多谢了

只剩一年了………… 够了!
2006-09-05 19:26
快速回复:[求助]好像是循环+括号+指针的问题(请纠错,谢谢)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022035 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved