求大神。程序能够得到正确的运行结果,但是接着就提示5.exe已停止工作(出现了一个问题……)
程序代码:#include<stdio.h>
#define N 3 /*定义学生人数*/
struct student /*建立结构体数据类型*/
{
int num; /*学号*/
char name[20]; /*姓名*/
float score[3]; /*3门课成绩*/
float sum; /*总成绩*/
char grade; /*等级*/
};
struct student stu[N]; /*定义结构体数组*/
void QuickSort(float array[],int n);
int main()
{
{/*定义input函数*/
int i;
printf("请输入各学生的信息:学号、姓名、三门课成绩:\n");
for(i=0;i<N;i++)
{
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,
&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); /*输入数据*/
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; /*求每位同学的总分*/
}
}
float Sum[N]; /*定义Sum数组,便于按Sum对学生stu排序*/
int t; /*把stu[].sum赋给Sum[]*/
for(t=0;t<N;t++)
Sum[t]=stu[t].sum;
QuickSort(Sum,N);
printf("num\tname\tscore1\tscore2\tscore3\tsum\tgrede\n"); /*定义输出函数*/
int m;
for(m=0;m<N;m++)
{
printf("%d\t%s\t%-8.1f%-8.1f%-8.1f%-8.1f",stu[m].num,
stu[m].name,stu[m].score[0],stu[m].score[1],
stu[m].score[2],stu[m].sum);
if((m+1)<=N*0.95)
printf("合格\n");
else
printf("不合格\n");
}
return 0;
}
void QuickSort(float array[],int n) /*用快速排序法*/
{
int j=0,k=n-1;
float val=array[0]; /*指定参考值val为第一个同学的数据,一般都指定数组里的第一个,下面实现把比val小的放在val前面,大的放在其后面*/
struct student temp=stu[0];
if(n>1) /*确保数组长度至少为2,否则无需排序*/
{
while(j<k)
{
for(;k>j;k--) /*从后向前搜索比val小的元素,找到后填到array[j]中并跳出循环*/
{
if(array[k]<val)
{
array[j]=array[k];
stu[j]=stu[k];
break;
}
}
for(;j<k;j++) /*从前往后搜索比val大的元素,找到后填到array[k]中并跳出循环*/
{
if(array[j]>val)
{
array[k]=array[j];
stu[k]=stu[j];
break;
}
}
}
array[j]=val; /*将保存在val中的数放到array[i]中*/
stu[j]=temp;
QuickSort(array,j); /*递归,对前j个数排序*/
QuickSort(array+j+1,n-j); /*对j+1到n这n-j个数排序*/
}
}是快速排序的时候出问题了么?但是我是先得到正确的结果,然后提示出错,程序停止运行。









