冒泡排序 输出有些问题

john0122 2011-07-06 12:33:21
#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int array[],int n);
int main()
{
int n,*a,i;
printf("n=");
scanf("%d\n",&n);
a=malloc(sizeof(int)*n);
printf("\n");
for(i=0;i<n;i++)
{ printf("a[%d]=",i);
scanf("%d",a+i);
}
bubble_sort(a,n);
printf("The sorted array is:\n ");
for(i=0;i<n;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
void bubble_sort(int array[],int n)
{
int i,j,flag,temp;
for(i=0;i<n;i++)
{
flag=1;
for(j=0;j<n-1;j++)
{
if(array[j]>array[j+1])
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=0;
}
}
if(1==flag)
break;
}
}
这是我写的代码,为什么输出会是a[0]=a[1]=... ?
...全文
180 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yshf0325 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 snowwhite1 的回复:]
scanf("%d\n",&n);
输入数据一般不加格式控制的,否则很容易出错。
[/Quote]这是一个大问题。
还有一个最为关键的问题是:楼主想在自己定义的函数中用malloc函数开辟一个可以存放n个整数的空间,并用一个指针来指向这个内存区,但是楼主没想到你开辟的那个内存空间的确有n个int那么大,不过只能存放一个数据,另外开辟内存空间的语句的格式也有问题(在malloc前面是不是少了什么东西?或许有的编译器可以省略int的,但是 char的、float的、还有、、、的类型呢?不可以吧!)。如果想用这种方法存放多个数据,就要用到链表了。
疯疯癫癫 2011-07-11
  • 打赏
  • 举报
回复
上面的说的很清楚了
Java默默 2011-07-11
  • 打赏
  • 举报
回复
for(i=0;i<n;i++)
{ printf("a[%d]=",i);
scanf("%d",a+i);
}

wizard_tiger 2011-07-11
  • 打赏
  • 举报
回复
scanf函数最好不要加任何控制符,否则容易出错。
如加'\n'的话,则输入两个数之间必须按回车否则出错。
aa0758 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 john0122 的回复:]
...
这是我写的代码,为什么输出会是a[0]=a[1]=... ?
[/Quote]

想来楼主不是在控制台上标准输入了
主要是这几个循环:
for(i=0;i<n;i++)
{ printf("a[%d]=",i);
scanf("%d",a+i);
}

如果是标准输入的话,每次输入前都会先提示再接收输入
这时再输入 才是
a[0] = 输入数1 a[1] = 输入数2...
zhangyuehua123 2011-07-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sanguine1211 的回复:]
输入的时候是不能带\n符号的,输入是自动换行的,如果你一定要带的话,你就再加一行printf("\n");也行~
[/Quote]
++
whileyk 2011-07-09
  • 打赏
  • 举报
回复
/*输入*/
void Impoting(int *p,int n)
{
int i = 0;
for(i = 0; i < n; i++)
{
scanf("%d",p+i);
}
printf("\n");

}
/*输出*/
void Input(int *p, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ", *(p+i));

}
printf("\n");

}
/*大于*/
int large(int a, int b)
{
return a > b ? 1 : 0;

}
/*小于*/
int Small(int a, int b)
{

return a < b ? 1 : 0;
}

void Nswap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;


}

/*从小到大的排序输出*/
void Sortstol(int *p, int n)
{
int i,j;
for(j = 0; j < n - 1; j++)
{
for(i = 0; i < n - j - 1; i++)
{
if( large(*(p+i), *(p+i+1)) )
{
Nswap(p+i, p+i+1);
}

}

}

}
int main()
{
int *p = (int *)malloc( 10 * sizeof(int));
if(!p)
{
return ;
}
Impoting(p,10); /**/
Input(p,10); /**/

Sortstol(p,10); /*大到小的排序*/
Input(p,10); /*输出*/


if(p)
{
free(p);
}
}
whileyk 2011-07-09
  • 打赏
  • 举报
回复
[align=left]LZ的代码看起来头疼,一个冒泡弄的看的头疼
/*输入*/
void Impoting(int *p,int n)
{
int i = 0;
for(i = 0; i < n; i++)
{
scanf("%d",p+i);
}
printf("\n");

}
/*输出*/
void Input(int *p, int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ", *(p+i));

}
printf("\n");

}
/*大于*/
int large(int a, int b)
{
return a > b ? 1 : 0;

}
/*小于*/
int Small(int a, int b)
{

return a < b ? 1 : 0;
}

void Nswap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;


}

/*从小到大的排序输出*/
void Sortstol(int *p, int n)
{
int i,j;
for(j = 0; j < n - 1; j++)
{
for(i = 0; i < n - j - 1; i++)
{
if( large(*(p+i), *(p+i+1)) )
{
Nswap(p+i, p+i+1);
}

}

}

}
int main()
{
int *p = (int *)malloc( 10 * sizeof(int));
if(!p)
{
return ;
}
Impoting(p,10); /**/
Input(p,10); /**/

Sortstol(p,10); /*大到小的排序*/
Input(p,10); /*输出*/

if(p)
{
free(p);
}
}
[/align]
sanguine1211 2011-07-08
  • 打赏
  • 举报
回复
输入的时候是不能带\n符号的,输入是自动换行的,如果你一定要带的话,你就再加一行printf("\n");也行~
至善者善之敌 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hnuqinhuan 的回复:]
C/C++ code

#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int array[],int n);
int main()
{
int n,*a,i;
printf("n=");
scanf("%d",&n);//--去掉\n
a=( int *)malloc(siz……
[/Quote]

+++1 ,是这样的
flysnowhite 2011-07-06
  • 打赏
  • 举报
回复
scanf("%d\n",&n);
输入数据一般不加格式控制的,否则很容易出错。
無_1024 2011-07-06
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
void bubble_sort(int array[],int n);
int main()
{
int n,*a,i;
printf("n=");
scanf("%d",&n);//--去掉\n
a=( int *)malloc(sizeof(int)*n);
printf("\n");
for(i=0;i<n;i++)
{
printf("a[%d]=",i);
scanf("%d",a+i);
}
bubble_sort(a,n);
printf("The sorted array is:\n ");
for(i=0;i<n;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return 0;
}
void bubble_sort(int array[],int n)
{
int i,j,flag,temp;
for(i=0;i<n;i++)
{
flag=1;
for(j=0;j<n-1;j++)
{
if(array[j]>array[j+1])
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
flag=0;
}
}
if(1==flag)
break;
}
}

lanqiucoco 2011-07-06
  • 打赏
  • 举报
回复
第八行:scanf("%d\n",&n);-->scnaf("%d",&n);

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