C语言将10个数字从小到大排列,为什么我的代码输入是1,2,3,4,5,6,7,8,9,10输出是1,10,9,8,7,6,5,4,3,2呢?

哪里错了?该怎么改正呢?
#include<stdio.h>
#include<conio.h>
int main()
{
int a[10],i,n;
printf("请输入数字:\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
void array(int x[],int n);
array(a,10);
printf("从小到大排列为:\n");
for(i=0;i<=9;i++)
{
printf("%d ",a[i]);
}
getch();
return 0;
}
void array(int x[],int n)
{
int i,j,t;
for(i=0;i<=9;i++)
{
for(j=1;j<=9;j++)
{
if(x[i]>x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
}
}

程序
#include<stdio.h>
#include<conio.h>
int main()
{
int a[10],i,n;
printf("请输入数字:\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
void array(int x[],int n);
array(a,10);
printf("从小到大排列为:\n");
for(i=0;i<=9;i++)
{
printf("%d ",a[i]);
}
getch();
return 0;
}
void array(int x[],int n)
{
int i,j,t;
for(i=0;i<=8;i++)
{
for(j=i+1;j<=9;j++)
{
if(x[i]>x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-01
这种问题一般是边界定义出错,就是for()里面的循环的条件定义出错,用冒泡去排序效果会好一点,我把你的程序改了改,现在可以完成你的排序要求了
#include<stdio.h>
#include<conio.h>
void array(int x[],int n)
{
int i,j,t;
for(i=0;i<=9;i++)
{
for(j=i+1;j<=9;j++)
{
if(x[i]<x[j])
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
}
}
int main()
{
int a[10],i,n;
printf("请输入数字:\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}
array(a,10);
printf("从小到大排列为:\n");
for(i=0;i<=9;i++)
{
printf("%d ",a[i]);
}
getch();
return 0;
}本回答被提问者采纳
第2个回答  2012-11-01
1. void array中的参数int n没用到,删去吧。

2. 冒泡排序有问题,从大到小,应为:
for( i = 0; i < 10; i++)
for( j = 0 ; j < 9 - i; j++)
if( x[j] < x[j + 1] ) {
t = x[j];
x[j] = x[j + 1];
x[j + 1] = t;
}
第3个回答  2012-11-01

最后一个for循环   j=0  而不是j=1

 给你标上了 



#include<stdio.h>

#include<conio.h>

int main()

{

int a[10],i,n;

printf("请输入数字:\n");

for(i=0;i<=9;i++)

{

scanf("%d",&a[i]);

}

void array(int x[],int n);

array(a,10);

printf("从小到大排列为:\n");

for(i=0;i<=9;i++)

{

printf("%d ",a[i]);

}

getch();

return 0;

}

void array(int x[],int n)

{

int i,j,t;

for(i=0;i<=9;i++)

{

    for(j=1;j<=9;j++)

{

if(x[i]>x[j])

{

t=x[i];

x[i]=x[j];

x[j]=t;

}

}

}

}


而且 n是多余的  有没有不影响    还占用资源!

第4个回答  2012-11-01
排序排错了
第一轮:i=0判断 1>2false 1>3false.........1>9false
第二轮:i=1判断 2>2 false 2>3false...........2>9false
第三轮:i=2判断 3>2true交换 3>3false.....
.......
第十轮:i=9判断 10>2turn交换........
明白没,

C语言:采用冒泡排序方法,对10个数按由小到大的的顺序排序
int main(){ int i,j,t,a[10]={5,4,8,3,6,9,7,222,64,88};\/\/排序 for(i=1;i<10;i++)\/\/外循环控制排序趟数,n个数排n-1趟 { for(j=0;j<10-1;j++)\/\/内循环每趟比较的次数,第j趟比较n-i次 { if(a[j]>a[j+1])\/\/相邻元素比较,逆序则交换 { t=a[j];a[j...

用c语言定义一个大小为10的整型数组,利用冒泡排序法将数组元素从大到...
include <stdio.h>int main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; int i,j,t; for(i=1;i<10;i++) for(j=0;j<10-i;j++) { if (a[j]

如何用编程实现10个数从大到小输出?
int main(){ int i,j,a[10],t;printf("输入数");for (i = 0; i < 10; i++)scanf("%d",&a[i]);for (i = 0; i < 10; i++){ for (j = i + 1; j < 10;j++)if (a[i] < a[j]){ t = a[i];a[i] = a[j];a[j] = t;} } printf("从大到小");...

C语言~十个数字从小到大怎么排列~从大到小呢~
int a[10],i,j,t;printf("请输入10个整数:\\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t;} printf("排序以后的数:\\n");for(i=0;i<10;i++)printf("%d "...

求C语言将数组元素大小排序!!
C语言将数组元素大小排序方法:以下使用的是冒泡排序法实线数组从小到大排序。思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。10、2、3、4、5、6、9、8、7、1是输入的待排序的数列,经过第一次排序,将最大的,10放在最后,第二次排序,将剩下的...

C语言 输入10个数按大小排列输出
For (I = 0;我< 10;我+ +){ if the scanf (" % ", & a [I]);\/\/从键盘输入十个数字到数组中;} For (I = 1;我< 10;i++)\/\/for循环,执行9个循环;{ 对于(j = I - 1;J > = 0;J——)\/\/for循环,在每个大循环中,将a[I]从a[1]比较到它之前的数字;{ If (a[...

c语言 用选择法对10个整数从小到大排序
c=j; \/\/记住最小值的下标。} } if(c !=i) \/\/进行交换。{ int temp = a[i];a[i] = a[c];a[c] = temp;} } } int main(){ int a[10]={1,3,5,7,9,2,4,6,8,10};sort(a,10);int i;for(i=0;i<10;i++){ printf("%d ",a[i]);} getchar();return 0;}...

C语言下面简单代码输出的为什么都是0 而不是1 2 3 4 5 6 7 8 9 请...
类型不匹配。%d是取int型数字,通常都是4个字节。float一般都是8个字节。所以用%d打印的话只会取其前四个字节。按照二进制排列顺序,在数字不是特别大得时候,前四个字节都是0.把%d换成%f打印试试。

...中输入10个整数,并将这些数按从小到大顺序排列。
for(i=0;i<10;i++){ printf("请输入第%d个数:",(i+1));scanf("%d",num[i]);} for(i=0;i<10;i++){ for(j=0;j<10-i;j++){ if(num[j]>num[j+1]){ temp=num[j];num[j]=num[j+1];num[j+1]=temp;} } } printf("这10个数从小到大的顺序是:");for(i=0...

c语言排序问题
void main(){ int i,p,z,a[10]={10,9,7,6,1,2,8,5,3,4};for(i=0;i<=9;i++){ for(p=i+1;p<=9;p++){ if(a[i]>a[p]){ z=a[i];a[i]=a[p];a[p]=z;} } } for(i=0;i<=9;i++){ printf("%d,\\n",a[i]);} } 帮你改过了,你的是少循环了一次...

相似回答