c - 如何找到矩阵 C 中的中位数(行和列)

标签 c matrix row median

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

我想在我用代码给出的前例中执行以下操作,但我不知道如何操作。

例如。如果我输入“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();
}

最佳答案

尝试执行 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]

关于c - 如何找到矩阵 C 中的中位数(行和列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584215/

相关文章:

C - Feof(stdin)-如何在 Windows 中指示输入结束?

java - nextInt() Java 在同一行输入

使用 setLookAtM 方法的 Android OpenGL 怪异

php - 如何从两个表中选择数据,其中第一个表的一行仅选择第二个表的第一行

r - 如何有条件地将数据框行 append 到上面的行

c# wpf datagrid 添加行

c++ - 运行时堆栈是否保存在内存的数据段中?

c - 链接列表递归函数,从列表中删除奇数值。 (C)

c - 论证似乎不起作用

c# - C# 中的代码库/应用程序