1 矩阵的操作(6人)
设有两个矩阵A=(a ij)m×n,B=(b ij)p×q
实现要求:
⑴编写矩阵输入函数INPUT_MAT,通过该函数完成矩阵的输入并返回保存矩阵的数组和对应矩阵的行数、列数。
(不能使用全局变量)
⑵编写矩阵输出函数OUTPUT_MAT,通过该函数完成矩阵的输出。
⑶求矩阵的转置,矩阵的转置A’=(a ji)n×m,转置前输出原矩阵,转置后输出转置矩阵。
⑷求矩阵A、B的和。
矩阵A和B能够相加的条件是:m=p,n=q;矩阵A和B如果不能相加,请给出提示信息;若能够相加,则求和矩阵C并输出C。
C=A+B=(c ij)m×n,其中c ij=a ij+b ij
⑸求矩阵A、B的积。
矩阵A和B能够相乘的条件是:p=n;矩阵A和B 如果不能相乘,请给出提示信息;若能够相乘,则求积矩阵D并输出D。
D=A×B=(d ij)m×q,其中d ij=∑a ik×b kj,k=1,2,……,n
⑹设计一个菜单,具有求矩阵的转置、求矩阵的和、求矩阵的积、退出等基本的功能。
在求矩阵的和或求矩阵的积时要求能够先提示输入两个矩阵的,然后再进行相应的操作。
2 数据汇总 (6人)
问题描述:
在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。
假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。
记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。
构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。
实现要求:
⑴编写实现将数据记录插入到数据文件的最后的函数;
⑵编写以收款机为单位的数据分类处理函数。
构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。
读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表;
⑶统计每台收款机的销售总额;
⑷编写以商品为单位的数据分类处理函数。
构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。
读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表;
⑸以商品为单位,统计每种商品的销售总额。
⑹设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。
3 joseph环(2人)
问题描述:
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,一开始任选一个正整数作为报数上限(开始)值m(m<n),从第s(s<n)个人开始沿顺时针方向顺序报数,报到m时停止报数,报m的人出列,然后在从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。
设计一个程序来求出出列顺序。
实现要求:
⑴利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
输入数据:建立输入处理输入数据,输入m、n、s的初值和每个人的编号,建立单循环链表。
输出形式:建立一个输出函数,将正确的序列输出。
⑵利用顺序表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
输入数据:建立输入处理输入数据,输入m、n、s的初值和每个人的编号,建立单循环链表。
输出形式:建立一个输出函数,将正确的序列输出。
测试数据:
m的初值为20,n=7 ,7个人的密码依次为3,1,7,2,4,7,4,首先m=6,则正确的输出是什么?
4 队列及其操作 (3人)
问题描述:
队列(Queue):也是运算受限的线性表。
是一种先进先出(First In First Out ,简称FIFO)的线性表。
只允许在表的一端进行插入,而在另一端进行删除。
队首(front) :允许进行删除的一端称为队首。
队尾(rear) :允许进行插入的一端称为队尾。
队列中没有元素时称为空队列。
在空队列中依次加入元素a1, a2, …, an 之后,a1是队首元素,an 是队尾元素。
显然退出队列的次序也只能是a1, a2, …, an ,即队列的修改是依先进先出的原则进行的。
队列的链式存储结构简称为链队列,它是限制仅在表头进行删除操作和表尾进行插入操作的单链表。
需要两类不同的结点:数据元素结点,队列的队首指针和队尾指针的结点,链队的基本形式如下:
数据元素结点 空队列 queue 只有一个元素的队列
有n 个元素的队列 queue
实现要求:
⑴链队列基本操作的实现:链队列的初始化,生成一个空链队列;链队列的撤消,即删除队列中的所有结点,仅留下指针结点;
⑵链队列的入队操作,即在已知队列的队尾插入一个元素e,即修改队尾指针;
⑶链队列的出队操作,即返回队首结点的元素值并删除队首结点;
5 背包问题的求解 (每种情况各2人,
共4人)
题目之一:
问题描述:
假设有一个能装入总体积为T的背包和n件体积分别为w1 , w2, … , w n
的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1 +w2+ … + w n=T,要求找出所有满足上述条件的解。
例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:
(1,4,3,2)
(1,4,5)
(8,2)
(3,5,2)。
问题提示:
可利用回溯法的设计思想来解决背包问题。
首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i 件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品"太大"不能装入,则弃之而继续选取下一件,直至背包装满为止。
但如果在剩余的物品中找不到合适的物品以填满背包,则说明"刚刚"装入背包的那件物品"不合适",应将它取出"弃之一边",继续再从"它之后"的物品中选取,如此重复,直至求得满足条件的解,或者无解。
题目之二:
问题描述:
假设有n件物品,这些物品的重量分别是W1 , W2 , … , Wn,物品的价值分别是V1,V2,…,Vn。
求从这n件物品中选取一部分物品的方案,使得所选中的物品的总重量不超过限定的重量W(W<∑Wi, i=1,2,┅,n),但所选中的物品价值之和为最大。
问题提示:
利用递归寻找物品的选择方案。
假设前面已有了多种选择的方案,并保留了
其中总价值最大的方案于数组option[]中,该方案的总价值保存于变量max_value 中。
当前正在考察新方案,其物品选择情况保存于数组eop[]中。
假设当前方案已考虑了i-1件物品,现在要考虑第i件物品:当前方案已包含的物品的重量之和为tw;因此,若其余物品都选择是可能的话,本方案所能达到的总价值的期望值设为tv。
引入tv是当一旦当前方案的总价值的期望值也小于前面方案的总价值max_value时,继续考察当前方案已无意义,应终止当前方案而去考察下一个方案。
第i件物品的选择有两种可能:
①物品i被选择。
这种可能性仅当包含它不会超过方案总重量的限制才是可行的。
选中之后继续递归去考虑其余物品的选择;
②物品i不被选择。
这种可能性仅当不包含物品i也有可能找到价值更大的方案的情况。
6 学生成绩管理(8人)
问题描述:
设学生信息包括:学号、姓名、学期、每门课程的成绩(每学期的课程门数是不一样的) ,对学生的成绩信息进行管理。
实现要求:
实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。
⑴输入学生的成绩信息,包含学号、姓名、性别等基本信息和各课成绩
⑵显示全部学生各科成绩信息;
⑶对各科成绩统计分析(总分、平均分、最高分、最低分、及格率等);
⑷统计各科各分数段人数;
⑸按学号或姓名查找并显示某个学生的各科成绩;
⑹按课程成绩或总分由高到低排序显示;
⑺更新某个学生的基本信息或课程成绩;
⑻设计一个菜单,具有上述规定的操作要求、退出系统等最基本的功能。