| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1221 人关注过本帖
标题:一道指针的题,求学一下
只看楼主 加入收藏
林浩
Rank: 2
等 级:论坛游民
帖 子:47
专家分:23
注 册:2011-1-12
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:10 
一道指针的题,求学一下
输入一个数组a[5][5], 最中间的位置存最大数,其余四个角分别放从小到大的最小的四个数?
#include<stdio.h>

void main()
{
    void tz_(int (*p)[5], int n);

    int a[5][5], i, j;

    printf("please input the array:\n");
    for (i = 0; i < 5; i ++)
    {
        for (j = 0; j < 5; j ++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    tz_(a[0],5);                  ////这个地方始终被报错,真的搞不懂咯,怎么咯?

    printf("please input the new array:\n");

    for (i = 0; i < 5; i ++)
    {
        for (j = 0; j < 5; j ++)
        {
            printf("%4d", a[i][j]);
        }
        printf("\n");
    }
}
void tz_(int (*p)[5], int n)
{
    int i, j, t;
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < n; j ++)
        {
            if (p[2][2] < p[i][j])
            {
                t = p[i][j];
                p[i][j] = p[2][2];
                p[2][2] = t;
            }
        }

    }
    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < n; j++)
        {
            if (p[0][0] > p[i][j])
            {
                t = p[i][j];
                p[i][j] = p[0][0];
                p[0][0] = t;
            }
        }
    }

    for (i = 0 ;i < n; i ++)
    {
        for (j = 0; j < n; j ++)
        {
            if((p[0][4]>p[i][j]) && (i!=0&&j!=0))
            {
                t = p[i][j];
                p[i][j] = p[0][4];
                p[0][4] = t;
            }
        }
    }

    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
        {
            if ((p[4][0]>p[i][j]) &&(i!=0&&j!0) &&(i!=0&&j!=4))
            {
                t = p[i][j];
                p[i][j] = p[4][0];
                p[4][0] = t;
            }
        }
    }

    for (i = 0; i < n; i ++)
    {
        for (j = 0; j < n; j ++)
        {
            if ((p[4][4]>p[i][j]) &&(i!=0&&j!=0)&&(i!=0&&j!=4)&&(i!=4&&j!=0))
            {
                t = p[i][j];
                p[i][j] = p[4][4];
                p[4][4] = t;
            }
        }
    }


}
搜索更多相关主题的帖子: void include please 
2011-03-02 17:19
cacker
该用户已被删除
收藏
得分:1 
提示: 作者被禁止或删除 内容自动屏蔽
2011-03-02 17:38
wolonga123
Rank: 2
等 级:论坛游民
帖 子:25
专家分:35
注 册:2010-9-16
收藏
得分:1 
我也不是很清楚,你报错的那里,感觉 可以用a替换a[0]

[ 本帖最后由 wolonga123 于 2011-3-4 20:03 编辑 ]
2011-03-03 23:42
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:1 
if ((p[4][0]>p[i][j]) &&(i!=0&&j!=0) &&(i!=0&&j!=4))  //这里少了个=
你的问题应该是使用指向二维数组的指针出错,我也不太懂!

   唯实惟新 至诚致志
2011-03-04 09:27
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:1 
    void tz_(int (*p)[5], int n); //形参是指向数组的指针,实参也应该是指向数组的指针;

    tz_(a[0],5);                  //二维数组名称本质上就是指向数组的指针,不过数组名称是常量而已。
所以,应该这样调用:tz_(a, 5);
程序的其它部分我没有看,只说了你要问的。


当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-03-04 09:52
a151937404
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:117
注 册:2010-6-11
收藏
得分:1 
我错了,楼上说的对

[ 本帖最后由 a151937404 于 2011-3-4 10:03 编辑 ]
2011-03-04 09:55
admin3012
Rank: 1
来 自:陕西渭南
等 级:新手上路
帖 子:7
专家分:8
注 册:2011-3-3
收藏
得分:5 
倒数第二个大循环 里“if ((p[4][0]>p[i][j]) &&(i!=0&&j!0) &&(i!=0&&j!=4))”这句话是书写错误还是?j!0 ?应该是j!=0吧?
那个报异常没弄懂
2011-03-04 11:06
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
菜鸟也写了一个,请大家指点(还没有学到指针啥的)
程序代码:

#include <stdio.h>

