8.6本章习题

一、填空题

1.在ios类库中,基类ios直接派生了两个类,分别是_istream类__和_ostream类__。
2.C++预定义的四个流对象中,不带缓冲的流对象是_标准错误流(cerr)__。
3.C++中的输入/输出流可以分为标准I/O流、文件流__和字符串流三类。
4.ifstream类默认的文件打开模式为 _iso::in。

二、判断题

1.在C++流类库中,ios根基类是一个抽象类。(√ )
2.ostream类提供的成员函数,如put()、write()函数等,无法连续调用。(× )
3.istream类提供的成员函数getline(),默认以‘\0’作为结束符。(getline()默认以’\n’作为结束符
4.文件流对象无法使用“>>”“<<”运算符传输数据。(× )
5.C++不支持文件的随机读写。( ×)

三、选择题

1.下列选项中,不属于刷新缓冲区的方式的是(D)。
A.执行flush()函数
B.执行endl语句
C.关闭文件
D.等上5 s时间编译器自动刷新

2.关于标准输入/输出流,下列说法中错误的是(C )。
A.输出流提供的put()函数用于单个字符的输出
B.write()函数一次可以输出一个字符串
C.输入流提供的get()函数在遇到’\n’时会结束读取 输入流提供的get()函数默认会读取一个字符
D.getline()一次可以读取一个字符串

3.下列选项中,只能用于检测文件读取操作的函数是(D)。
A.fail()
B.eof()
C.bad()
D.good()

4.下列选项中,可以清除输入流错误状态的函数是(A )。
A.clear()
B.fail()
C.put()
D.eof()

5.下列选项中,构建的文件流对象正确的是(BD )(多选)。
A.ifstream ifs; //ifs.open(); 手动打开
B.ifstream ifs(“filename”);
C.ofstream ofs;
D.fstream fs(“filename”);

6.关于文件的打开与关闭,下列说法中错误的是(C )。
A.ifstream类、ostream类和fstream类都提供了成员函数open()用于打开文件
B.ifstream类打开文件的默认方式是ios::in,ostream类打开文件的默认方式是ios::out
C.文件流使用完毕后,析构函数会自动释放资源,不用手动调用close()函数关闭文件
D.文件的打开方式可以组合使用

四、简答题

1.简述一下C++预定义的四个流对象之间的区别。

C++预定义了四个流对象,分别是:
cin:标准输入流对象,用于从键盘读取输入。
cout:标准输出流对象,用于向屏幕输出。
cerr:标准错误流对象,用于向屏幕输出错误信息。
clog:标准日志流对象,用于向屏幕输出程序运行时的日志信息。
这四个流对象之间的区别主要在于它们的用途和性质:
cin 和 cout 是最常用的两个流对象,用于从键盘读取输入和向屏幕输出。它们都是标准输入输出流对象,通常不会出现错误,因此不需要使用 clear() 函数清除错误状态。
cerr 和 clog 也是输出流对象,但它们通常用于向屏幕输出错误信息和调试信息,区别在于 cerr 输出的是错误信息,通常是不可恢复的错误,而 clog 输出的是日志信息,通常是可以恢复的错误或者程序运行状态的信息。与 cout 不同,cerr不会被缓冲,即立即将输出信息写入文件或者屏幕上。如果输出错误信息或者日志信息时出现错误,需要使用 clear() 函数清除错误状态。

2.简述一下getline()函数与read()函数的区别。

getline() 函数和 read() 函数都是 C++ 中用于从输入流中读取数据的函数,但它们之间有以下几个区别:
参数不同:getline() 函数需要两个参数,第一个参数是输入流对象,第二个参数是存储读取数据的字符串,而 read() 函数需要三个参数,第一个参数是字符数组的指针,第二个参数是读取字符的数量,第三个参数是输入流对象。
读取方式不同:getline() 函数会读取输入流中的一行数据,直到遇到换行符为止,包括换行符在内,而 read() 函数会按照指定的字节数读取数据,不考虑换行符等其他字符。
读取数据类型不同:getline() 函数读取的是字符串类型的数据,即 std::string 类型,而 read() 函数读取的是字符类型的数据,即 char 类型。
处理换行符的方式不同:getline() 函数会将读取到的换行符从输入流中删除,而 read() 函数不会删除换行符,需要手动处理。
因此,getline() 函数适用于读取一行字符串类型的数据,而 read() 函数适用于读取固定字节数的字符类型的数据。

五、编程题

1.请编写程序实现以下功能:从键盘输入若干个字符串,统计长度最长的字符串,并输出最长字符串的内容和长度。

2.有一个文本文件data.txt,它记录了几个学生的信息,内容如下:
姓名 学号 性别 年龄
张三 1001 男 22
李明 1002 男 21
李红 1003 女 22
李明 1004 女 20
请编写一个程序,从文本文件data.txt中找出所有叫“李明”的学生,并输出他们的信息。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
  ofstream ofs("data.txt");
  if (!ofs) {
    cout << "打开文件失败!" << endl;
    return 0;
  }

  // 将学生信息写入文件
  ofs << "姓名 学号 性别 年龄" << endl;
  ofs << "张三 1001 男 22" << endl;
  ofs << "李明 1002 男 21" << endl;
  ofs << "李红 1003 女 22" << endl;
  ofs << "李明 1004 女 20" << endl;

  ofs.close();

  ifstream ifs("data.txt");
  if (!ifs) {
    cout << "打开文件失败!" << endl;
    return 0;
  }

  string name, id, sex, age;
  while (ifs >> name >> id >> sex >> age) {
    if (name == "李明") {
      cout << "姓名:" << name << " 学号:" << id
           << " 性别:" << sex << " 年龄:" << age << endl;
    }
  }

  ifs.close();

  return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一 操作系统引论 3 1.1 操作系统的基本概念 3 1.2 操作系统的功能 3 1.3 操作系统的特征 4 1.4 操作系统的分类 5 1.5 例题解析 7 1.6 自测题 10 1.7 自测题答案 13 第二 用户与操作系统的接口界面 14 2.1 作业的基本概念 14 2.2 批处理作业的管理 14 2.3 管态与目态 16 2.4 用户与操作系统的接口界面 17 2.5 例题解析 18 2.6 自测题 20 2.7 自测题答案 21 第三 进程管理 22 3.1 进程 22 3.2 进程控制 23 3.4 死锁 26 3.5 例题解析 28 3.6 自测题 37 3.7 习题解答 41 第四 处理机调度 44 4.1 作业的状态及其转换 44 4.2 作业调度 45 4.3 进程调度 46 4.4例题解析 47 4.5 自测题 49 4.6 自测题解答 52 第五 存储管理 54 5.1 管理的基本概念 54 5.2 分区存储管理 55 5.3 页式分区存储管理 58 5.4 段式存储管理 59 5.5 段页式管理 60 5.6 虚存 61 5.7 例题解析 63 5.8 自测题 69 5.9自测题答案 75 第六 文件管理 78 6.1 文件系统的基本概念 78 6.2 文件的组织结构 79 6.3 文件目录 80 6.4 文件的使用与控制 81 6.5 文件的保护 83 6.6 文件存储空间的管理 84 6.7 例题解析 85 6.8 自测题 87 6.9自测题答案 91 第七 设备管理 92 7.1 设备管理概述 92 7.2 I/O控制 92 7.3 中断的基本概念 94 7.4 缓冲技术 96 7.5 设备管理子系统 97 7.6 例题解析 98 7.7 自测题 100 7.8自测题解答 102 第八 综合练习 104 8.1 操作系统引论习题 104 8.2  进程管理习题 109 8.3 作业管理习题 118 8.4 存储器管理习题 124 8.6  文件管理习题 137 第九 习题解答 146 9.1  引论习题解答 146 9.2 进程管理习题解答 149 9.3 作业管理习题解答 157 9.4存储器管理习题解答 160 9.5设备管理习题解答 165 9.6 文件管理习题解答 169 计算机操作系统模拟题一 177 计算机操作系统模拟题二 181 计算机操作系统模拟题一答案 187 计算机操作系统模拟题二解答 190 第一
写在前面的话 引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 节 6. 练习 7. 多媒体 8. 源代码 9. 编码样式 10. Java版本 11. 课程和培训 12. 错误 13. 封面设计 14. 致谢 第1 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失 1.12.2 阶段0:拟出一个计划 1.12.3 阶段1:要制作什么? 1.12.4 阶段2:开始构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2 一切都是对象 2.1 用句柄操纵对象 2.2 必须创建所有对象 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结 2.11 练习 第3 控制程序流程 3.1 使用Java运算符 3.1.1 优先级 3.1.2 赋值 3.1.3 算术运算符 3.1.4 自动递增和递减 3.1.5 关系运算符 3.1.6 逻辑运算符 3.1.7 按位运算符 3.1.8 移位运算符 3.1.9 三元if-else运算符 3.1.10 逗号运算符 3.1.11 字串运算符 3.1.12 运算符常规操作规则 3.1.13 造型运算符 3.1.14 Java没有“sizeof” 3.1.15 复习计算顺序 3.1.16 运算符总结 3.2 执行控制 3.2.1 真和假 3.2.3 反复 3.2.6 中断和继续 3.2.7 切换 3.3 总结 3.4 练习 第4 初始化和清除 4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 成员初始化 4.4.1 规定初始化 4.4.2 构建器初始化 4.5 数组初始化 4.5.1 多维数组 4.6 总结 4.7 练习 第5 隐藏实施过程 5.1 包:库单元 5.1.1 创建独一无二的包名 5.1.2 自定义工具库 5.1.3 利用导入改变行为 5.1.4 包的停用 5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6 类再生 6.1 合成的语法 6.2 继承的语法 6.2.1 初始化基础类 6.3 合成与继承的结合 6.3.1 确保正确的清除 6.3.2 名字的隐藏 6.4 到底选择合成还是继承 6.6 递增开发 6.7 上溯造型 6.7.1 何谓“上溯造型”? 6.8 final关键字 6.8.1 final数据 6.8.2 final方法 6.8.3 final类 6.8.4 final的注意事项 6.9 初始化和类装载 6.9.1 继承初始化 6.10 总结 6.11 练习 第7 多形性 7.1 上溯造型 7.1.1 为什么要上溯造型 7.2 深入理解 7.2.1 方法调用的绑定 7.2.2 产生正确的行为 7.2.3 扩展性 7.3 覆盖与过载 7.4 抽象类和
目 录 译者序 前言 第1 对象的演化 1.1基本概念 1.1.1对象:特性十行为 1.1.2继承:类型关系 1.1.3多态性 1.1.4操作概念:OOP程序像什么 1.2为什么C++会成功 1.2.1较好的C 1.2.2采用渐进的学习方式 1.2.3运行效率 1.2.4系统更容易表达和理解 1.2.5“库”使你事半功倍 1.2.6错误处理 1.2.7大程序设计 1.3方法学介绍 1.3.1复杂性 1.3.2内部原则 1.3.3外部原则 1.3.4对象设计的五个阶段 1.3.5方法承诺什么 1.3.6方法应当提供什么 1.4起草:最小的方法 1.4.1前提 1.4.2高概念 1.4.3论述(treatment) 1.4.4结构化 1.4.5开发 1.4.6重写 1.4.7逻辑 1.5其他方法 1.5.1Booch 1.5.2责任驱动的设计(RDD) 1.5.3对象建模技术(OMT) 1.6为向OOP转变而采取的策略 1.6.1逐步进入OOP 1.6.2管理障碍 1.7小结 第2 数据抽象 2.1声明与定义 2.2一个袖珍C库 2.3放在一起:项目创建工具 2.4什么是非正常 2.5基本对象 2.6什么是对象 2.7抽象数据类型 2.8对象细节 2.9头文件形式 2.10嵌套结构 2.11小结 2.12练习 第3 隐藏实现 3.1设置限制 3.2C++的存取控制 3.3友元 3.3.1嵌套友元 3.3.2它是纯的吗 3.4对象布局 3.5类 3.5.1用存取控制来修改stash 3.5.2用存取控制来修改stack 3.6句柄类(handleclasses) 3.6.1可见的实现部分 3.6.2减少重复编译 3.7小结 3.8练习 第4 初始化与清除 4.1用构造函数确保初始化 4.2用析构函数确保清除 4.3清除定义块 4.3.1for循环 4.3.2空间分配 4.4含有构造函数和析构函数的stash 4.5含有构造函数和析构函数的stack 4.6集合初始化 4.7缺省构造函数 4.8小结 4.9练习 第5 函数重载与缺省参数 5.1范围分解 5.1.1用返回值重载 5.1.2安全类型连接 5.2重载的例子 5.3缺省参数 5.4小结 5.5练习 第6 输入输出流介绍 6.1为什么要用输入输出流 6.2解决输入输出流问题 6.2.1预先了解操作符重载 6.2.2插入符与提取符 6.2.3通常用法 6.2.4面向行的输入 6.3文件输入输出流 6.4输入输出流缓冲 6.5在输入输出流中查找 6.6strstreams 6.6.1为用户分配的存储 6.6.2自动存储分配 6.7输出流格式化 6.7.1内部格式化数据 6.7.2例子 6.8格式化操纵算子 6.9建立操纵算子 6.10输入输出流实例 6.10.1代码生成 6.10.2一个简单的数据记录 6.11小结 6.12练习 第7 常量 7.1值替代 7.1.1头文件里的const 7.1.2const的安全性 7.1.3集合 7.1.4与C语言的区别 7.2指针 7.2.1指向const的指针 7.2.2const指针 7.2.3赋值和类型检查 7.3函数参数和返回值 7.3.1传递const值 7.3.2返回const值 7.3.3传递和返回地址 7.4类 7.4.1类里的const和enum 7.4.2编译期间类里的常量 7.4.3const对象和成员函数 7.4.4只读存储能力 7.5可变的(volatile) 7.6小结 7.7练习 第8 内联函数 8.1预处理器的缺陷 8.2内联函数 8.2.1类内部的内联函数 8.2.2存取函数 8.3内联函数和编译器 8.3.1局限性 8.3.2赋值顺序 8.3.3在构造函数和析构函数里隐藏行为 8.4减少混乱 8.5预处理器的特点 8.6改进的错误检查 8.7小结 8.8练习 第9 命名控制 9.1来自C语言中的静态成员 9.1.1函数内部的静态变量 9.1.2控制连接 9.1.3其他的存储类型指定符 9.2名字空间 9.2.1产生一个名字空间 9.2.2使用名字空间 9.3C++中的静态成员 9.3.1定义静态数据成员的存储 9.3.2嵌套类和局部类 9.3.3静态成员函数 9.4静态初始化的依赖因素 9.5转换连接指定 9.6小结 9.7练习 第10 引用和拷贝构造函数 10.1C++中的指针 10.2C+十中的引用 10.2.1函数中的引用 10.2.2参数传递准则 10.3拷贝构造函数 10.3.1传值方式传递和返回 10.3.2拷贝构造函数 10.3.3缺省拷贝构造函数 10.3.4拷贝构造函数方法的选择 10.4指向成员的指针(简称成员指针) 10.5小结 10.6练习 第11 运算符重载 1
目录 习题篇 第一 回溯 1.1马拦过河卒 1.2出栈序列统计 1.3算24点 1.4冗余依赖 1.5走迷宫 1.6 单向双轨道 1.7.组合的输出 1.8售货员的难题 1.9驾车旅游 1.10关路灯 第二 递规与递推 2.1遍历问题 2.2产生数 2.3出栈序列统计 2.4计数器 2.5诸侯安置 2.6括号序列 2.7新汉诺塔 2.8排序集合 2.9青蛙过河 2.10电话号码 2.11编码 第三 贪心 3.1排队接水 3.2智力大冲浪 3.3取火柴游戏 3.4等待时间 3.5加工生产调度 3.6最大乘积 3.7种树 3.8餐巾 3.9马拉松接力赛 3.10线性存储问题 3.11扇区填数 第四 分治 4.1取余运算 4.2地毯填补问题 4.3平面上的最接近点对 4.4求方程的根 4.5小车问题 4.6黑白棋子的移动 4.7麦森数(NOIP2003) 4.8旅行家的预算(NOIP1999) 4.9飞行计划 第五 图 5.1医院设置 5.2工程规划 5.3服务器储存信息问题 5.4间谍网络(AGE) 5.5宫廷守卫 5.6K-联赛 5.7机器调度 5.8公路修建 5.9速度限制 第六 树 6.1排序二叉树 6.2售票系统 6.3树的重量 6.4信号放大器 6.5“访问”术馆 6.6聚会的快乐 6.7重建道路 6.8有线电视网 6.9TWO 第七 搜索 7.1最多因子数 7.2黑白棋游戏 7.3纵横填字游戏 7.4魔术数字游戏 7.5魔板 7.6三维扫描 7.7拼字游戏 7.8小木棍 7.9WORD 第八 动态规划 8.1 BLAST 8.2 血缘关系 8.3 LIGNJA 8.4 书的复制 8.5 多米诺骨 8.6 平板涂色 8.7 三角形牧场 8.8 分组 8.9 工程规划 第九 数学问题 9.1多项式展开系数 9.2 RAIR 9.3盒子与球 9.4取数游戏 9.5磁盘碎片整理 9.6欧几里德的游戏 9.7百事世界杯之旅 9.8倒酒 9.9班级聚会 第十 杂题 10.1排序 10.2木棍加工 10.3三角形 10.4多边形面积 10.5网线切割 10.6最接近的分数 10.7切孔机 10.8 DOG 10.9 ERP 10.10魔鬼之城 10.11可见矩形 解析篇 第一 回溯 1.1马拦过河卒 简析 1.2出栈序列统计 简析 1.3算24点 简析 1.4冗余依赖 简析 1.5走迷宫 详解 1.6 单向双轨道 简析 1.7.组合的输出 详解 1.8售货员的难题 简析 1.9驾车旅游 简析 1.10关路灯 详解 第二 递规与递推 2.1遍历问题 详解 2.2产生数 详解 2.3出栈序列统计 详解 2.4计数器 详解 2.5诸侯安置 详解 2.6括号序列 简析 2.7新汉诺塔 简析 2.8排序集合 简析 2.9青蛙过河 简析 2.10电话号码 简析 2.11编码 简析 第三 贪心 3.1排队接水 详解 3.2智力大冲浪 详解 3.3取火柴游戏 详解 3.4等待时间 详解 3.5加工生产调度 详解 3.6最大乘积 详解 3.7种树 简析 3.8餐巾 简析 3.9马拉松接力赛 简析 3.10线性存储问题 简析 3.11扇区填数 简析 第四 分治 4.1取余运算 详解 4.2地毯填补问题 详解 4.3平面上的最接近点对 详解 4.4求方程的根 简析 4.5小车问题 简析 4.6黑白棋子的移动 简析 4.7麦森数(NOIP2003) 简析 4.8旅行家的预算(NOIP1999) 简析 4.9飞行计划 简析 第五 图 5.1医院设置 详解 5.2工程规划 详解 5.3服务器储存信息问题 详解 5.4间谍网络(AGE) 简析 5.5宫廷守卫 简析 5.6 K-联赛 简析 5.7机器调度 简析 5.8公路修建 简析

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值