实验8 群体类、流类库与输入/输出(4学时)

一、 实验目的

  1. 了解链表类的定义与实现,学习其使用方法;
  2. 了解栈类的定义与实现,学习其使用方法;
  3. 了解队列类的定义与实现,学习其使用方法;
  4. 了解C++标准模板库STL的使用方法。
  5. 熟悉流类库中常用的类及其成员函数的用法。
  6. 学习标准输入输出及格式控制;
  7. 学习对文件的应用方法(二进制文件、文本文件)。

二、 实验任务

  1. 编写程序link.h实现教材中例9.6的链表类。在测试程序lab9_1.cpp中定义两个整型链表A和B,分别插入5个元素,然后把B中的元素加入A的尾部。
    (题解:实验8.1 链表类的定义与实现)
  2. 编写程序queue.h,用链表实现队列(或栈)类。在测试程序lab9_2.cpp中定义一个整型队列(或栈)对象,插入5个整数,压入队列(或栈),再依次取出并显示出来。
    (题解:实验8.2 队列类的定义与实现)
  3. 使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题。
    (题解:实验8.3 C++标准模板库(STL)中的双向队列类(deque))
  4. (选做)定义course(课程)类,有属性:课程名char name[21]、成绩short score;在实验七中的student类中增加属性:所修课程courses,为课程类对象的链表。在测试程序中测试这个类。学生类与课程类关系如图9-1所示。
    在这里插入图片描述
    图9-1 类图
  5. 观察以下程序的输出,注意对输出格式的控制方法;
//lab11_1.cpp
#include <fstream>
using namespace std;
#define D(a) T << #a << endl; a
ofstream T("output.out");

void main() {
  D(int i = 53;)
  D(float f = 4700113.141593;)
  char* s = "Is there any more?";

  D(T.setf(ios::unitbuf);)

  D(T.setf(ios::showbase);)
  D(T.setf(ios::uppercase);)
  D(T.setf(ios::showpos);)
  D(T << i << endl;)
  D(T.setf(ios::hex, ios::basefield);)
  D(T << i << endl;)
  D(T.unsetf(ios::uppercase);)
  D(T.setf(ios::oct, ios::basefield);)
  D(T << i << endl;)
  D(T.unsetf(ios::showbase);)
  D(T.setf(ios::dec, ios::basefield);)
  D(T.setf(ios::left, ios::adjustfield);)
  D(T.fill('0');)
  D(T << "fill char: " << T.fill() << endl;)
  D(T.width(8);)
  T << i << endl;
  D(T.setf(ios::right, ios::adjustfield);)
  D(T.width(8);)
  T << i << endl;
  D(T.setf(ios::internal, ios::adjustfield);)
  D(T.width(8);)
  T << i << endl;
  D(T << i << endl;) // Without width(10)

  D(T.unsetf(ios::showpos);)
  D(T.setf(ios::showpoint);)
  D(T << "prec = " << T.precision() << endl;)
  D(T.setf(ios::scientific, ios::floatfield);)
  D(T << endl << f << endl;)
  D(T.setf(ios::fixed, ios::floatfield);)
  D(T << f << endl;)
  D(T.setf(0, ios::floatfield);) // Automatic
  D(T << f << endl;)
  D(T.precision(16);)
  D(T << "prec = " << T.precision() << endl;)
  D(T << endl << f << endl;)
  D(T.setf(ios::scientific, ios::floatfield);)
  D(T << endl << f << endl;)
  D(T.setf(ios::fixed, ios::floatfield);)
  D(T << f << endl;)
  D(T.setf(0, ios::floatfield);) // Automatic
  D(T << f << endl;)

  D(T.width(8);)
  T << s << endl;
  D(T.width(36);)
  T << s << endl;
  D(T.setf(ios::left, ios::adjustfield);)
  D(T.width(36);)
  T << s << endl;

  D(T.unsetf(ios::showpoint);)
  D(T.unsetf(ios::unitbuf);)
}
  1. 编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。
  2. (选做)使用实验十中的学生类数组,输入数据,显示出来,使用I/O流把此数组的内容写入磁盘文件,再显示出文件内容。

三、 实验步骤

  1. 参照教材中链表类LinkedList的定义(教材中的例程9-6.h),给出其实现,注意合理使用Node类(教材中的例程9-3.h)的成员函数。在测试程序中定义整型链表A和B,分别插入5个元素,使用循环语句显示链表中的元素,然后把B中的元素加入A的尾部,再显示出来。
  2. 队列类的特点就是其元素的操作顺序为先入先出(FIFO),用上题中的链表类实现队列类,用链表类的成员函数实现队列类的成员函数,在测试程序中定义一个整型队列对象,观察队列类中元素先入先出的特点。
  3. 在程序中包含语句#include ,使用deque类的方法push_back()、empty()、pop_front()完成上一小题的要求。程序名:lab9_3.cpp。
  4. 观察实验任务5题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;
  5. 编写程序lab11_2.cpp使用void main(int argc, char* argv[])函数中的参数传递操作的文件名,定义ofstream 的对象对文件进行操作,使用getline成员函数读入数据,使用cout输出字符到文件。
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值