C语言菜鸟的问题!

来源:百度知道 编辑:UC知道 时间:2024/05/13 04:46:09
从键盘上输入10个数,按从小到大的顺序输出到屏幕,我的代码如下:
#include "stdio.h"
main()
{
int a[10],n,m=0;
printf("please input ten numbers:\n");
for(n=0;n<=9;n++)
scanf("%d",a[n]);
for(n=0;n<=9;n++)
{if(a[n]>a[n+1])
m=a[n+1],a[n+1]=a[n],a[n]=m;}
for(n=0;n<=9;n++)
printf("%d ",a[n]);
getch();
}
为何不能达到题目的要求,请指教,谢谢!

两个问题:
scanf("%d",a[n]); 改为scanf("%d",&a[n]);

关键是这段排序:
for(n=0;n<=9;n++)
{if(a[n]>a[n+1])
m=a[n+1],a[n+1]=a[n],a[n]=m;}
这样循环一遍只能保证a[9]最大,而a[0]~a[8]的顺序不能保证
你可以自己模拟一下

算法代码(选择排序):
int i,j;
for(i=0;i<9;i++)
//第1次选最小的作为a[0],第2次选次小的作为a[1],……
for(j=i+1;j<10;j++)
if(a[i]>a[j]) {
a[i]^=a[j]; a[j]^=a[i]; a[i]^=a[j];
//3个异或实现整数a[i]和a[j]的交换,而不用临时空间
}

可以用冒泡算法~

#include<stdio.h>

main() {
int a[10],n,m=0,i;
printf("please input ten numbers:\n");
for(n=0;n<=9;n++)
scanf("%d",&a[n]); // scanf("%d",a[n]);
for(n=0;n<9;n++) {
for(i=0;i<9-n;i++)//原程序只把最大值放到了最后
if(a[i]>a[i+1])
m=a[i+1],a[i+1]=a[i],a[i]=m;
}
for(n=0;n<=9;n++)
printf("%d ",a[n]);
getchar();
}