int main (void) {

    int i,j,n;
    
    printf ("Enter a 2d-array 's row X column :\n");
    scanf ("%i",&n);

//输入检测,允许输入奇数X奇数的矩阵    
    if(n<5||n%2==0) {
        printf ("It is not a Square Matrix!\n");
        return 1;
    }
//生成二维数组matrix
    int matrix[n][n];

//程序所用函数原型声明
    void dispMatrix (int n,int matrix[n][n]);
    void sortMatrix (int n,int matrix[n][n]);
    void changeElement (int n,int matrix[n][n]);
    
//输入二维数组数据
    printf ("Begin input elements in 2d-array:\n");
    
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            scanf ("%i",&matrix[i][j]);
        }
    }

//调用函数
    sortMatrix(n,matrix);
    changeElement(n,matrix);
    dispMatrix(n,matrix);

//返回    
    return 0;

}
//显示矩阵子程序
void dispMatrix (int n,int matrix[n][n]) {

    int i,j;
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            printf ("%5i ",matrix[i][j]);
        }
        printf ("\n");
    }
}
//对矩阵进行排序等处理
void sortMatrix (int n,int matrix[n][n]) {

    int i,j,k=0,temp;
    int tmp[n*n];

//二维数组转一维数组
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            tmp[k]=matrix[i][j];
            k++;
        }
    }
    
//升序排列数组
    for(i=0;i<k-1;i++) {
        for(j=i+1;j<k;j++) {
            if(tmp[i]>tmp[j]) {
                temp=tmp[i];
                tmp[i]=tmp[j];
                tmp[j]=temp;
            }
        }
    }

//将最大值置于中心位置
    temp=tmp[k-1];
    tmp[k-1]=tmp[(k/2)];
    tmp[k/2]=temp;

//一维数组转二维数组
    k=0;
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
            matrix[i][j]=tmp[k];
            k++;
        }
    }
}        
//交换元素位置
void changeElement (int n,int matrix[n][n]) {
//矩阵四角位置分别为:
//matrix[0][0],matrix[0][m],matrix[m*m+m],matrix[m*m+2*m]
//第一元素不做置换
    int i,j,m,temp;
    m=n-1;
//
    temp=matrix[0][m];
    matrix[0][m]=matrix[0][1];
    matrix[0][1]=temp;
//
    temp=matrix[0][m*m+m];
    matrix[0][m*m+m]=matrix[0][2];
    matrix[0][2]=temp;
//
    temp=matrix[0][m*m+2*m];
    matrix[0][m*m+2*m]=matrix[0][3];
    matrix[0][3]=temp;
}

root@~ #./squarematrix
Enter a 2d-array 's row X column :
7
Begin input elements in 2d-array:
1
2
3
4
5
6
7
8
9 0 11 12 23 34 45 67 78 89 90 13 14 15 45 23 34 45 56 67 78 89 999
34 35 36 35 29 78 76 75 43 56 56 34 66 77 88
98
76
65
    0     6    78    36     4     5     1
    7     8     9    11    12    13    14
   15    23    23    29    34    34    34
   34    35    35   999    43    45    45
   45    56    56    56    65    66    67
   67    75    76    76    77    78    78
    2    88    89    89    90    98     3
root@~ #./squarematrix
Enter a 2d-array 's row X column :
5
Begin input elements in 2d-array:
1 2 3 4 5 6 7 8 9 0
12 34 10 19 18 67 46 56 34 23 30 39 45 999 10
    0     4    45    12     1
    5     6     7     8     9
   10    10   999    18    19
   23    30    34    34    39
    2    46    56    67     3
root@~ #

[ 本帖最后由 ansic 于 2011-3-4 18:29 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-04 18:21
林浩
Rank: 2
等 级:论坛游民
帖 子:47
专家分:23
注 册:2011-1-12
收藏
得分:0 
功夫不负有心人
   兄弟些我弄出来咯哈
2011-03-05 23:47
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用林浩在2011-3-5 23:47:25的发言:

   兄弟些我弄出来咯哈
觉得,你的代码写的有点长了,
中间的位置,其余四个角的坐标是可以直接看出来的,
两层循环就行了。

我就是真命天子,顺我者生,逆我者死!
2011-03-06 00:04
快速回复:一道指针的题,求学一下
数据加载中...
 
   



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

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