| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 464 人关注过本帖
标题:矩阵和指针
只看楼主 加入收藏
本帖由 静夜思 于 2019-1-15 13:35 反删除
丨丨
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2018-10-15
结帖率:90.48%
  已结贴   问题点数:20  回复次数:18   
矩阵和指针
用函数找出矩阵中最大的数和这个数的行、列


#include<stdio.h>
int main()
{
    void f(int p[][3], int m, int n, int *pRow, int *pCol);
    int a[2][3],i,j;
    int *p1,*p2;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    f(a,2,3,p1,p2);

    return 0;
   
 }
 void f(int p[][3], int m, int n, int *pRow, int *pCol)
 {
     int max,i,j,k=0;
     max=p[0][0];
     for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            if(p[i][j]>max)
            {
                max=p[i][j];
                 pRow=&i;
                pCol=&j;
            
            }
        }
    }

    printf("%d %d %d",max,*pRow,*pCol);

 }

最大数能找出来,但是行和列怎么输入数字都是2 .3
2019-01-10 08:14
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:20 
   pRow=&i;
   pCol=&j;

这是神马鸟

DO IT YOURSELF !
2019-01-10 08:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
   pRow=&i;
   pCol=&j;

这是神马鸟

DO IT YOURSELF !
2019-01-10 08:47
丨丨
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2018-10-15
  得分:0 
回复 2楼 wp231957
指针
2019-01-10 09:43
丨丨
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2018-10-15
  得分:0 
回复 楼主 丨丨
#include<stdio.h>
int main()
{
    void f(int p[][3], int m, int n, int *pRow, int *pCol);
    int a[2][3],i,j;
    int *p1,*p2;
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    f(a,2,3,p1,p2);

    return 0;
   
 }
 void f(int p[][3], int m, int n, int *pRow, int *pCol)
 {
     int max,i,j,k=0;
     max=p[0][0];
     for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            if(p[i][j]>max)
            {
                max=p[i][j];
            
            }
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(p[i][j]==max)
            {
                pRow=&i;
                pCol=&j;
                k=1;
                break;
            }
        }
        if(k==1) break;
    }
    printf("%d %d %d",max,*pRow,*pCol);

 }
在增加一个循环找行和列就可以,不能同时找到最大的数和行、列吗
2019-01-10 09:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
以下是引用丨丨在2019-1-10 09:43:14的发言:

指针

准确来说,这是取址,你在循环结束之后 去取值,当然是峰值也就是你所说得2 3

DO IT YOURSELF !
2019-01-10 09:48
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
以下是引用丨丨在2019-1-10 09:43:14的发言:

指针

准确来说,这是取址,你在循环结束之后 去取值,当然是峰值也就是你所说得2 3

而你4楼得代码增加了一个break 截断 故能取到正确数据

综合来说,你解这个题目得逻辑还是不够清晰

[此贴子已经被作者于2019-1-10 10:27编辑过]


DO IT YOURSELF !
2019-01-10 09:48
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
程序代码:

#include <stdio.h>

int main()
{
    int s[4][4]={{1,2,3,4},{44,33,22,11},{25,35,45,15},{9,8,7,6}};   
    int max=0;
    int row=0;
    int col=0;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            if(s[i][j]>=max)
            {
                max=s[i][j];
                row=i+1;
                col=j+1;
            }
        }
    }
    printf("mxa= %d  row= %d  col=%d  \n",max,row,col);
    return 0;
}

DO IT YOURSELF !
2019-01-10 09:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
程序代码:

#include <stdio.h>

int main()
{
    int s[4][4]={{1,2,3,4},{44,33,22,11},{25,35,45,15},{9,8,7,6}};   
    int max=0;
    int row=0;
    int col=0;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            if(s[i][j]>=max)
            {
                max=s[i][j];
                row=i+1;
                col=j+1;
            }
        }
    }
    printf("mxa= %d  row= %d  col=%d  \n",max,row,col);
    return 0;
}

DO IT YOURSELF !
2019-01-10 09:57
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:376
帖 子:13106
专家分:50657
注 册:2012-10-18
  得分:0 
程序代码:

#include <stdio.h>

int f(int s[][4],int row,int col,int* rerow,int* recol)
{
    int max=0;
    for(int i=0;i<row;i++)
    {
        for(int j=0;j<col;j++)
        {
            if(s[i][j]>=max)
            {
                max=s[i][j];
                *rerow=i+1;
                *recol=j+1;
            }
        }
    }
    return max;
}

int main()
{
    int s[4][4]={{1,2,3,4},{44,33,22,11},{25,305,45,15},{9,8,7,6}};   
    int row=0;
    int col=0;
    int max=f(s,4,4,&row,&col);
    printf("mxa= %d  row= %d  col=%d  \n",max,row,col);
    return 0;
}

DO IT YOURSELF !
2019-01-10 10:07







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

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