【问题标题】:How to find median (row&column) in a matrix C [closed]如何在矩阵C中找到中位数(行和列)[关闭]
【发布时间】:2015-02-19 11:05:04
【问题描述】:

我编写了一个代码来创建一个矩阵并以升序形式对其进行排序。 (行)

我想按照我在代码中给出的 ex. 中的内容执行操作,但我不知道如何操作。

例如。如果我输入“r”作为输入; 像这样输入的矩阵;

3 4 5
9 2 8
6 4 8

应该以那种形式出现;

3 4 5
2 8 9
4 6 8

屏幕上的输出应该是;

4
8
6

当我们取行的中位数时。

并且,如果我将输入值输入为“c”(用于列排序和中位数)

3 4 5
9 2 8
6 4 8

应该将自身重新排序为;

3 2 5
6 4 8
9 4 8

并且中值应该显示为;

6 4 8

这是我的完整代码;

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define n 3

int main()
{
    int arr[n][n],min,i,j,tmp,y,k,w,z=0,q=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("Enter number: ");
            scanf("%d",&arr[i][j]);
        }
    }

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            z = j; 
            min = arr[i][j];

            for (k = j +1 ; k < n; k++)
            {
                if (arr[i][k] < min)
                {
                    min = arr[i][k];
                    z = k; 
                }
            }

            tmp=arr[i][j];
            arr[i][j]=min;
            arr[i][z]=tmp;
        }
    }

    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%d ",arr[i][j]);
        printf("\n");
    }
    getch();
}

【问题讨论】:

    标签: c matrix row median


    【解决方案1】:

    我要发布你的行中位数。

    声明以下变量

    int count=0,median=0;
    
    
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            z = j; 
            min = arr[i][j];
            count +=1; //Using count here
    
            for (k = j +1 ; k < n; k++)
            {
                if (arr[i][k] < min)
                {
                    min = arr[i][k];
                    z = k; 
                }
            }
    
            tmp=arr[i][j];
            arr[i][j]=min;
            arr[i][z]=tmp;
        }
    /*Modifi from here*/
    if(count %2 == 1)
             median = (count+1)/2;
        else
             median = (count)/2;
        printf("%d\n",arr[i][median-1]);
        count = 0;
    }
    

    【讨论】:

      【解决方案2】:

      尝试执行 main() 中的所有操作会使这种方式过于复杂。

      相反,将代码分解为函数,每个活动一个函数。

      例如:

      static int matrix[3][3] = {{0}}
      
      int main()
          inputMatrix()
          done = false
          while(!done)
              action = actionMenu()
              switch( action )
                  case 0:
                      ....
                      break;
                  case 1:
                      ....
                      break;
                  default:
                      done = true
                      break;
               end switch
           end while
           return(0)
      
      
      int actionMenu()
          display menu,
          done = false
          while(!done)
              display prompt 
              gets response, 
              if response is valid
                  done = true
              end if
          end while
          returns validated response
      
      void inputMatrix()
          displays criteria
          loop until 9 valid responses input
              display prompt
              get response
              validate response
          end loop:
      
      void sortEachRow()
          --there are three rows, and three columns per row
          for row=0; row<3; row++
              swapped = true
              while swapped
                  swapped = false
                  for column=0; column<2; column++
                      if row[column] > row[column+1]
                          swapped = true
                          exchange row[column], row[column+1]
                      end if
                  end for
              end while
           end for
      
      
      void sortEachColumn()
          very similar to sortEachRow
      
      void PrintRowMedian()
          print row[1][0]
          print row[1][1]
          print row[1][2]
      
      void PrintColumnMedian()
          print row[0][1]
          print row[1][1]
          print row[2][1]
      

      【讨论】:

      • 你发现中位数是静态的,作者期望它是广义形式的,因为 n 值可能会随着时间的推移而变化 3.
      【解决方案3】:

      我正在尽可能根据您的要求发布完整的解决方案,几乎完整

      如果我的代码有问题,您可以发表评论。

      #include <stdio.h>
      #include <stdlib.h>
      
      #define n 3
      
      int arr[n][n],arr_col[n][n];
      int count_row=0,median=0,count_col=0;
      int min,i,j,tmp,y,k,w,z=0,q=0;
      char op,op1;
      void row_median();
      void col_median();
      void print();
      void print_col();
      void read();
      int main() 
      {
      for(;;)
      {
       printf("Enter 'r' for row and 'c' for column median and 'q' for quit\n");
       scanf("%c",&op);
       switch(op)
       {
         case 'r':read();
                  row_median();
                  printf("\n");
                  break;
         case 'c':read();
                  col_median();
                  printf("\n");
                  print_col();
                  break;
         case 'q':exit(0);
                  default:printf("please enter a valid choice\n");
        }
       }
      return 0;
      }
      
      void read() 
      {
        for(i=0;i<n;i++)
          {
            for(j=0;j<n;j++)
            {
              printf("Enter number: ");
              scanf("%d",&arr[i][j]);
              arr_col[i][j] = arr[i][j];
             }
          }
       }
      
      void print()
      {
        for(i=0;i<n;i++)
        {
          for(j=0;j<n;j++)
              printf("%d ",arr[i][j]);
          printf("\n");
        }
      }
      
      void print_col()
      {
       for(i=0;i<n;i++)
        {
          for(j=0;j<n;j++)
              printf("%d ",arr_col[i][j]);
          printf("\n");
        }
      }
      
      void row_median()
      {
       for(i=0;i<n;i++)
        {
          for(j=0;j<n;j++)
          {
              z = j; 
              min = arr[i][j];
              count_row +=1;
      
              for (k = j +1 ; k < n; k++)
              {
                  if (arr[i][k] < min)
                  {
                      min = arr[i][k];
                      z = k; 
                  }
              }
      
              tmp=arr[i][j];
              arr[i][j]=min;
              arr[i][z]=tmp;
          }
          if(count_row %2 == 1)
               median = (count_row+1)/2;
          else
               median = (count_row)/2;
          printf("%d\n",arr[i][median-1]);
          count_row = 0;
        }
       print();
      }
      
      void col_median()
      {
      for(i=0;i<n;i++)
        {
          for(j=0;j<n;j++)
          {
              z = j; 
              min = arr_col[j][i];
              count_col +=1;
      
              for (k = j+1 ; k < n; k++)
              {
                  if (arr_col[k][i] < min)
                  {
                      min = arr_col[k][i];
                      z = k; 
                  }
              }
      
              tmp=arr_col[j][i];
              arr_col[j][i]=min;
              arr_col[z][i]=tmp;
          }
          if(count_col %2 == 1)
               median = (count_col+1)/2;
          else
               median = (count_col)/2;
          printf("%d ",arr_col[median-1][i]);
          count_col = 0;
        }
       printf("\n");
      }
      

      【讨论】:

      • 太漂亮了:') 谢谢!
      • @cprogramdatabase 欢迎 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2016-06-09
      相关资源
      最近更新 更多