一道C语言习题,求高手指出我的错误

我是初学者,在书上看到一个练习题,要求输入10个数,把最小的数和第一个数对调,再输出,这是我写的程序,没有报错,但输出时都是输入的样子,求高手指出错误,希望用一些通俗的语... 我是初学者,在书上看到一个练习题,要求输入10个数,把最小的数和第一个数对调,再输出,这是我写的程序,没有报错,但输出时都是输入的样子,求高手指出错误,希望用一些通俗的语法,谢谢

#include<stdio.h>
int main(){
int a[10];
printf("Please put in 10 nimber:\n");
for(int i=0;i<10;i++){
scanf("%d",&a[i]);
}
int sum1[10]={0};
for(int p=0;p<10;p++){
for(int q=0;q<10;q++){
if(a[p]<a[q]){
sum1[p]+=1;
}
if(sum1[p]==9){
int t=a[p];a[p]=a[0];a[0]=t;
}
}
}

for(int k=0;k<10;k++){
printf("%d ",a[k]);
}
}
展开
 我来答
pt448688943
2013-12-05 · TA获得超过102个赞
知道答主
回答量:56
采纳率:100%
帮助的人:41.4万
展开全部
这段代码并不是输入任何一组数据都会出现错误,如果输入:1,2,3,4,5,6,0,7,8,9的时候,并没有任何问题,但是当输入了:9,8,7,6,5,4,3,2,1,0,会发现输出时都是输入的样子。
原因是这样的:
1、8-9行是2个for循环,两两数字比较,标记最小数。
2、我们直接模拟循环即将结束时,当p=9,q=8是,a[9]=0,a[8]=1,执行第11行,sum1[9]=9(这个应该是sum1第一次出现9的时候)
3、第13行满足条件,执行,这时,a[9]=9,a[0]=0
4、可这时for循环并没有结束,当p=9,q=9时,此时sum1[9]还是等于9
5、故执行第13行,a[9]=0,a[0]=9,将之前数字又切换回来。
6、所以就会出现输出时与输入时一样
dlmulogo
2013-12-05 · 超过13用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:28.1万
展开全部
#include<stdio.h>
void main()
{
int i,k,min,a[10];
printf("请输入10个数");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=0;
for(i=1;i<10;i++)
if(a[min]>a[i])
min=i;
if(min!=0)
{
k=a[0];
a[0]=a[min];
a[min]=k;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式