我刚学编程,现在在学C语言,有段代码过不去了,请达人指点一二!

来源:百度知道 编辑:UC知道 时间:2024/05/20 15:31:37
#include<stdio.h>
#define N 5
void sort(int A[N])//用以对输入数据进行排序的函数
{
int i,j,value;
for(i=0;i<=N;i++)
{
for(j=0;j<=N-i-1;j++)
{
if(A[j]<=A[j+1])
{
value=A[j];
A[j]=A[j+1];
A[j+1]=value;
}
}
}
}
void main()
{
int Array01[N],i;
char c;
printf("请输入一组数据:");
for(i=0;i<N;i++)
{
scanf("%d",&Array01[i]);
}
printf("你刚才一共输入了 %d 个数据\n",i+1);
printf("请问是否进行排序?(Y/N)\n");
fflush(stdin);
while((c=getchar())=='y'||(c=getchar())=='Y')
{
sort(Array01);
printf("排序后的数据为:");
for(i=0;i<N;i++)
{
printf("%d ",Array01[i]);
}
printf("\n");
break;

排序错了
for(i=0;i<N-1;i++) //N要是等于5,你比较4次就可以了.所以小于N-1
{
for(j=0;j<=N-i-2;j++)//这个最终是要取j+1的,所以j要到该比较的元素当中的倒数第二个元素,你慢慢理解吧,复习下冒泡法.下面没什么错误.
{
if(A[j]<=A[j+1])
{
value=A[j];
A[j]=A[j+1];
A[j+1]=value;
}
另外,主函数有一处错误;
printf("你刚才一共输入了 %d 个数据\n",i+1);应该为i;
你这个语句是在循环之后执行的,此时的i已经自加,因为不满足循环条件了才退出循环而执行下面的语句的,比如你输入i<5时循环,那么当i一直自加为5,就会跳出了,实际上此时i的值已经为5的,你再输出i+1肯定多了一个.

把fflish(stdin)去掉吧。
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃
在试试看吧

sort函数循环条件为for(i=0;i<N;i++)