| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 371 人关注过本帖
标题:问个简单问题1!!!
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
问个简单问题1!!!
程序代码:
#include<stdio.h>
#include<stdlib.h>
void ad(int *p,int m,int n);
int main()
{
int i=0, j=0, m, n;
int *p,**p1;

for(;;)
{
  printf("enter into number of line and row:\n");

    scanf("%d%d",&m,&n);//输入二维数组的大小!

      p=(int*)malloc(n*m*sizeof(int));
        p1=&p;

     printf("enter into the grade:\n");

      for(i=0;i<m;i++)//输入成绩!
      {
          //printf("class%2d",i);
         for(j=0;j<n;j++)
         {
             scanf("%d",p+i*m+j);
         }
         //scanf("\n");
      }
      ad(p,m,n);
}
return 0;
}
void ad(int *p,int m,int n)
{
  int i, j, max, a=0, b=0;

     max=*(p+0*m+0);

         for(i=0;i<n;i++)
         {
             for(j=0;j<m;j++)
             {
                if(max<*(p+i*m+j))
                {
                    a=i;
                    b=j;
                    max=*(p+i*m+j);
                }
             }
         }
         printf("%-4d,%-4d,%-4d\n",a+1,b+1,max);
}
为啥求不出最大?
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 清微御宇 于 2012-5-25 20:38 编辑 ]
2012-05-25 20:35
唯我独魔
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:176
专家分:782
注 册:2011-4-13
收藏
得分:20 
程序代码:
#include<stdio.h>

 #include<stdlib.h>

 void ad(int *p,int m,int n);

 int main()

 {

 int i=0, j=0, m, n;

 int *p,**p1;

for(;;)

 {
   printf("enter into number of line and row&pound;&ordm;\n");

    scanf("%d%d",&m,&n);//&Ecirc;&auml;&Egrave;&euml;&para;&thorn;&Icirc;&not;&Ecirc;&yacute;×é&micro;&Auml;&acute;ó&ETH;&iexcl;&pound;&iexcl;

      p=(int*)malloc(n*m*sizeof(int));
         //p1=&p;

     printf("enter into the grade&pound;&ordm;\n");

      for(i=0;i<m;i++)//&Ecirc;&auml;&Egrave;&euml;&sup3;&Eacute;&frac14;¨!
       {
           //printf("class%2d",i);
          for(j=0;j<n;j++)
          {
              scanf("%d",p+i*n+j);
          }
          //scanf("\n");
       }
       for(i=0;i<m;i++)//&Ecirc;&auml;&Egrave;&euml;&sup3;&Eacute;&frac14;¨!
       {
           //printf("class%2d",i);
          for(j=0;j<n;j++)
          {
              printf("%d ",*(p+i*n+j));
          }
          //scanf("\n");
       }
       ad(p,m,n);

 }

 return 0;

 }

 void ad(int *p,int m,int n)

 {
   int i, j, max, a=0, b=0;

     max=*(p+0*n+0);

         for(i=0;i<m;i++)
          {
              for(j=0;j<n;j++)
              {
                 if(max<*(p+i*n+j))
                 {
                     a=i;
                     b=j;
                     max=*(p+i*n+j);
                 }
              }
          }
          printf("%-4d,%-4d,%-4d\n",a+1,b+1,max);

 }
2012-05-25 22:02
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
呵呵,自己已经改正了,谢谢楼上!

Stay hungry , Stay foolish!
2012-05-26 11:05
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>

void ad(int *p,int m,int n);

int main()
{
    int i=0, j=0, m, n;
    int *p;
   
    for(;;)
    {
        printf("enter into number of line and row:\n");
        
        scanf("%d%d",&m,&n);//输入二维数组的大小!
        
        p=(int*)malloc(n*m*sizeof(int));
        
        printf("enter into the grade:\n");
        
        for(i=0;i<m;i++)//输入成绩!
        {
            //printf("class%2d",i);
            for(j=0;j<n;j++)
            {
                scanf("%d",p+i*n+j); //小错误, 应是i * n
            }
            //scanf("\n");
        }
        ad(p,m,n);
    }
    return 0;
}

void ad(int *p,int m,int n)
{
    int i, max, index;

    max = * p;                                     //取第一个元素。

    for(i = 0; i < m * n ; i++)
    {
        if( max < *(p + i) )
        {
            max = * (p + i);
            index = i;            //记录偏移值
        }
    }
    printf("\nFound max of array[%d][%d] = %d\n", index / n + 1, index % n + 1, max);   
}

上次的示例代码可能你还是没有理解透,关于二维数组的行列计算公式, array[a][b] = *( p(第一个元素地址) + a * row(每行数据维数) + b),
[0 ,0][0, 1][0, 2]
[1, 0][1, 1][1, 2]
这只是我们头脑中的想像,实际上在内存中,这些元素都是一维线型的分布的[0 ,0][0, 1][0, 2][1, 0][1, 1][1, 2],所以任意一个元素的位置 = 第一个元素的地址 + offset偏移。
进而由这个公式推导出二维数组array(m, n)中, 任意元素array[a][b]中的 a = offset / n, 而 b = offset % n

我们都在路上。。。。。
2012-05-26 12:16
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
另外,用malloc分配内存,不要忘了用free进行释放。和我们打成对的括号是一样的道理。
求最大值函数中其实max变量不需要,想想怎么改可以让程序变得更短?

[ 本帖最后由 hellovfp 于 2012-5-26 12:56 编辑 ]

我们都在路上。。。。。
2012-05-26 12:53
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
回复 5楼 hellovfp
谢谢你哈!!!
好的我试试简化,昨晚就是急于写成,木有深刻理解a*row+b才使一叶障目,弄了3个钟头,后来改正才发现自己太傻了!

Stay hungry , Stay foolish!
2012-05-26 14:09
快速回复:问个简单问题1!!!
数据加载中...
 
   



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

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