求问一下该怎么解决这个问题,让代码成功运行

360U2981801782 |浏览682次
收藏|2022/11/08 17:02

满意回答

2022/11/08 17:35

你程序的错是因为你是拼接了链表与结构(原链表的元素应该是int的,现在你改为struct Student了)所以你多个函数的参数不能用int的,且排序比较也不能直接比较(你要按什么数据排序?我帮你改为成绩了)我只是将你的语法错改好了,逻辑上肯定有问题的,特别是输入部分scanf("%d%d", &p, &x);,这个x是个结构体,不是一个简单的值(自己改下),以下是改好的#include <stdio.h>#define MaxLen 10typedef struct Student{ long int studid; char studname[20]; char studsex; int studscore; int studyear;} DataType;typedef struct{ DataType Data[MaxLen]; int Length;} SeqList;void InitList(SeqList *L){ L->Length = 0; printf("初始化顺序表成功!");}//建立顺序表,存储相应的数据void CreateList(SeqList *L, int n){ int i; for (i = 0; i < n + 1; i++) { printf("请输入第%d个元素:", i + 1); printf("请输入学生的学号: "); scanf("%ld", &L->Data[i].studid); printf("请输入学生的姓名: "); scanf("%s", &L->Data[i].studname); printf("请输入学生的成绩: "); scanf("%d", &L->Data[i].studscore); printf("请输入学生的出生年份: "); scanf("%d", &L->Data[i].studyear); scanf("%d", &L->Data[i + 1]); } L->Length = i; printf("建立顺序表成功!");}void ShowList(SeqList *L){ int i; for (i = 0; i < L->Length; i++) { printf("学号: %ld\t", L->Data[i].studid); printf("姓名: %s\t", L->Data[i].studname); printf("成绩: %d\t", L->Data[i].studscore); printf("出生年份: %d\t", L->Data[i].studyear); printf("\n"); } for (i = 1; i <= L->Length - 1; i++) { printf("%d->", L->Data[i]); } printf("%d", L->Data[i]);}int InsertElement(SeqList *L, int i, DataType x){ int j; if (L->Length >= MaxLen) { printf("顺序表已满!"); return -1; } if (i < 1 || L->Length) { printf("插入位置出错!"); return 0; } if (i == L->Length + 1) { L->Data[i - 1] = x; L->Length++; return 1; } for (j = L->Length - 1; j >= i - 1; j--) { L->Data[j + 1] = L->Data[j]; } L->Data[i - 1] = x; L->Length++; return 1;}int DelElement(SeqList *L, int i, DataType *x){ int j; if (L->Length == 0) { printf("顺序表为空!"); return 0; } if (i < 1 || i > L->Length) { printf("不存在第%d个元素", i); return 0; } *x = L->Data[i - 1]; for (j = i; j < L->Length; j++) { L->Data[j - 1] = L->Data[j]; } L->Length--; return 1;}void InsertSort(SeqList *sl){ int i, j; for (i = 2; i < sl->Length; i++) { sl->Data[0] = sl->Data[i]; j = i - 1; while (sl->Data[0].studscore < sl->Data[j].studscore) { sl->Data[j + 1] = sl->Data[j]; j = j - 1; } sl->Data[j + 1] = sl->Data[0]; }}void BubbleSort(SeqList *sl){ int i, j, exchange; DataType temp; int n = sl->Length; for (i = 1; i < n; i++) { exchange = 0; for (j = 1; j <= n - i; j++) if (sl->Data[j].studscore > sl->Data[j + 1].studscore) { temp = sl->Data[j]; sl->Data[j] = sl->Data[j + 1]; sl->Data[j + 1] = temp; exchange = 1; } if (exchange == 0) return; }}void Menu(){ printf("\n========================= "); printf("\n 206130141 李苗 "); printf("\n========================= "); printf("\n 顺序表的各种操作 "); printf("\n========================= "); printf("\n| 1--建立顺序表 |"); printf("\n| 2--插入元素 |"); printf("\n| 3--删除元素 |"); printf("\n| 4--显示顺序表所有元素 |"); printf("\n| 5--初始化顺序表 |"); printf("\n| 6--求顺序表的长度 |"); printf("\n| 7--直接排序 |"); printf("\n| 0--返回 |"); printf("\n========================= "); printf("\n 请输入菜单号(0-7):");}int main(int argc, char *argv[]){ int menid, n, p; SeqList *s, st, stuList, *L; DataType x,*val,m; s = &st; L = &stuList; val = &m; Menu(); scanf("%d", &menid); while (1) { switch (menid) { case 1: printf("建立顺序表\n"); printf("请输入顺序表元素个数: "); scanf("%d", &n); CreateList(L, n); break; case 2: printf("插入元素\n"); printf("请输入要插入的位置和值: "); scanf("%d%d", &p, &x); //这里的x要输入Student的每个值的 InsertElement(L, p, x); break; case 3: printf("删除元素\n"); printf("请输入要删除的位置: "); scanf("%d", &p); DelElement(L, p, val); printf("已成功删除元素%d\n", *val); break; case 4: printf("显示顺序表所有元素\n"); ShowList(L); break; case 5: printf("初始化顺序表\n"); InitList(L); break; case 6: printf("求顺序表的长度\n"); printf("该顺序表的长度是%d个元素\n", L->Length); break; case 7: printf("对顺序表进行直接插入排序"); InsertSort(L); break; InsertSort(L); break; case 0: printf("退出程序\n"); return 0; break; } printf("\n请输入菜单号 (0-7): "); scanf("%d", &menid); } return 0;}

whoami1978

其他回答(0)
0人关注该问题
+1

 加载中...