WSS_ 2019-12-28 17:10 采纳率: 37.5%
浏览 113
已结题

紧急求助,为什么只能输出一组数据?

/*Q4609.(10分)建立学生成绩管理系统,对学生以下信息: 学号、名字、成绩(语文、数学、外语) 进行管理。要
求利用结构体变量记录每名学生的学号、名字、成绩(语文、数学、外语),并建立单向链表来存放学生的信息。
功能实现要求如下:
(1)写函数Append ()实现使用单链表来添加学生的信息。√
(2)写函数DisLink()输出所有学生的信息。 √
(3)写函数Sort()对学生成绩进行排序。
(4)写DeleteMemory()函数释放链表所占内存空间 √
其中结构体类型定义如下:
struct stu
{
char ID[12];//学号
char name[20];//姓名
int c1;//语文成绩
int c2;//数学成绩
int c3;//英语成绩
struct stu * next;
}
测试用例如下:
1 增加数据
2 退出
选择:1
请输入学号:001
请输入名字:张三
请依次输入语文,数学外语成绩:88 89 90
1 增加数据
2 退出
选择:1
请输入学号:0*/
#include
#include
struct stu

{

char ID[12];//学号 
char name[20];//姓名 
int c1;//语文成绩 
int c2;//数学成绩 
int c3;//英语成绩 
struct stu * next; 

};

struct stu*Append()
{

struct stu*pHead=NULL,*pNew=NULL,*pTail=NULL;
pNew=(struct stu*)malloc(sizeof(struct stu));//给一个stu分配空间! 
int i=0;
int a;
printf("1 增加数据\n");
printf("2 退出\n");
printf("选择");
scanf("%d",&a);

for(i=0;i<100;i++)
{
    if(a==1) 
    {   
    printf("请输入学号:");
    scanf("%s",&pNew->ID);
    printf("请输入名字:");
    scanf("%s",&pNew->name);
    printf("请依次输入语文,数学,外语成绩:");
    scanf("%d%d%d",&pNew->c1,&pNew->c2,&pNew->c3);
    if(pHead==NULL) 
        pHead=pNew;
    else
        pTail->next=pNew;
    pTail=pNew;
    pNew->next=NULL;
    printf("1 增加数据\n");
    printf("2 退出\n");
    printf("选择");
    scanf("%d",&a); 
    getchar();           //吞掉回车,不然的话回车会进入gets.gets直接结束 
    }
    else break; 
 } 
return pHead;       

}

void DisLink(struct stu *pHead)

{

struct stu*p=pHead;
int n=1;
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)
{
    int sum=p->c1+p->c2+p->c3;
    printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,sum);
    p=p->next;
    n++;
}

}

void Sort(struct stu*pHead)
{

int n=0;
struct stu *p,*q,*t;
p=pHead;
while(p!=NULL)
{
    p->next=q;
    if((p->c1+p->c2+p->c3)>(q->c1+q->c2+q->c3))
    {
        t=p,p=q,q=p;
    }
    p=p->next;
}
printf("排序后\n");
printf("序号\t学号\t名字 \t语文\t数学\t外语\t总分\n");
while(p!=NULL)
{

    printf("%d\t%s\t%s\t%d\t%d\t%d\t%d\n",n,p->ID,p->name,p->c1,p->c2,p->c3,p->c1+p->c2+p->c3);
    p=p->next;
    n++;
}   

}
void DeleteMemory(struct stu* pHead)

{

struct stu *p;
while (NULL != pHead)
{
    p = pHead;
    pHead = pHead->next;
    free(p);  // 下一个节点        free(Pointer);
}

}
int main()
{

struct stu *p;
p=Append();
DisLink(p);
Sort(p);
DeleteMemory(p);
return 0;

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 2月7日

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!