C语言初学者遇到问题,是关于冒泡法排序算法的。

2024-12-20 17:23:39
推荐回答(3个)
回答1:

1、初始化时你是从数组的 下标为 1 的元素开始的;
for(i=1;i<=n;i++) //i从1 开始的 此时 数组的第0个元素的值还是不确定的
{
printf("%d号的成绩? ",i);
scanf("%f,",&score[i]);
}
2、排序的时候,你引用了数组的第0个元素参与排序,因为 第0个元素值未初始化,排序是 会出现问题
for(j=1;j<=n-1;j++)
for(i=0;i if(score[i] {temp=score[i];score[i]=score[i+1];score[i+1]=temp;}
下面的那个排序也是同样问题
3、最后输出的时候,格式化符号使用有问题,你的数组定义的都是 float 类的,而最后你使用整型的 %d 输出的,这里 会出现问题 ,应该改为
for(i=1;i<=n;i++)
printf("%d ",score[i]); // 应该改为 printf("%f ",score[i]);
4、最好不要在程序中使用 goto ,这个一般是不建议使用的,一般使用 那几种循环就可以实现

回答2:

有两个问题。
一、接收成绩输入时,数组从1下标开始,但是你排序的时候却从0下标开始。
for(i=1;i<=n;i++)
//
改为
for(i=0;i{
printf("%d号的成绩?
",i);
scanf("%.2f,",&score[i]);
}
相应
if(set=='A'||set=='a')
{
for(j=1;j<=n-1;j++)
//改为
for(j=0;j<=n-1;j++)
for(i=0;iif(score[i]{temp=score[i];score[i]=score[i+1];score[i+1]=temp;}
}
二、打印输出时,应该以浮点数输出,因为score定义成了浮点型。
for(i=1;i<=n;i++)
//改为
for(i=0;iprintf("%d
",score[i]);
//改为
printf("%f",score[i]);

回答3:

for(i=1;i<=n;i++)
printf("%d ",score[i]);
修改
for(i=1;i<=n;i++)
printf("%f",score[i]);
试试