乔丹篮球鞋1到31:C语言对10个数排序(小到大)我编了一段 运行结果却不是排序
{int t,a[10];
int i;
printf("input arrary : \n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
if(a[i+1]<a[i])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("%d",a[i]);
}
请各位帮我看看 错在什么地方
spiritwen - 助理 二级
是自学的 没人教我 看书看的 所以请教各位 大师
疏漏百出 你就不愿意指出几点来?
判断语句和输出语句没有循环,
main()
{int t,a[10];
int i,j;
printf("input arrary : \n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i+1]<a[i])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<10;a[i])
printf("%d",a[i]);
}
楼上的也不对
应该是:
main()
{int t,a[10];
int i;
printf("input arrary : \n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{for(j=i;j<10;j++)
{if(a[j]<a[i])
{t=a[i];a[i]=a[j];a[j]=t;}
printf("%d",a[i]);
}
}
一楼的朋友,你的a[9]能输出来吗?
你只是在对比了一个数与它相邻的数,这样结果不是排序。
改成两重循环,外循环从i=1~9,内循环从i~9,逐个比较两个循环变量的数即可。
main()
{int t,a[10];
int i;
printf("input arrary : \n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{for(j=i;j<10;j++)
{if(a[i+1]<a[i])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("%d",a[i]);
}
}
#include<stdio.h>
main()
{
int i,j,temp,a[10];
for(i=0;i<=10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
for(j=0;j<9;j++)
if(a[j+1]<a[j])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<10;i++)
printf("%d",a[i]);
}
试试吧
if(a[i+1]<a[i])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("%d",a[i]);
完全不对,
在运行完
for(i=0;i<10;i++)
scanf("%d",&a[i]); 后i=10
而a[11]和a[10]不在定义的数祖a中它们两个的值不确定
然后输出他们两个中较小的值,当然不能达到目的
没有达到你的预期目的主要原因是你将排序操作放在了循环的外面
一楼的修正是最好的,用的是冒泡法,效率比二楼给的高一些
错漏百出! c语言是自学的?