一道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]);
}
} 展开
#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]);
}
} 展开
2个回答
展开全部
这段代码并不是输入任何一组数据都会出现错误,如果输入: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、所以就会出现输出时与输入时一样
原因是这样的:
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、所以就会出现输出时与输入时一样
展开全部
#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]);
}
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]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询