C语言 简单排序的问题,求数据结构 c语言大神!!!

编译,组建都没有错误,关键就是输入了之后不输出,可能是输出那块错了,但不知道咋改,求大神解答!代码如下:#include<stdio.h>#include<stdlib.h> #define MaxLen 100typedef struct{ int num; float score;}stu;typedef stu DataType;typedef struct{ DataType data[MaxLen+1]; int length;}SeqList;void CreatList(SeqList *L){ int i,k,n; printf("请输入学生人数(小于等于%d):\n",MaxLen); scanf("%d",&n); i=1; while(n>MaxLen) { if(i<3)/*给三次输入机会*/ { printf("储存空间不足,请重新输入学生人数:\n"); scanf("%d",&n); i++; } else { printf("输入数据不正确,程序将退出!"); exit(1); } } printf("请输入学生学号(int)和成绩(float):\n"); for(i=1;i<=n;i++) scanf("%d%f",&L->data[i].num,&L->data[i].score); L->length=n; return;}void SelectSort(SeqList *L){ int i,j,k; for(i=1;i<L->length;i++) { k=i; for(j=i+1;j<=L->length;i++) if(L->data[j].score>L->data[k].score) k=j; if(i!=k) { L->data[0]=L->data[k]; L->data[k]=L->data[i]; L->data[i]=L->data[0]; } }}void PrintList(SeqList *L){ int i; printf("学生学号和成绩分别为\n"); for(i=1;i<=L->length;i++)/*输出的时候可以让等于n,因为长度会加1,从1开始的*/ printf("%d %5.2f\n",L->data[i].num,L->data[i].score); return;}int main(){ int i; SeqList *L; L=(SeqList*)malloc(sizeof(SeqList)); CreatList(L); SelectSort(L); PrintList(L); return 0;}在线等,希望给出解释。 跪求 跪求,来自学渣的请求

因为你的排序函数有问题,导致代码一直在排序函数中死循环,不能执行后边的输出。我改了下。

#include<stdio.h>
#include<stdlib.h> 
#define MaxLen 100
typedef struct{
int num;
float score;
}stu;
typedef stu DataType;
typedef struct{
DataType data[MaxLen+1];
int length;
}SeqList;
void CreatList(SeqList *L) {
int i, k, n;
printf("请输入学生人数(小于等于%d):\n", MaxLen);
scanf("%d", &n);
i = 0;//三次机会的话i从0开始,或者判断条件改为i<=3
while (n > MaxLen) {
if (i < 3)/*给三次输入机会*/ {
printf("储存空间不足,请重新输入学生人数:\n");
scanf("%d", &n);
i++;
}
else {
printf("输入数据不正确,程序将退出!");
exit(1);
}
}
printf("请输入学生学号(int)和成绩(float):\n");
for (i = 0; i < n; i++) {//使用数组时循环变量从0开始,或者数组下标从i-1开始,否则会导致L->data[0]空数据。
scanf("%d%f", &L->data[i].num, &L->data[i].score);
L->length = n;
}
return;
}
/*void SelectSort(SeqList *L) {
int i, j, k;
for (i = 1; i<L->length; i++) {
k = i;
for (j = i + 1; j <= L->length; i++)
if (L->data[j].score>L->data[k].score)
k = j;
if (i != k) {
L->data[0] = L->data[k];
L->data[k] = L->data[i];
L->data[i] = L->data[0];
}
}
}*/
void SelectSort(SeqList *L) {
int i, j;
DataType temp;
for (i = 0; i < L->length-1; i++) {
for (j = 0; j < L->length - 1-i; j++) {
if (L->data[j].score<L->data[j+1].score) {
temp= L->data[j] ;
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
return;
}
void PrintList(SeqList *L){
int i;
printf("学生学号和成绩分别为\n");
for (i = 0; i < L->length; i++) {//从0开始录入,所以从0开始输出
printf("%d %5.2f\n", L->data[i].num, L->data[i].score);
}
return;
}
int main(){
int i;
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
CreatList(L);
SelectSort(L);
PrintList(L);
system("pause");
return 0;
}

追问

好的,谢谢亲!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-24

这程序有一个错误和一个警告。

错误:函数SelectSort的定义函数体中,内循环

for(j=i+1;j<=L->length;i++)    //出错,应将i改为j;

警告:数组下标最好从0开始:         1.养成习惯

2.函数SelectSort的排列可以在函数内再定义个DateType t;作为交换,而不是用个全局变量.

追问

可是,数组为0的是哨兵呀,中转站,往里存东西用。亲,可以把改好后的代码发给我么!

本回答被提问者采纳
相似回答