C++综合应用实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意:输入的结束条件如何设计?
void input() (6)在学生信息的未,通过文件f,追加学生信息。 void app(char *f) (7)保存到文件f中。 void save(char *f)
给出每个函数的具体实现
同学们自己给出各函数的源代码。
设计主函数,实现系统所要求的功能
定义有关的对象
(c ) 插入第一个结点
尾插法建表图示
在头结点之后插入一个新结点
void LinkList::insert(int a) { ListNode *temp; temp=new ListNode; temp->data=a; temp->next=0; temp->next=first->next; first->next=temp; }
data
next
一个链表中,有几个数据元素呢?
如何定义(申明)一个链表呢?
一个链表一般只要告诉该链表的头指针即可。
定义链表:
struct ListNode *first
该链表所有的操作,全部是从“first”开始, 并且,该指针永远指向第一个位置。
一个链表是如何形成呢?
一个链表的形成,一般需要两步:
}
单链表插入算法 (第i节点前插入)
pre
L a1 … ai-1 ai … an
e s (b) 申请新的结点
(a) 寻找第 i-1 个结点
pre
L a1 … ai-1 ai … an
②a i-1 与 ai 断 链,插入 e: s pre->next=s;
e
① 与 ai 连链: s->next=pre->next
first s s 指向新申请的结点 s->data=c 1 (c) 插入第一个结点 last=s c2 c1 first c1
c1 ( a ) 建空表 first
last
(b) 申请新结点并赋值
ci-1 …
ci
s 执行的语句组为:s->next=first->next;first->next=s; (d) 插入第i个元素
关于该设计题目的有关问题与分析:
(1)采用的程序设计方法的选择? A)面向结构的设计方法? B)面向对象的设计方法? (2)运行界面的选择? A) DOS界面的设计? B) 图形界面(Windows界面)? (3)数据类型的定义 (结构体或类的定义)
(4)(数据结构的定义)存放数据的方式 顺序表(数组存放一个班学生信息) 链表(利用指针存放一个班的学生信息)
查找单链表中第i个结点算法
ListNode * FindIndex(const int i) { ListNode *p if( i == -1) return first; p=first->next; // int j=0;
while( p !=NULL && j < i ) { p=p->next; j++; } return p;
public:
分析:关于班级类,该有哪些函数成员?
};
班级类,函数成员的定义与实现
public: (1) 构造函数的定义: 利用参数传递,形成班级 由数组s中,n各学生,形成班级 bj(st s[] int n);
有键盘输入形成班级 学生信息的输入(输入的结束条件如何设计?) bj();
有文件导入,形成班级; 从文件f中导出学生信息, bj(char *f)
该题目的分析与设计:
本题目可以采用4种方式实现:
(1)采用面向结构的程序设计方法,用顺序表(数组和结构 体),DOS界面。 (2)采用面向结构的程序设计方法,用链表(指针和结构体), DOS界面 (3)采用面向对象的程序设计方法,用顺序表(定义顺序表 类),DOS界面 (4)采用面向对象的程序设计方法,用链表(定义链表类), DOS界面
(c) 插入
单链表插入算法
ListNode * Insert(int value, int i) { ListNode *p,*q; q = new ListNode; q->data = value; p = FindIndex(i-1); if(p == NULL ) return NULL; q->next = p->next; p->next = q; return q;
(1)定义学生类;
class st { private: char Class[20]; //班级 int num; //学号 char name[8]; //姓名 float kc[6]; //各课程成绩(6门) float ave; //平均成绩 int order; //名次 public: 分析:关于学生类,该有哪些函数成员? };
头插法建立单链表图示
尾插法建表
firstL
将新建的节点插入到链表的最后
c1 s ( a ) 建空表 (b) 申请新结点并赋值 s 指向新申请的结点空间 s->data= 1 c
尾指针 f
last
① last ->ne c1 first s c1 c2
last
r s ② last=s;last指向链表的结尾 (d) 插入第二个结点
(4)将数组s,n个学生信息中按平均成绩降序排序,形成排序数组 y。 sort(st s[],int n,st y[]) (5)在数组s,n个学生信息的未,输入追加学生信息。 该功能的实现,可以使用(1)输入学生信息功能
(6)将数组s,n个学生信息,保存到文件f中。
save(st s[],int n, char *f) (7) 从文件f中导出学生信息,存放到数组s中,并返回实际学生人数n。 load(char *f,st s[],int &n)
(1)学生信息的输入(输入学生的信息,存放到数组s中,返回实际学 生个数给n,注意:输入的结束条件如何设计?)
void iuput(st s[] int *n);
(2)将数组s中,n个学生信息输出,要求:按一定得格式输出学生信 息(最好是表格格式,并且当学生人数较多时,应按页显示) void pint(st s[],int n) (3)从数组s,n个学生信息中,查询学号为x的学生信息,并返回查找 成功是(位置号)否(-1)。 int find(st s[],int n, int x)
first
c i-1
…
c2
c1
ci s
执行的语句组为:s->next=first->next;first->next=s;
插入第 i个元素
单链表的建立 (调用插入函数,可以创建链表: 形成具有n个元素的链表)
void LinkList::create(int n) { int i=0; int data; cout <<endl<<"please input the data of the list"; while (i<n) { cin >>data; insert(data); i++; } }
这样的系统不好,我们可以将其改写为图形界面 (4)图形界面程序演示; (5) 图形界面程序源代码
2、学生成绩管理系统的设计
例2:编写程序,实现学生成绩管理:要求实现
用户登录, 显示主菜单, 学生信息的输入, 学生信息的输出, 按学号查询学生信息, 按成绩降序排序, 追加学生信息, 把学生信息保存到文件, 从文件中导出学生信息 等有关的功能。
// 插入数据内容为value的新结点,为第i个结点。
}
p
L a1 … ai-1 ai … an
②a i-1 与 ai 断 链,插入 e: q pre->next=s;
e
① 与 ai 连链: s->next=pre->next
(c) 插入
单链表删除算法
void RemoveAfter(ListNode * link) //删除参数link的后继结点 { ListNode *newlink; if(link!=NULL) newlink=link->next; link->next=newlink->next link->next=link->next->nexy
(1)首先形成一个空链表: First
NULL(0)
(2)在空链表的基础上不断的插入节点,从而形成链表。 一般分为:在前插入、在后插入两种
构造空单链表
LinkList() { first=new ListNode; first->next =0; };
first
( a ) 建空表
建立单链表
头插法
C/C++综合应用实例
1、数据代数运算系统的设计(相当于计算器) 2、学生成绩管理系统的设计 3、三角形面积验证程序的设计
1、数据代数运算系统的设计 (相当于计算器)
问题:设计一个计算器程序,完成整数间的加、减、乘、除
以及求运算,以及累加求和、计算n!等。 (1)计算器程序设计文档
(2)使用TC开发的dos界面程序; (3)程序运行演示;
其它成员函数
(2)输出学生信息,要求:按一定得格式输出学生信息 (最好是表格格式,并且当学生人数较多时,应按页显示) void pint() (3)查询学号为x的学生信息,并返回查找成功是(位置 号)否(-1)。 int find(int x)
(4) 按平均成绩降序排序,形成新类。 st sort() (5)在学生信息的未,输入追加学生信息。
学生类,函数成员的定义与实现
public:
(1) 构造函数的定义: 利用参数传递,形成一个学生 有键盘输入形成一个学生 (2) 输出学生信息函数;
(2)定义班级类
class bj {
private: int m; int n; st *s;
//私有变量,顺序表实例的最大长度 // 私有变量,顺序表实例的当前长度 //存放学生的数组(利用指针实现)
给出每个函数的具体实现
同学们自己给出各函数的源代码。
设计主函数,实现系统所要求的功能
定义学生数组: 这里要注意,学生人数问题
Void main() { st *t; \\定义数组 int m; \\数组的最大空间 int n; \\实际学生人数 m=1000; st=new st[m]; n=0;
另外,对这4种方式,都可以采用Windows(图形) 界面实现。
(1)采用面向结构的程序设计方法 用顺序表(数组和结构体) DOS界面
采用面向结构的程序设计方法,用顺序表 (数组和结构体),DOS界面
处理过程:
(1)定义学生结构体; (2)定义学生数组(一般放到主函数中定义) 这里要注意,学生人数问题 (3)按功能要求定义各有关功能函数; 这里要注意,每个函数的参数及其函数的返回值 (4)设计主函数,实现系统所要求的功能。 思考: 假设将(2)定义成一个“班级结构体”,那么,整 个系统该如何实现);
1 单链表
附加头结点
结点
头指针 尾指针
• 通过指针把它的一串存储结点链接成一个链 • 存储结点由两部分组成:
– data字段 – next 字段
指向下一个节点的 指针
data
next
单链表的结点类型
struct ListNode { int data; ListNode * next; };
问题(有关链表的操作): 如何定义(申明)一个链表呢? 如何形成一个链表呢? 在链表中指定的位置处,如何插入一个节点呢? 在链表中如何删除一个节点呢?
Void main() { bj b; \\定义班级对象 st s; \\定义学生对象
显示菜单,分别调用有关的函数。 }
3 采用面向对象的程序设计方法, 用链表(定义链表类),DOS界面 链表成绩管理 1.链表的定义与结构描述 2.链表的有关操作实现 3.利用链表结构实现成绩管理 (1) 成绩管理的功能分析 (2) 成绩管理的类定义与实现
(1)定义学生结构体;
struct st { char Class[20]; int num; char nBaidu Nhomakorabeame[8]; float kc[6]; float ave; int order; };
//班级 //学号 //姓名 //各课程成绩(6门) //平均成绩 //名次
按功能要求定义各有关功能函数
显示菜单,分别调用有关的函数。
}
(3)采用面向对象的程序设计方法 用顺序表(定义顺序表类) DOS界面
采用面向结构的程序设计方法,用顺序表 (定义顺序表类),DOS界面
分析: 由于成绩管理是由多名学生构成的,所以需要定义学生类; 另外,由多个学生,形成一个班或年级,所以还需要定义 一个班级(年级)类 处理过程: (1)定义学生类; (2)定义班级类 (3)设计主函数,定义有关的对象,并调用有关的函数, 完成系统功能。
void input() (6)在学生信息的未,通过文件f,追加学生信息。 void app(char *f) (7)保存到文件f中。 void save(char *f)
给出每个函数的具体实现
同学们自己给出各函数的源代码。
设计主函数,实现系统所要求的功能
定义有关的对象
(c ) 插入第一个结点
尾插法建表图示
在头结点之后插入一个新结点
void LinkList::insert(int a) { ListNode *temp; temp=new ListNode; temp->data=a; temp->next=0; temp->next=first->next; first->next=temp; }
data
next
一个链表中,有几个数据元素呢?
如何定义(申明)一个链表呢?
一个链表一般只要告诉该链表的头指针即可。
定义链表:
struct ListNode *first
该链表所有的操作,全部是从“first”开始, 并且,该指针永远指向第一个位置。
一个链表是如何形成呢?
一个链表的形成,一般需要两步:
}
单链表插入算法 (第i节点前插入)
pre
L a1 … ai-1 ai … an
e s (b) 申请新的结点
(a) 寻找第 i-1 个结点
pre
L a1 … ai-1 ai … an
②a i-1 与 ai 断 链,插入 e: s pre->next=s;
e
① 与 ai 连链: s->next=pre->next
first s s 指向新申请的结点 s->data=c 1 (c) 插入第一个结点 last=s c2 c1 first c1
c1 ( a ) 建空表 first
last
(b) 申请新结点并赋值
ci-1 …
ci
s 执行的语句组为:s->next=first->next;first->next=s; (d) 插入第i个元素
关于该设计题目的有关问题与分析:
(1)采用的程序设计方法的选择? A)面向结构的设计方法? B)面向对象的设计方法? (2)运行界面的选择? A) DOS界面的设计? B) 图形界面(Windows界面)? (3)数据类型的定义 (结构体或类的定义)
(4)(数据结构的定义)存放数据的方式 顺序表(数组存放一个班学生信息) 链表(利用指针存放一个班的学生信息)
查找单链表中第i个结点算法
ListNode * FindIndex(const int i) { ListNode *p if( i == -1) return first; p=first->next; // int j=0;
while( p !=NULL && j < i ) { p=p->next; j++; } return p;
public:
分析:关于班级类,该有哪些函数成员?
};
班级类,函数成员的定义与实现
public: (1) 构造函数的定义: 利用参数传递,形成班级 由数组s中,n各学生,形成班级 bj(st s[] int n);
有键盘输入形成班级 学生信息的输入(输入的结束条件如何设计?) bj();
有文件导入,形成班级; 从文件f中导出学生信息, bj(char *f)
该题目的分析与设计:
本题目可以采用4种方式实现:
(1)采用面向结构的程序设计方法,用顺序表(数组和结构 体),DOS界面。 (2)采用面向结构的程序设计方法,用链表(指针和结构体), DOS界面 (3)采用面向对象的程序设计方法,用顺序表(定义顺序表 类),DOS界面 (4)采用面向对象的程序设计方法,用链表(定义链表类), DOS界面
(c) 插入
单链表插入算法
ListNode * Insert(int value, int i) { ListNode *p,*q; q = new ListNode; q->data = value; p = FindIndex(i-1); if(p == NULL ) return NULL; q->next = p->next; p->next = q; return q;
(1)定义学生类;
class st { private: char Class[20]; //班级 int num; //学号 char name[8]; //姓名 float kc[6]; //各课程成绩(6门) float ave; //平均成绩 int order; //名次 public: 分析:关于学生类,该有哪些函数成员? };
头插法建立单链表图示
尾插法建表
firstL
将新建的节点插入到链表的最后
c1 s ( a ) 建空表 (b) 申请新结点并赋值 s 指向新申请的结点空间 s->data= 1 c
尾指针 f
last
① last ->ne c1 first s c1 c2
last
r s ② last=s;last指向链表的结尾 (d) 插入第二个结点
(4)将数组s,n个学生信息中按平均成绩降序排序,形成排序数组 y。 sort(st s[],int n,st y[]) (5)在数组s,n个学生信息的未,输入追加学生信息。 该功能的实现,可以使用(1)输入学生信息功能
(6)将数组s,n个学生信息,保存到文件f中。
save(st s[],int n, char *f) (7) 从文件f中导出学生信息,存放到数组s中,并返回实际学生人数n。 load(char *f,st s[],int &n)
(1)学生信息的输入(输入学生的信息,存放到数组s中,返回实际学 生个数给n,注意:输入的结束条件如何设计?)
void iuput(st s[] int *n);
(2)将数组s中,n个学生信息输出,要求:按一定得格式输出学生信 息(最好是表格格式,并且当学生人数较多时,应按页显示) void pint(st s[],int n) (3)从数组s,n个学生信息中,查询学号为x的学生信息,并返回查找 成功是(位置号)否(-1)。 int find(st s[],int n, int x)
first
c i-1
…
c2
c1
ci s
执行的语句组为:s->next=first->next;first->next=s;
插入第 i个元素
单链表的建立 (调用插入函数,可以创建链表: 形成具有n个元素的链表)
void LinkList::create(int n) { int i=0; int data; cout <<endl<<"please input the data of the list"; while (i<n) { cin >>data; insert(data); i++; } }
这样的系统不好,我们可以将其改写为图形界面 (4)图形界面程序演示; (5) 图形界面程序源代码
2、学生成绩管理系统的设计
例2:编写程序,实现学生成绩管理:要求实现
用户登录, 显示主菜单, 学生信息的输入, 学生信息的输出, 按学号查询学生信息, 按成绩降序排序, 追加学生信息, 把学生信息保存到文件, 从文件中导出学生信息 等有关的功能。
// 插入数据内容为value的新结点,为第i个结点。
}
p
L a1 … ai-1 ai … an
②a i-1 与 ai 断 链,插入 e: q pre->next=s;
e
① 与 ai 连链: s->next=pre->next
(c) 插入
单链表删除算法
void RemoveAfter(ListNode * link) //删除参数link的后继结点 { ListNode *newlink; if(link!=NULL) newlink=link->next; link->next=newlink->next link->next=link->next->nexy
(1)首先形成一个空链表: First
NULL(0)
(2)在空链表的基础上不断的插入节点,从而形成链表。 一般分为:在前插入、在后插入两种
构造空单链表
LinkList() { first=new ListNode; first->next =0; };
first
( a ) 建空表
建立单链表
头插法
C/C++综合应用实例
1、数据代数运算系统的设计(相当于计算器) 2、学生成绩管理系统的设计 3、三角形面积验证程序的设计
1、数据代数运算系统的设计 (相当于计算器)
问题:设计一个计算器程序,完成整数间的加、减、乘、除
以及求运算,以及累加求和、计算n!等。 (1)计算器程序设计文档
(2)使用TC开发的dos界面程序; (3)程序运行演示;
其它成员函数
(2)输出学生信息,要求:按一定得格式输出学生信息 (最好是表格格式,并且当学生人数较多时,应按页显示) void pint() (3)查询学号为x的学生信息,并返回查找成功是(位置 号)否(-1)。 int find(int x)
(4) 按平均成绩降序排序,形成新类。 st sort() (5)在学生信息的未,输入追加学生信息。
学生类,函数成员的定义与实现
public:
(1) 构造函数的定义: 利用参数传递,形成一个学生 有键盘输入形成一个学生 (2) 输出学生信息函数;
(2)定义班级类
class bj {
private: int m; int n; st *s;
//私有变量,顺序表实例的最大长度 // 私有变量,顺序表实例的当前长度 //存放学生的数组(利用指针实现)
给出每个函数的具体实现
同学们自己给出各函数的源代码。
设计主函数,实现系统所要求的功能
定义学生数组: 这里要注意,学生人数问题
Void main() { st *t; \\定义数组 int m; \\数组的最大空间 int n; \\实际学生人数 m=1000; st=new st[m]; n=0;
另外,对这4种方式,都可以采用Windows(图形) 界面实现。
(1)采用面向结构的程序设计方法 用顺序表(数组和结构体) DOS界面
采用面向结构的程序设计方法,用顺序表 (数组和结构体),DOS界面
处理过程:
(1)定义学生结构体; (2)定义学生数组(一般放到主函数中定义) 这里要注意,学生人数问题 (3)按功能要求定义各有关功能函数; 这里要注意,每个函数的参数及其函数的返回值 (4)设计主函数,实现系统所要求的功能。 思考: 假设将(2)定义成一个“班级结构体”,那么,整 个系统该如何实现);
1 单链表
附加头结点
结点
头指针 尾指针
• 通过指针把它的一串存储结点链接成一个链 • 存储结点由两部分组成:
– data字段 – next 字段
指向下一个节点的 指针
data
next
单链表的结点类型
struct ListNode { int data; ListNode * next; };
问题(有关链表的操作): 如何定义(申明)一个链表呢? 如何形成一个链表呢? 在链表中指定的位置处,如何插入一个节点呢? 在链表中如何删除一个节点呢?
Void main() { bj b; \\定义班级对象 st s; \\定义学生对象
显示菜单,分别调用有关的函数。 }
3 采用面向对象的程序设计方法, 用链表(定义链表类),DOS界面 链表成绩管理 1.链表的定义与结构描述 2.链表的有关操作实现 3.利用链表结构实现成绩管理 (1) 成绩管理的功能分析 (2) 成绩管理的类定义与实现
(1)定义学生结构体;
struct st { char Class[20]; int num; char nBaidu Nhomakorabeame[8]; float kc[6]; float ave; int order; };
//班级 //学号 //姓名 //各课程成绩(6门) //平均成绩 //名次
按功能要求定义各有关功能函数
显示菜单,分别调用有关的函数。
}
(3)采用面向对象的程序设计方法 用顺序表(定义顺序表类) DOS界面
采用面向结构的程序设计方法,用顺序表 (定义顺序表类),DOS界面
分析: 由于成绩管理是由多名学生构成的,所以需要定义学生类; 另外,由多个学生,形成一个班或年级,所以还需要定义 一个班级(年级)类 处理过程: (1)定义学生类; (2)定义班级类 (3)设计主函数,定义有关的对象,并调用有关的函数, 完成系统功能。