C语言求最小数并交换到最前面 高分求助

题目要求输出
求最小数并交换到最前面

请输入10个数:
34 12 45 78 21 18 38 29 48 10
交换后的10个数序列
10 12 45 78 21 18 38 29 48 34
最小值是 10,最小指下标是 9.
为什么我
的代码输出交换后的数序列是
10 34 45 78 21 18 38 29 48 12呢。。。
请问一下哪里错了。。?
#include <stdio.h>
main()
{
int j,min,i,s[10];
printf(" 求最小数并交换到最前面\n\n");
printf("请输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&s[i]);
printf("交换后的10个数序列:\n");

for(i=0;i<10;i++)
{
if(s[0]>s[i])
{
min=s[i];
s[i]=s[0];
s[0]=min;
j=i;
}

}
s[i]=min;
for(i=0;i<10;i++)
printf("%d\t",s[i]);
printf("\n");
printf("最小值是:%d,最小值下标是:%d\n",min,j);
}
那我应该怎么修改呢~~
请帮忙写下for循环里的代码~~谢谢了...

第1个回答  推荐于2016-08-30
#include <stdio.h>
main()
{
int min,i,s[10];
printf(" 求最小数并交换到最前面\n\n");
printf("请输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&s[i]);

for(i=0;i<10;i++)
{
min=0;/*假设第一是最小的*/
if(s[min]>s[i])
{
min=i; /*i比当前min记录的值要小就记录下i的下标*/
}
}
printf("交换前最小值是:%d,最小值下标是:%d\n",s[min],min);
/*比较完后再交换最前面与min记录的最小值就行了*/

printf("交换后的10个数序列:\n");
s[0]=s[0]+s[min];
s[min]=s[0]-s[min];
s[0]=s[0]-s[min];

/*输出来看看*/
for(i=0;i<10;i++)
printf("%d\t",s[i]);
printf("\n");
printf("交换后最小值是:%d,最小值下标是:%d\n",s[0],0);
}
你做的是碰到有小的就跟他交换,所以会出现那种情况!本回答被提问者采纳
第2个回答  2008-12-09
#include <stdio.h>
main()
{
int j,min,i,s[10];
printf(" 求最小数并交换到最前面\n\n");
printf("请输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&s[i]);
printf("交换后的10个数序列:\n");

for(i=0;i<10;i++)
{
if(s[0]>s[i])
{
min=s[i];
s[i]=s[0];
s[0]=min;
j=i;
}
}
这个for循环的意思是从i=0开始,只要找到一个s[i]比s[0]小就做交换。比如i=1时,碰见12,就把12和34交换,所以最后出现那种结果很自然。

s[i]=min;
for(i=0;i<10;i++)
printf("%d\t",s[i]);
printf("\n");
printf("最小值是:%d,最小值下标是:%d\n",min,j);
}
第3个回答  2008-12-09
给个最佳答案吧:

[42@c-cpp]$ cat test.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
int s[10] = {34, 12, 45,78, 21, 18, 38, 29, 48, 10};
int min, i;

for (i = min = 0; i < 10; i++) if(s[min] > s[i]) min = i;

int t = s[min]; s[min] = s[0]; s[0] = t;

for(i=0;i<10;i++) printf("%d ",s[i]);
printf("\n最小值是:%d,最小值下标是:%d\n",s[0], min);
return 0;
}
[43@c-cpp]$ gcc test.c
[44@c-cpp]$ ./a.out
10 12 45 78 21 18 38 29 48 34
最小值是:10,最小值下标是:9
第4个回答  2008-12-09
#include <stdio.h>
main() {
int min,i,n,s[10],t;
for(i=0;i<10;i++)
scanf("%d",&s[i]);
min=s[0];
for(i=0;i<10;i++) {
if(min>s[i]){
min=s[i];
n=i; }
}
t=s[0];
s[0]=s[n];
s[n]=t;
for(i=0;i<10;i++)
printf("%d\t",s[i]);
printf("\n");
printf("min=%d,position=%d\n",min,n);
}
相似回答