【问题标题】:How to print a sorted column from matrix in C如何从C中的矩阵打印排序列
【发布时间】:2013-07-09 07:47:43
【问题描述】:

我是 C 编程语言的新手,我尝试用这种语言练习我的技能。

我正在编写一个关于矩阵的练习,其中用户输入要排序的列号并打印已排序的列(我使用的是冒泡排序),但程序没有显示回答。

这是我对问题的实现。-

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

using namespace std;

void bubble(int *array);
void print(int *array);

int main(){

    /*Este programa toma una columna y la ordena*/

    int fil=4, col=4;

    int matrix[fil][col];

    for(int i=0;i<fil;i++){
        for(int j=0;j<col;j++){

        matrix[i][j]=rand()%10+1;   
        }
    }

    for(int i=0;i<fil;i++){
        for(int j=0;j<col;j++){
            printf("%d\t",matrix[i][j]);            
        }
        printf("\n");
    }

    int a, aux[col];

    printf("\nColumna a ordenar: ");
    scanf("%d",&a);

    for(int i=0;i<fil;i++){
        for(int j=0;j<col;j++){
            if(j==a){
                aux[j]=matrix[0][j];
            }
            bubble(aux);
        }
    }

    getche();

}

void bubble(int *array){

    int length= sizeof(array)/sizeof(array[0]);
    int aux;

    for(int i=length-2;i>=0;i--){
        for(int j=0;j<=i;j++){
            if(array[j]>array[j+1]){
                aux=array[j];
                array[j]=array[j+1];
                array[j+1]=aux;
                print(array);
            }
        }
    }
}

void print(int *array){

    int length= sizeof(array)/sizeof(array[0]);

    for(int i=0;i<length;i++){
        printf("%d",array[i]);
    }
}

而且,我应该遵循哪本书或教程来掌握 c 语言 (C)?

【问题讨论】:

  • what book or tutorial recommend me to start in this language -- 这会将问题转换为基于意见的问题。
  • 首先,决定你想要 C 还是 C++。根据语言,您会得到不同的建议。其次,也许指定约束是什么:例如,您需要自己实现排序算法吗?是否允许调用 rand()printf() 以外的标准库函数?
  • C 语言,对不起;我只想看到已排序的列。
  • 好的,我将删除 C++ 标签。但是你不能包含&lt;iostream&gt;(你的代码无论如何都不需要)。
  • 好的。顺便说一句,我是在 StackOverFLow 中发布新问题 .-。有什么关于 C 的书或教程,你推荐我学习这门语言吗?

标签: c algorithm sorting


【解决方案1】:

首先:使用

int length= sizeof(array)/sizeof(array[0]);

无法为您提供数组元素的数量。事实上,sizeof(array) 会给你指针在内存中的大小。 在 C/C++ 中,您必须将数组元素的数量作为使用它的函数的参数传递。所以你的功能应该是这样的:

void bubble(int *array, int size);
void print(int *array, int size);

第二个:你的循环

for(int i=0;i<fil;i++){
    for(int j=0;j<col;j++){
        if(j==a){
            aux[j]=matrix[0][j];
        }
        bubble(aux);
    }
}

不太可能正确填充aux 数组。也许是这样的:

int a, aux[fil];

printf("\nColumna a ordenar: ");
scanf("%d",&a);

for(int i=0;i<fil;i++){
    aux[i] = matrix[i][a];
}
bubble(aux, fil);
print(aux, fil);

而不是这种双循环?

【讨论】:

    【解决方案2】:

    查看 main() 中的第三个“for”循环。

    for(int i=0;i<fil;i++){
        for(int j=0;j<col;j++){
            if(j==a){
                aux[j]=matrix[0][j];    //Should be aux[i]=matrix[i][j] here, or you're actually putting everything in aux[a], since j==a.
            }
            bubble(aux);
        }
    }
    

    此外,您应该将 aux 定义为 aux[fil]。由于 fil==col,这里没问题。但是 aux 是用来存储列而不是行的,所以如果你的 fil 不等于 col,就会有问题。

    你可以这样写:

    int aux[fil];    
    for(int i=0;i<fil;i++)
            aux[i]=matrix[i][a];
    bubble(aux);
    

    【讨论】:

      【解决方案3】:

      至于哪本书,我只能推荐 Kernighan 和 Ritchie 的《The C Programming Language》。

      【讨论】:

        猜你喜欢
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2018-05-14
        • 2021-11-09
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        相关资源
        最近更新 更多