求大神。程序能够得到正确的运行结果,但是接着就提示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个数排序*/ } }
是快速排序的时候出问题了么?但是我是先得到正确的结果,然后提示出错,程序停止运行。