(C语言)判断表达式中括号是否匹配考生管理系统(链表)-洋葱先生-杨少通
注:本程序由Visual Studio 2015编写,与VC++6.0稍有区别,复制到VC++6.0注释掉“#include “stdafx.h””即可运行,复制到VS可直接运行。
#include “stdafx.h”
#include “iostream”
#include “string”
#define OK 1
#define ERROR 0
using namespace std;
typedef int status;
typedef struct {
int examnum;string name;string gender;int age;int Chinese;int Maths;int English;float everage;int sum;
}ElemType;
typedef struct LNode {
ElemType data;struct LNode *next;
}LNode, *LinkList;
LinkList L;
void CreateList(LinkList &L, int n);
status ListInsert(LinkList &L, int i, ElemType e);
status ListDelete(LinkList &L, int i, ElemType &e);
int LocateElem(LinkList L, ElemType e);
status GetElem(LinkList L, int i, ElemType &e);
int ListLength(LinkList L);
void ListTraverse(LinkList L);
void UpdateByNo(LinkList &L, int examnum);
void Operation();
void Flunk(LinkList L, int i);
void Ranking(LinkList &L);
//创建考生信息的线性表(带头结点的单链表)
void CreateList(LinkList &L, int n) {
L = new LNode; //新结点L->next = NULL; //头结点 空ElemType e;LinkList s, p = L;cout << endl << "\t初始化链表完成并生成了头结点!" << endl;for (int i = 0; i < n; i++) {s = new LNode;cout << "\t请输入第" << i + 1 << "个考生的信息:" << endl;cout << "\t 准考证号:"; cin >> s->data.examnum;cout << "\t 考生姓名:"; cin >> s->data.name;cout << "\t 考生性别:"; cin >> s->data.gender;cout << "\t 考生年龄:"; cin >> s->data.age;cout << "\t 语文成绩:"; cin >> s->data.Chinese;cout << "\t 数学成绩:"; cin >> s->data.Maths;cout << "\t 英语成绩:"; cin >> s->data.English;s->data.sum = s->data.Chinese + s->data.English + s->data.Maths;s->data.everage = s->data.sum / 3.0;p->next = s;p = s;}p->next = NULL;
}
//在线性表的某个位置上插入考生信息
status ListInsert(LinkList &L, int i, ElemType e) {
LinkList p = new LNode;p = L;//p指向头结点int j = 0;while (p&&j < i-1){p = p->next;++j;}if (!p&&j > i-1){cout << endl << "\t插入失败" << endl << endl;return ERROR;}LNode *s;s = new LNode;s->data = e;s->next = p->next;p->next = s;cout << endl << "\t插入成功" << endl << endl;return OK;
}
//删除线性表中第i个考生的信息
status ListDelete(LinkList &L, int i, ElemType &e) {
LinkList p = new LNode;LinkList q = new LNode;p = L;int j = 0;while (p->next&&j < i-1) {p = p->next; j++;}if (!(p->next) || j > i-1) {return ERROR;}q = p->next;p->next = q->next;e = q->data;delete q;return OK;
}
//根据考号查询某考生的位序
int LocateElem(LinkList L, ElemType e) {//在带头结点的单链表L中查找元素e
int i = 1, length = 0;LinkList p = new LNode;p = L->next;while ((i <= ListLength(L)) && (e.examnum != p->data.examnum)){i++;p = p->next;}if (i <= ListLength(L) && (e.examnum == p->data.examnum))return i;return 0;
}
//根据位序查询线性表中的考生信息
status GetElem(LinkList L, int i, ElemType &e) {
LinkList p = new LNode;p = L->next;int j = 1;while (p&&j < i) {p = p->next;j++;}if (!p || j > i)return ERROR;e = p->data;return OK;
}
//求线性表的长度
int ListLength(LinkList L) {
int length = 0;LinkList p = new LNode;p = L->next;while (p) {length++;p = p->next;}return length;
}
//输出线性表中的考生信息
void ListTraverse(LinkList L) {
int i = 1;LNode *p = L->next;cout << endl << "\t考生信息如下:" << endl;while (p){cout << "\t第" << i << "个考生的信息为:" << endl;cout << "\t 准考证号:" << p->data.examnum << endl;cout << "\t 考生姓名:" << p->data.name << endl;cout << "\t 考生性别:" << p->data.gender << endl;cout << "\t 考生年龄:" << p->data.age << endl;cout << "\t 语文成绩:" << p->data.Chinese << endl;cout << "\t 数学成绩:" << p->data.Maths << endl;cout << "\t 英语成绩:" << p->data.English << endl;cout << "\t 平均成绩:" << p->data.everage << endl;cout << "\t 总成绩:" << p->data.sum << endl << endl;p = p->next;i++;}cout << "\t输出完毕!" << endl << endl;
}
//根据考号修改线性表中的考生信息
void UpdateByNo(LinkList &L, int examnum) {
LinkList p = new LNode;p = L->next;int i = 1;while (p&&p->data.examnum != examnum) {p = p->next;i++;}if (i <= ListLength(L) && (examnum == p->data.examnum)) {cout << "\t请重新输入该考生的信息:" << endl << endl;cout << "\t 准考证号:"; cin >> p->data.examnum;cout << "\t 考生姓名:"; cin >> p->data.name;cout << "\t 考生性别:"; cin >> p->data.gender;cout << "\t 考生年龄:"; cin >> p->data.age;cout << "\t 语文成绩:"; cin >> p->data.Chinese;cout << "\t 数学成绩:"; cin >> p->data.Maths;cout << "\t 英语成绩:"; cin >> p->data.English;p->data.sum = p->data.Chinese + p->data.Maths + p->data.English;p->data.everage = p->data.sum / 3.0;cout << endl << "\t修改成功!" << endl << endl;}else cout << endl << "\t学号有误!" << endl << endl;
}
void Flunk(LinkList L, int i) {
LinkList p = new LNode;p = L->next;int flunkNum = 0;switch (i){case 1:cout << "\t 语文不及格名单如下:" << endl << endl;while (p) {if (p->data.Chinese < 60) {cout << "\t\t姓名:" << p->data.name;cout << " 语文:" << p->data.Chinese << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t 语文成绩全部及格!" << endl << endl;break;case 2:cout << "\t 数学不及格名单如下:" << endl << endl;while (p) {if (p->data.Maths < 60) {cout << "\t\t姓名:" << p->data.name;cout << " 数学:" << p->data.Maths << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t 数学成绩全部及格!" << endl << endl;break;case 3:cout << "\t 英语不及格名单如下:" << endl << endl;while (p) {if (p->data.English < 60) {cout << "\t\t姓名:" << p->data.name;cout << " 英语:" << p->data.English << endl << endl;flunkNum++;}p = p->next;}if (!flunkNum)cout << "\t 英语成绩全部及格!" << endl << endl;break;default:cout << endl << "\t 输入有误!" << endl << endl;break;}
}
void Ranking(LinkList &L) {
LinkList p = new LNode, q = new LNode;ElemType e;p = L->next;for (int i = 0; i < ListLength(L); i++) {if (p->next)q = p->next;for (int j = i + 1; j < ListLength(L); j++) {if (p->data.sum < q->data.sum) {e = p->data;p->data = q->data;q->data = e;}if (q)q = q->next;}if (p)p = p->next;}
}
void Operation() {//用户可以循环选择操作类型
int j = -1;while (j) {cout << "\t 1为插入\t\t 2为删除\t\t 3为查找" << endl;cout << "\t 4为修改\t\t 5为统计\t\t 6列出成绩单" << endl;cout << "\t 7查询不及格成绩\t 8根据总分排名\t\t 0为退出" << endl;cout << endl << " 请选择您要进行的操作:";cin >> j;cout << endl;switch (j) {case 1: { //插入cout << " 请输入你要插入的考生的位置:";int i; cin >> i;ElemType e;cout << " 请输入考生信息:" << endl << endl;cout << "\t 准考证号:"; cin >> e.examnum;cout << "\t 考生姓名:"; cin >> e.name;cout << "\t 考生性别:"; cin >> e.gender;cout << "\t 考生年龄:"; cin >> e.age;cout << "\t 语文成绩:"; cin >> e.Chinese;cout << "\t 数学成绩:"; cin >> e.Maths;cout << "\t 英语成绩:"; cin >> e.English;e.sum = e.Chinese + e.Maths + e.English;e.everage = e.sum / 3.0;ListInsert(L, i, e);break;}case 2: {//删除cout << " 请输入你要删除的考生的考号:";ElemType e; cin >> e.examnum;int i = LocateElem(L, e);if (i)if (ListDelete(L, i, e))cout << endl << " 删除成功!" << endl << endl;elsecout << endl << " 删除失败!" << endl << endl;else cout << endl << " 不存在此考生!" << endl << endl;break;}case 3: {//查找cout << " 请输入你要查询的考生的序号:";int i; ElemType e; cin >> i;if (GetElem(L, i, e)) {cout << "\t第" << i << "个考生的信息为:" << endl;cout << "\t 准考证号:" << e.examnum << endl;cout << "\t 考生姓名:" << e.name << endl;cout << "\t 考生性别:" << e.gender << endl;cout << "\t 考生年龄:" << e.age << endl;cout << "\t 语文成绩:" << e.Chinese << endl;cout << "\t 数学成绩:" << e.Maths << endl;cout << "\t 英语成绩:" << e.English << endl << endl;}else{cout << "\t 序号有误!" << endl << endl;}break;}case 4: {//修改cout << " 请输入你要修改信息的考生的考号:";int examnum;cin >> examnum;UpdateByNo(L, examnum);break;}case 5: {//统计cout << "\t 报考人数为:" << ListLength(L) << endl << endl;ListTraverse(L);break;}case 6:ListTraverse(L); break;//输出case 7://列出不及格成绩cout << "\t 1语文\t 2数学\t 3英语" << endl << endl;cout << "\t请输入您要查询不及格科目的序号:";cin >> j;Flunk(L, j);break;case 8://根据总分排名Ranking(L);cout << endl << " 排名完成!成绩单如下:" << endl << endl;ListTraverse(L);break;case 0: return;default:cout << endl << "该操作不存在,请输入正确操作!" << endl << endl;break;}}
}
//主函数,调用各个函数实现相应功能
void main() {
int n;cout << "\t\t\t\t*\t\t\t\t\t*";cout << endl << "\t\t\t\t*\t计科1512-02210151232-杨少通\t*" << endl;cout << "\t\t\t\t*****************************************" << endl << endl;cout << " 正在为您准备初始化链表,请输入您要输入的学生个数:";cin >> n;CreateList(L, n);//创建初始链表cout << endl << " 初始化成功," << n << "个考生的信息已存储。" << endl << endl;Operation();
}
本人初学数据结构,代码存在诸多问题,请各位看客多多指正。
(C语言)判断表达式中括号是否匹配考生管理系统(链表)-洋葱先生-杨少通相关推荐
- (C语言)十进制转换成R进制-洋葱先生-杨少通
注:本程序由Visual Studio 2015编写,与VC++6.0稍有区别,复制到VC++6.0注释掉"#include "stdafx.h""即可运行,复 ...
- 函数:判断表达式括弧是否匹配
[问题描述]编写算法函数:判断一表达式中的括号是否配对,包括中括号[].小括号()两种类型. [输入形式]输入一个只包含中括号和小括号的字符串. [输出形式]输出匹配结果:若匹配,输出match,如输 ...
- 栈应用:判断字符串中括号是否成对出现
练习题目 利用栈先将后出的特性,判断字符串中的数字表达式括号是否成对匹配,如果没有给出错误位置信息提示. 代码实现 代码思路很简单,如果是左括号将左括号 就入栈,遇到右括号 栈中的左括号出栈.如果该出 ...
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- 判断语句_如何学好C语言判断语句?攻略if语句是第一步
C语言,是全球使用最多的编程语言.上次我们谈到了switch语句,但在C语言中,if条件构成的选择结构程序很重要.在实际问题中,往往需要对不同变量进行比较,然后分别执行不同的语句.如何使用if语句呢? ...
- c语言如何求一个数学表达式的值,浅谈C语言中表达式的求值
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C语言研究性学习的路线 现行的多数C语言教材有太多的误区,不仅不能给读者提供有效的学习线索,还常常"误导"读者,于是,"死记 ...
- c语言中c为字符型便量,c='97'是否正确,C语言判断题Word版
<C语言判断题Word版>由会员分享,可在线阅读,更多相关<C语言判断题Word版(3页珍藏版)>请在人人文库网上搜索. 1.传播优秀Word版文档 ,希望对您有帮助,可双击去 ...
- 13c语言中的文件是一种流式文件,读写时均以字符为单位.,C语言判断题部分.doc...
C语言判断题部分 ?第一章 C语言中,字符数据用格式说明"%c"来输出,字符串数据用格式说明"%s"来输出.TC语言中,关键字及编译预处理命令用小写字母书写.T ...
- c语言表达式10 amp 6等于多少,C语言基础——表达式
目录 回顾: 一.定义概念: 二.表达式的分类 举例说明: (一)首先是加.减.乘.除.取余四种表达式: (二)一元表达式 (三)强制转换表达式 (四)判断表达式 (五)逻辑表达式 (六)移位表达式 ...
最新文章
- python开发工程师面试题-超实用面试必看,Python工程师面试题
- CSDN添加自定义栏目
- Numpy 生成随机数和乱序
- 深入了解DSP与ARM的区别与联系
- settimeout( )是全局函数吗_JS函数的执行
- python个人网站系统_利用基于Python的Pelican打造一个自己的个人纯静态网站
- 信息学奥赛一本通 1397:简单算术表达式求值 | OpenJudge NOI 1.12 01:简单算术表达式求值
- 亚马逊技能开发入门_Amazon QuickSight入门
- 计算机专业大学计划,计算机专业大学生职业生涯规划
- 图片相似度识别在线_玩转腾讯词向量:词语相似度计算和在线查询
- 下列哪项不属于以太网交换机的特点_钢筋混凝土结构的特点及配筋要求考点,每天几分钟,轻松学二建...
- JavaScript高级程序设计(第3版)中文在线阅读,也可以免费下载~
- js获取IP地址的4种方法
- Ubuntu下WIFI不稳定问题
- 风变python培训班学费一般多少
- cmd怎么进入linux系统时间,在LINUX的命令提示符及CMD命令提示符中显示时间
- 左除与右除的区别--MATLAB
- vs调试详解(一)(小白教程)
- Object-Oriented Design Heuristics (zz)
- MATLAB输入、导入方式(手动输入,TXT文件,Excel导入)