| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 537 人关注过本帖
标题:[求助]关于指针的题目
只看楼主 加入收藏
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
 问题点数:0 回复次数:8 
[求助]关于指针的题目
将一个5 *5的距阵中的最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下顺序依次从小到大存放,写一个函数实现之,用main函数调用。写了好久,结果不对,望大家给点意见
#include <stdio.h>
void main()
{
void change(int *p);
int a[5][5],i,j,*p1;
printf("please input 25 number:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",a[i][j]);
p1=&a[0][0];
change(p1);
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%d\t",a[i][j]);
printf("\n");}
}
void change(int *p)
{
int *max,*min,i,*b;
b=p;
max=b;min=b;
for(i=0;i<25;i++,b++)
{if(*max<*b) max=b;
if(*min>*b) min=b;
}
i=*(p+12);*(p+12)=*max;*max=i;
i=*p;*p=*min;*min=i;
b=p;
min=p+1;
for(i=0;i<25;i++,b++)
if(*b>*p&&*b<*min) min=b;
i=*(p+4);*(p+4)=*min;*min=i;
b=p;
min=p+2;
for(i=0;i<25;i++,b++)
if(*b>*(p+4)&&*b<*min) min=b;
i=*(p+20);*(p+20)=*min;*min=i;
b=p;
min=p+3;
for(i=0;i<25;i++,b++)
if(*b>*(p+20)&&*b<*min) min=b;
i=*(p+24);*(p+24)=*min;*min=i;
}
搜索更多相关主题的帖子: 指针 
2007-01-02 16:20
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 
等了好久没人帮助一下小菜吗
2007-01-02 16:54
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
先把25个数字排序 然后依次放入2维数组中
然后交换
最后一个元素 和矩阵中心的交换即a[2][2] <=> a[4][4]
然后a[0][1]和a[0][4]交换
a[0][2]和a[4][0]交换
a[0][3]和a[4][4]交换

unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-01-02 17:03
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
3楼的思路不错。

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-02 17:12
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 

谢谢。这中方法我也想过,但是我想只用一个2维数组,先把最大的和最小的找出来,分别放在max,min里面,然后max和a[2][2]交换 min和a[0][0]交换,然后把第2小的放在min里再和a[0][4]交换,再把第3小的和a[4][0]交换,最后把第4小的和a[4][4]交换。有谁知道我的程序错在哪里呢?

2007-01-02 17:17
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
你这个程序没有错,
我运行后可以得到结果,
不知道你的测试数据是什么:?

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-02 17:19
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
#include <stdio.h>
void main()
{
void change(int *p);
int a[5][5],i,j,*p1;
printf("please input 25 number:\n");
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d", &a[i][j]); /****/
p1=&a[0][0];
change(p1);
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf("%d\t",a[i][j]);
printf("\n");}
}
void change(int *p)
{
int *max,*min,i,*b;
b=p;
max=b;min=b;
for(i=0;i<25;i++,b++)
{if(*max<*b) max=b;
if(*min>*b) min=b;
}
i=*(p+12);*(p+12)=*max;*max=i;
i=*p;*p=*min;*min=i;
b=p;
min=p+1;
for(i=0;i<25;i++,b++)
if(*b>*p&&*b<*min) min=b;
i=*(p+4);*(p+4)=*min;*min=i;
b=p;
min=p+2;
for(i=0;i<25;i++,b++)
if(*b>*(p+4)&&*b<*min) min=b;
i=*(p+20);*(p+20)=*min;*min=i;
b=p;
min=p+3;
for(i=0;i<25;i++,b++)
if(*b>*(p+20)&&*b<*min) min=b;
i=*(p+24);*(p+24)=*min;*min=i;
}

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-01-02 17:22
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 
我们的方法都是一样的 就是交换时要注意

其实排好序后放入数组 第一行的前4个元素就是最小的三个 数组的最后一个元素就是最大的 没有必要设max和min的 直接设一个temp临时变量就可以的

你的题还算简单 如果是不知道维数的 就得用循环嵌套了 而且这个题也没说 出去四角和中心元素 剩下的元素必须是从小到大排列的


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-01-02 17:23
企鹅
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-7-14
收藏
得分:0 
7楼的大哥谢谢啊。哭死,居然少打了一个符号花了那么多的时间。
2007-01-02 17:41
快速回复:[求助]关于指针的题目
数据加载中...
 
   



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

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