编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现: (1) 根据输入信息创建单链表。每个学生的信息包括姓名和成绩(输入保持成绩升序); (2) 输入一个新增的学生信息,将其插入链表中并使链表保持升序; (3) 输出新增之后简易学生信息管理系统/单链表的所有学生/结点信息。 输入格式: 根据输入的若干个学生信息创建单链表。每一行代表一个学生信息,以成绩-1作为输入的结束;最后一行为将插入的学生信息。 输出格式: 每个学生信息占一行,姓名和成绩之间以空格分隔,成绩保留一位小数。用c语言

时间: 2023-06-02 22:07:06 浏览: 116
来实现该系统,你需要进行如下步骤: 1. 定义结构体类型,包含学生姓名和成绩两个字段; 2. 定义单链表结构体,包含一个指向头结点的指针; 3. 定义创建单链表的函数,根据输入信息创建单链表,并使链表按成绩升序排列; 4. 定义插入新节点的函数,将输入的新增学生信息插入链表,并使链表仍然保持成绩升序排列; 5. 定义输出所有节点信息的函数,按要求输出简易学生信息管理系统/单链表的所有学生/节点信息; 6. 在main函数中调用上述函数实现该系统。 下面是具体的C代码实现: #include <stdio.h> #include <stdlib.h> #include <string.h> //定义学生结构体类型 typedef struct student{ char name[20]; //姓名 float score; //成绩 }Student; //定义单链表结构体 typedef struct node{ Student stu; //学生信息 struct node* next; //指向下一个节点的指针 }Node, *LinkList; //创建单链表,返回指向链表头结点的指针 LinkList CreateList(){ LinkList head = (LinkList)malloc(sizeof(Node)); //创建头结点 head->next = NULL; //头结点next字段设为NULL Node *p = head; //p指向尾节点 Student stu; while(1){ //循环输入学生信息 scanf("%f", &stu.score); if(stu.score == -1) break; //输入-1表示结束 scanf("%s", stu.name); //在链表尾部插入新节点,并使链表保持升序排序 Node *s = (Node*)malloc(sizeof(Node)); //创建新节点 s->stu = stu; //赋值学生信息 s->next = NULL; //新节点next字段设为NULL while(p->next && p->next->stu.score < stu.score){ p = p->next; //找到链表中第一个score大于stu.score的结点前的结点 } s->next = p->next; //插入新节点 p->next = s; p = head; //重置p指向头结点 } return head; } //插入新节点,将学生信息stu插入到链表head中,并使链表按成绩升序排列 void InsertNode(LinkList head, Student stu){ Node *s = (Node*)malloc(sizeof(Node)); //创建新节点 s->stu = stu; //赋值学生信息 s->next = NULL; //新节点next字段设为NULL Node *p = head; while(p->next && p->next->stu.score < stu.score){ p = p->next; //找到链表中第一个score大于stu.score的结点前的结点 } s->next = p->next; //插入新节点 p->next = s; } //输出链表中所有节点的信息 void PrintList(LinkList head){ Node *p = head->next; //从头节点的下一个节点开始遍历 printf("简易学生信息管理系统/单链表的所有学生/结点信息:\n"); while(p){ printf("%s %.1f\n", p->stu.name, p->stu.score); p = p->next; } } int main(){ LinkList head = CreateList(); //创建链表 Student stu; scanf("%f", &stu.score); scanf("%s", stu.name); InsertNode(head, stu); //插入新节点 PrintList(head); //输出链表中所有节点的信息 return 0; }

相关推荐

最新推荐

C++通过自定义函数找出一个整数数组中第二大数的方法

主要介绍了C++通过自定义函数找出一个整数数组中第二大数的方法,涉及C++针对数组的遍历操作相关技巧,需要的朋友可以参考下

函数版-简单的学生信息管理系统(python实现)

函数版-简单的学生信息管理系统(python实现)功能如下开始部分增加学生信息修改学生信息删除学生信息查询学生显示所有学生的信息 学了一段时间的python后,自己动手做了一个函数版-简单的学生信息管理系统。 功能...

Python实现调用另一个路径下py文件中的函数方法总结

主要介绍了Python实现调用另一个路径下py文件中的函数方法,结合实例形式总结分析了Python针对不同文件夹中py文件调用操作的处理技巧与相关注意事项,需要的朋友可以参考下

MySQL创建自定义函数有关问题

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled 错误解决办法 ... 原创文章 1获赞 1访问量 11 关注 私信 展开阅读全文

MySQL通过自定义函数实现递归查询父级ID或者子级ID

主要介绍了MySQL通过自定义函数实现递归查询父级ID或者子级ID,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

stc12c5a60s2 例程

stc12c5a60s2 单片机的所有功能的实例,包括SPI、AD、串口、UCOS-II操作系统的应用。

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire

【迁移学习在车牌识别中的应用优势与局限】: 讨论迁移学习在车牌识别中的应用优势和局限

![【迁移学习在车牌识别中的应用优势与局限】: 讨论迁移学习在车牌识别中的应用优势和局限](https://img-blog.csdnimg.cn/direct/916e743fde554bcaaaf13800d2f0ac25.png) # 1. 介绍迁移学习在车牌识别中的背景 在当今人工智能技术迅速发展的时代,迁移学习作为一种强大的技术手段,在车牌识别领域展现出了巨大的潜力和优势。通过迁移学习,我们能够将在一个领域中学习到的知识和模型迁移到另一个相关领域,从而减少对大量标注数据的需求,提高模型训练效率,加快模型收敛速度。这种方法不仅能够增强模型的泛化能力,提升识别的准确率,还能有效应对数据

margin-top: 50%;

margin-top: 50%; 是一种CSS样式代码,用于设置元素的上边距(即与上方元素或父级元素之间的距离)为其父元素高度的50%。 这意味着元素的上边距将等于其父元素高度的50%。例如,如果父元素的高度为100px,则该元素的上边距将为50px。 请注意,这个值只在父元素具有明确的高度(非auto)时才有效。如果父元素的高度是auto,则无法确定元素的上边距。 希望这个解释对你有帮助!如果你还有其他问题,请随时提问。

Android通过全局变量传递数据

在Activity之间数据传递中还有一种比较实用的方式 就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何地方都可以使用和访问 除非是Web服务器停止 Android中的全局对象非常类似于Java Web中的Application域 除非是Android应用程序清除内存 否则全局对象将一直可以访问 1 定义一个类继承Application public class MyApp extends Application 2 在AndroidMainfest xml中加入全局变量 android:name &quot; MyApp&quot; 3 在传数据类中获取全局变量Application对象并设置数据 myApp MyApp getApplication ; myApp setName &quot;jack&quot; ; 修改之后的名称 4 在收数据类中接收Application对象 myApp MyApp getApplication ;">在Activity之间数据传递中还有一种比较实用的方式 就是全局对象 实用J2EE的读者来说都知道Java Web的四个作用域 这四个作用域从小到大分别是Page Request Session和Application 其中Application域在应用程序的任何地方都可以使用和 [更多]