首页 > 用户发贴区 > 编程问题提问区 > 为什么这个程序运行出来老是不对呢?
2007
07-04

为什么这个程序运行出来老是不对呢?

题目:


       找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。


      我写了两个程序,可是两个程序运行结果好像都不太好,请大家帮忙看一下,到底错在哪里,谢谢。


程序一:


#define ROW 3
#define COL 4


int main(void)
{
    int arr[COL][ROW];
    int i,j,k,l,temp,flag = 0;
    for(i=0;i<COL;i++)
    {
        for(j=0;j<ROW;j++)
        {
            scanf(“%d”,&arr[i][j]);        /* 输入数组 */
        }
    }


    for(i=0;i<COL;i++)
    {
        for(j=0;j<ROW;j++)
        {
            k=i;
            temp = arr[i][j];
            for(l=0;l<ROW;l++)
         {
                if(temp > arr[k][l])
             {
                    flag = 1;
             }
         }


            k = j;
            for (l=0;l<COL;l++)
         {
                if(temp < arr[l][k])
             {
                    flag = 1;
             }
         }


            if(flag == 0)
         {
                printf(“%d,%d= %d is ..\n”,i,j,arr[i][j]);
         }
            else
         {
                flag = 0;
         }
        }
    }


      getch();


      return 0;
   
}


 


程序二:


int main(void)
{


    int i,
    int j;
 int max;
 int colum;
 int m;
 int flag0;
 int flag1;
 int a[3][4];
 int b[3][4];
   
 printf(“input the array a:\n”);
 
 for(i=0;i<3;i++)
 {
         for(j=0;j<4;j++)
             scanf(“%5d”,&a[i][j]);
 }


    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
            printf(“%5d”,a[i][j]);
    
  printf(“\n”);
   }



    flag0=0;


    for(i=0;i<3;i++)
 {
        max=a[i][0];
     
  for(j=0;j<4;j++)
           if(a[i][j]>max)
     {
                max=a[i][j];
                colum=j;
     }
     
     for(m=0;m<4;m++)
               if(max>a[m][colum])
                  flag0=0;
      
      if(flag0)
      {
                    printf(“the %d row,%d colum  %d is AnDian.\n”,i,colum,max);
                    flag1=1;
      }
 }
    if(!flag1)
      printf(“\n no AnDian!\n”);
   
 getch();
    return(0);



}


为什么这个程序运行出来老是不对呢?》有 2 条评论

  1. xstar 说:

    分两步:
    第一步,找出一行中的最大的一个;
    第二步,找出改行中是否有其他一样大的数,并分别验证在改列中是否是最小的一个;

    [code]
    #include <stdio.h>

    #define ROW 3
    #define COL 4

    int arr1[COL][ROW] = {
        { 1, 4, 2 },
        { 1, 5, 3 },
        { 1, 3, 2 },
        { 1, 6, 3 }
    };

    int arr2[COL][ROW] = {
        { 1, 2, 3 },
        { 1, 3, 2 },
        { 1, 4, 7 },
        { 1, 5, 3 }
    };

    int arr3[COL][ROW] = {
        { 1, 4, 4 },
        { 1, 5, 5 },
        { 1, 3, 3 },
        { 1, 6, 6 }
    };

    void foo( int arr[COL][ROW] )
    {
     int i, j, k;
     int x, y;
     int max;
     int flag;

     for ( i = 0; i < COL; i++ ) {
      max = arr[i][0];
      x = i;

      for ( j = 0; j < ROW; j++ ) {
       if ( max < arr[i][j] ) {    //查找每行最大的一个元素
        max = arr[i][j];
       }
      }

      for ( j = 0; j < ROW; j++ ) {
       if ( max == arr[x][j] ) {  //该行最大的元素可能有好几个,分别验证是否改列的最小一个
        y = j;

        flag = 1;

        for ( k = 0; k < COL; k++ ) {
         if ( max > arr[k][y] ) {  //如果不是则设置flag=0
          flag = 0;
         }
        }

        if ( flag == 1 ) {           //不是最小的一个,不输出
         printf( "arr[%d][%d] = %d\n", x, y, arr[x][y] );
        }
       }
      }
     }
    }

    int main(void)
    {
     printf( "arr1\n" );
     foo( arr1 );

     printf( "arr2\n" );
     foo( arr2 );

     printf( "arr3\n" );
     foo( arr3 );
     return 0;
    }
    [/code]

  2. qiudan85 说:

    谢谢版主

留下一个回复