我是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)?
答案 0 :(得分:2)
第一:使用
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);
而不是这个双循环?
答案 1 :(得分:0)
查看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);
答案 2 :(得分:0)
至于哪本书,我除了Kernighan和Ritchie的“C程序设计语言”之外别无他法。