C++ PrimerPlus 复习 第六章 分支语句和逻辑运算符

news2024/9/25 17:22:16

第一章 命令编译链接文件 make文件

第二章 进入c++

第三章 处理数据

第四章 复合类型 (上)

第四章 复合类型 (下)

第五章 循环和关系表达式

第六章 分支语句和逻辑运算符

第六章 分支语句和逻辑运算符

  • if语句;
  • 逻辑运算符——&&、||和!;
  • cctype字符函数库;
  • 条件运算符——?:;
  • switch语句;
  • continue和break语句;
  • goto语句
  • 读取数字的循环;
  • 基本文件输入/输出。
  • 问题区
  • 条件运算符与if else语句有什么区别?
  • 怎么通过文本文件完成I/O操作?

简单过过,再熟悉不过

题目
条件运算符与if else语句有什么区别?
怎么通过文本文件完成I/O操作?

if语句;

if 的三种结构
if结构

if (test-condition)
 statement

if else结构

if (test-condition)
 statement1
else
 statement2

if else if else结构

if (test-condition)
 statement1
if else(test_condition2)
 statement2
else
 statement3

简单过过

逻辑运算符——&&、||和!;

就是与(and),或(or),非(not),在代码中可以直接用and,or,not代替
注意一下运算符优先级,实在记不了就()写到尾。而且啊,明明写()更容易读代码

cctype字符函数库;

就相当于一个工具库,懂有什么功能就行,要用在搜索也可以
分类总结:

  1. C++继承了C语言的字符函数库,位于头文件cctype中,用于简化字符相关的操作,例如判断字符是否为字母、数字、标点符号等。
  2. cctype库中的函数返回int类型的值,通常可以将它们视为bool类型,因为非零值被视为true,0被视为false
  3. 使用cctype库中的函数比使用AND和OR运算符更方便和通用。

问题与答案:

  1. 什么是cctype库,它的作用是什么?
    • cctype库是C++继承自C语言的字符函数库,它包含了一系列函数
    • 用于判断字符的属性,如是否为字母、数字、标点符号等。它的作用是简化字符相关操作,使其更容易和通用。
  2. 能判断什么?
    • 可以根据以下属性来判断字符的类型:
      • 是否为字母数字(字母或数字):isalnum()
      • 是否为字母:isalpha()
      • 是否为控制字符:iscntrl()
      • 是否为数字:isdigit()
      • 是否为除空格之外的打印字符:isgraph()
      • 是否为小写字母:islower()
      • 是否为打印字符(包括空格):isprint()
      • 是否为标点符号:ispunct()
      • 是否为空白字符:isspace()
      • 是否为大写字母:isupper()
      • 是否为十六进制数字:isxdigit()
      • 将字符转换为小写:tolower()
      • 将字符转换为大写:toupper()

条件运算符——?:;

怎么说,简简单单啦
总结:

  1. C++中有一个称为条件运算符(?:)的运算符,它是唯一需要3个操作数的运算符。
  2. 条件运算符的通用格式为:expression1 ? expression2 : expression3
  3. 如果expression1为true,则整个条件表达式的值为expression2的值;否则,整个表达式的值为expression3的值。

问题与答案:

  1. 条件运算符与if else语句有什么区别?
    • 条件运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其嵌套在更大的表达式中,使代码更简洁。而if else语句用于执行代码块,不生成一个值。区别在于条件运算符适用于简单关系和简单表达式,而if else语句更适用于复杂的条件控制流程。
  2. 如何使用条件运算符来确定两个整数中的较大值?
    • int c = a > b ? a : b;

switch语句;

不也是分支吗,多一点点细节而已;

重要概念:

  1. switch语句的结构

    • switch语句的一般格式是:
      switch (integer-expression)
      {
          case label1: statement(s)
          case label2: statement(s)
          // ...
          default: statement(s)
      }
      
    • 这个结构允许根据integer-expression的值选择不同的执行路径。
  2. switch语句的工作原理

    • 当程序执行到switch语句时,它会根据integer-expression的值跳转到相应的case标签。
    • 如果没有匹配的case标签,程序会执行default标签下的语句(如果存在)。
    • 如果在case标签中没有break语句,程序将继续执行后续的case标签中的语句。
  3. break语句的作用

    • break语句用于终止switch语句的执行,使程序跳出switch块并继续执行switch后面的语句。
    • 如果不使用break语句,程序会执行匹配的case标签及其后续的所有语句。

问题和答案

  1. switch语句与if-else语句相比有什么优势?

    • switch语句适用于在多个选项之间进行选择,特别是当选项是整数或字符时。它可以使代码更清晰和易读,而不需要嵌套if-else语句。
  2. 为什么要使用break语句?

    • 使用break语句可以确保在找到匹配的case后立即退出switch块,避免执行后续的case标签。这有助于控制程序的流程。
      可以将枚举用于标签

提示: 
如果既可以使用if else语句,也可以使用switch语句,则当选项不少于3个时,应使用switch语句。

continue和break语句;

还能说什么,太简单了,看图就行
在这里插入图片描述

goto语句

goto语句:

char ch;
cin >> ch;
if (ch == 'P')
      goto paris;
cout << ...
...
paris: cout << "You've just arrived at Paris.\n";

goto语句允许程序跳转到代码中的标签位置。
在示例中提到了goto paris;,这将使程序跳转到标签paris:处执行代码。

为什么要避免使用goto语句?

使用goto语句会导致代码变得难以理解和维护,因为它允许在代码中跳转到不同的位置,使控制流难以跟踪。
结构化控制语句(如循环和条件语句)提供了更清晰的控制流。

读取数字的循环;

重要概念和可能的问题的总结:

  1. cin和输入错误处理

    • 在C++中,可以使用cin来读取用户输入,并进行相应的处理。如果用户输入不匹配所期望的类型,cin会将错误标志设置为failbit,不匹配的输入将被留在输入队列中;并且进一步的输入将被忽略。
  2. 清除错误状态

    • 当用户输入不匹配的内容时,需要使用cin.clear()来重置cin的错误状态,以便继续接受输入。这通常是在处理输入错误时的一部分。
  3. 删除错误输入

    • 使用cin.get()来删除输入缓冲区中的错误输入。这样可以确保下一次输入不受之前的错误输入的影响。

可能的问题和答案

  1. 为什么需要在读取输入之前重置cin的错误状态?

    • cin的错误状态被设置为failbit时,它将拒绝进一步的输入。因此,需要使用cin.clear()来重置错误状态,以便继续读取输入。
  2. 为什么要使用内部的while循环来删除错误输入?

    • 内部的while循环用于清除输入缓冲区中的错误输入,以确保不会对后续输入产生干扰。这是一种处理输入错误的一般方法。
while (cin.get() != '\n')
        continue; // get rid of bad input
  1. 如何确定循环何时终止?
    • 在示例中,循环在达到最大输入次数时终止。这是通过在循环中维护一个计数器并检查它的值来实现的。还可以使用其他条件来终止循环,例如用户输入特定的终止字符。

基本文件输入/输出。

基本概念:

  1. 文本I/O和文本文件

    • 文本I/O指的是将数据作为文本(字符编码)进行输入和输出。在C++中,cincout等标准流用于文本I/O。文本文件是存储文本数据的文件,其中每个字节都包含字符编码。
  2. 数据类型与文本输入

    • 不同的数据类型处理文本输入时,cin的行为不同。char接收字符编码,intdouble接收数字并将其转换为适当的数据类型,char数组接收字符编码并存储为字符串。
  3. 字符数组和cin.getline()

    • 使用字符数组时,cin会将字符编码存储在数组中。使用cin.getline()时,cin会读取直到遇到换行符,并将整行文本存储在数组中,以字符串形式。
  4. 文本文件 vs. 二进制文件

    • 文本文件包含字符编码,适合存储文本数据,易于人类阅读。二进制文件存储数据的二进制表示,用于存储非文本数据,如图像、音频等。
  5. 文本编辑器和源代码文件

    • 文本编辑器用于创建和编辑文本文件,例如代码文件。源代码文件本质上是文本文件,可以使用文本编辑器来查看和编辑。

问题和答案

  1. 为什么不同数据类型处理文本输入时,cin的行为不同?

    • 不同数据类型的变量需要不同的数据表示。cin会根据变量的数据类型执行适当的转换,将输入文本转换为相应的数据类型。
  2. 什么是字符编码?

    • 字符编码是将字符映射到数字的规则。常见的字符编码包括ASCII和UTF-8,它们将字符映射到整数值。
  3. 什么是二进制文件?

    • 二进制文件存储数据的二进制表示形式,而不是字符编码。它们通常用于存储非文本数据,如图像、音频和可执行程序。
  4. 如何创建和编辑文本文件?

    • 可以使用文本编辑器(如记事本、vi、emacs等)来创建和编辑文本文件。也可以使用源代码编辑器来编辑源代码文件,因为源代码文件也是文本文件。
  5. 文本文件和二进制文件有什么区别?

    • 文本文件包含字符编码,易于人类阅读,用于存储文本数据。二进制文件包含数据的原始二进制表示,通常用于存储非文本数据。

前面第五章我们说过可以通过重定向来将文本文件输入
关于文本文件输入的总结

  1. 头文件和命名空间

    • 首先,必须包含头文件 <fstream> 来进行文件输入操作。
    • 使用命名空间 std 来引用文件输入相关的元素。
  2. 创建 ifstream 对象

    • 声明一个 ifstream 对象,用于进行文件输入。您可以选择一个合适的名称,只需遵守 C++ 的命名规则。
ifstream inFile;          // inFile an ifstream object
ifstream fin;             // fin an ifstream object
  1. 关联文件
    • 使用 open() 方法将 ifstream 对象与特定文件关联。该方法接受文件名作为参数,可以是字符串常量或存储在字符数组中的文件名。
inFile.open("bowling.txt"); // inFile used to read bowling.txt file
char filename[50];
cin >> filename;            // user specifies a name
fin.open(filename);         // fin used to read specified file
  1. 读取文件数据
    • 使用 >> 运算符将各种类型的数据从文件中读取到程序中,就像使用 cin 一样。
    • 使用 getline() 方法可以读取一行字符。
    • 使用 eof()fail() 方法来检查输入是否成功。
double wt;
inFile >> wt;          // read a number from bowling.txt
char line[81];
fin.getline(line, 81); // read a line of text
  1. 检查文件是否打开成功

    • 使用 is_open() 方法来检查文件是否成功打开。如果文件无法打开,可以采取适当的措施,如退出程序。
  2. 正确设计输入循环

    • 在进行文件输入循环时,确保正确检查循环终止的条件。使用 good() 方法来判断是否继续读取文件。

问题和答案

  1. 为什么需要包含 <fstream> 头文件?

    • <fstream> 头文件包含了用于文件输入操作的相关类和函数的定义,因此必须包含它才能使用文件输入功能。
  2. 如何创建和命名 ifstream 对象?

    • 创建 ifstream 对象与创建其他类型的对象类似。您可以为对象选择一个合适的名称,只需遵守 C++ 的命名规则即可。
  3. 如何将 ifstream 对象与文件关联?

    • 使用 open() 方法,该方法接受文件名作为参数,将 ifstream 对象与指定的文件建立关联。
  4. 如何从文件中读取数据?

    • 使用 >> 运算符,将数据从文件中读取到程序中。数据的类型可以是各种基本数据类型,如整数、浮点数等。
  5. 如何检查文件是否成功打开?

    • 在实际应用中,建议使用 is_open() 方法来检查文件是否成功打开。可以使用条件语句来处理可能的打开错误。
inFile.open("bowling.txt");
if (!inFile.is_open())
{
    exit(EXIT_FAILURE);
}
  1. 如何正确设计输入循环?

    • 使用 good() 方法来检查是否继续读取文件。这可确保在读取输入之前先进行检查,并避免不必要的问题。
  2. 如何处理文件中的不同数据类型?

    • 程序必须确保文件中的数据类型与程序中的变量类型匹配。如果不匹配,可能会导致输入失败或数据错误。

关于文件输出的总结

  1. 头文件和命名空间

    • 首先,需要包含头文件 <fstream> 来进行文件输入/输出操作。
    • 使用命名空间 std 来引用文件输出相关的元素。
  2. 创建 ofstream 对象

    • 声明一个 ofstream 对象,用于进行文件输出。可以根据需要命名对象,但必须遵循命名规则。
ofstream outFile;   // outFile an ofstream object
ofstream fout;      // fout an ofstream object
  1. 关联文件
    • 使用 open() 方法将 ofstream 对象与特定文件关联。
    • 该方法接受一个文件名作为参数,可以是字符串常量或存储在字符数组中的文件名。
outFile.open("fish.txt"); // outFile used to write to the fish.txt file
char filename[50];
cin >> filename;          // user specifies a name
fout.open(filename);      // fout used to read specified file
  1. 输出到文件
    • 可以使用 ofstream 对象与 << 运算符将各种类型的数据输出到文件,就像使用 cout 输出到屏幕一样。
double wt = 125.8;
outFile << wt;            // write a number to fish.txt
char line[81] = "Objects are closer than they appear.";
fout << line << endl;     // write a line of text
  1. 关闭文件
    • 使用 close() 方法关闭文件,以确保在程序完成后正确关闭文件。
outFile.close();

可能的问题和答案

  1. 为什么需要包含 <fstream> 头文件?

    • <fstream> 头文件包含了用于文件输入/输出操作的相关类和函数的定义,因此必须包含它才能使用文件输出功能。
  2. 如何创建和命名 ofstream 对象?

    • 创建 ofstream 对象与创建其他类型的对象类似。您可以为对象选择一个合适的名称,只需遵守 C++ 的命名规则即可。
  3. 如何将 ofstream 对象与文件关联?

    • 使用 open() 方法,该方法接受文件名作为参数,将 ofstream 对象与指定的文件建立关联。
  4. 如何在文件中写入数据?

    • 使用 << 运算符,将数据输出到已关联的文件中。数据的类型可以是各种基本数据类型,以及字符串等。
  5. 为什么需要关闭文件?

    • 关闭文件是为了确保数据在文件中正确保存,并释放相关资源。如果不关闭文件,可能会导致文件损坏或数据丢失。
  6. 如果文件已经存在,会发生什么?

    • 默认情况下,如果文件已经存在,使用 open() 方法将首先截断文件,即清空文件内容,然后重新写入数据。这是为了确保文件不包含任何旧数据。但这种行为可以修改,根据需要添加或追加数据而不截断文件。
  7. 如何检查文件打开是否成功?

    • 在实际应用中,建议检查 open() 方法是否成功打开文件。可以使用条件语句来检查 open() 的返回值,以处理可能的错误情况。

问题区

条件运算符与if else语句有什么区别?

  • 条件运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其嵌套在更大的表达式中,使代码更简洁。而if else语句用于执行代码块,不生成一个值。区别在于条件运算符适用于简单关系和简单表达式,而if else语句更适用于复杂的条件控制流程。

怎么通过文本文件完成I/O操作?

<fstream> 来进行文件输入/输出操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1013988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

笔记1.1 计算机网络基本概念

计算机网络是通信技术与计算机技术紧密结合的产物 通信系统模型&#xff1a; 计算机网络是一种通信网络 计算机网络是互连的、自洽的计算机集合。 互连&#xff1a;互联互通 自洽&#xff1a;无主从关系 通过交换网络互连主机 Internet&#xff1a;数以百万计的互连的计算设…

SpringCLoud——Nacos配置中心

Nacos实现配置管理 统一配置管理 配置更新热更新 统一配置的创建是在UI界面中完成的&#xff1a; 首先我们点击【配置管理】然后点击【配置列表】&#xff1a; 然后我们就看到了配置管理界面&#xff0c;但是此时这里是空的&#xff0c;我们可以创建一些配置文件&#xff1a…

(21)多线程实例应用:双色球(6红+1蓝)

一、需求 1.双色球: 投注号码由6个红色球号码和1个蓝色球号码组成。 2.红色球号码从01--33中选择,红色球不能重复。 3.蓝色球号码从01--16中选择。 4.最终结果7个号码&#xff1a;61&#xff1b;即33选6(红) 16选1(蓝) 5.产品: …

【MySQL索引学习】MySQL索引详细学习

一、什么是索引 索引是一种用于快速查询和检索数据的数据结构。 可以将其类比于书的目录。 索引底层的数据结构存在很多种类型&#xff0c;常见的索引结构有: B 树&#xff0c; B树 和 Hash、红黑树。在 MySQL 中&#xff0c;无论是 Innodb 还是 MyIsam&#xff0c;都使用了 …

如何在 Nginx 中隐藏版本号

文章目录 修改nginx.conf文件修改fastcgi.conf文件参考文档 修改nginx.conf文件 打开 Nginx 配置文件&#xff0c;一般在 /etc/nginx/nginx.conf 或 /usr/local/nginx/conf/nginx.conf。在 http 块中添加以下内容&#xff1a;server_tokens off;修改fastcgi.conf文件 编辑php…

kafka 消费者的消费策略以及再平衡1

一kafka 再平衡 1.1 kafka的再平衡 Kafka的再平衡是consumer所消费的topic发生变化时&#xff0c;topic上的分区再次分配的情况。 默认策略是 Range CooperativeSticky 。 Kafka 可以同时使用 多个分区分配策略。 1.2 kafka触发再平衡的情况 1.consumer group中的新增或删…

Windows系统webp图片预览插件

由于工作中经常需要对组图查看和管理&#xff0c;而Windows 7系统不支持在文件夹下直接预览webp图片。经过查找&#xff0c;发现 WebP Codec for Windows 扩展插件不错&#xff0c;完美地解决webp图片预览问题。 目录 1、webp文件浏览插件 2、下载插件并安装 3、浏览webp图片…

vue项目部署,出现两个ip的原因

我宁愿靠自己的力量打开我的前途,而不愿求有力者的垂青。——雨果 tags: 篇首语&#xff1a;本文由小常识网(cha138.com)小编为大家整理&#xff0c;主要介绍了vue项目部署&#xff0c;出现两个ip的原因相关的知识&#xff0c;希望对你有一定的参考价值。 参考技术A 在部署v…

Linux网络编程|TCP编程

一.网络基础 1.1网络发展史 Internet&#xff0d;“冷战”的产物 1957年10月和11月&#xff0c;前苏联先后有两颗“Sputnik”卫星上天 1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency)&#xff0c;即国防部高级研究计划署&#…

机器学习练习-决策树

机器学习练习-决策树 代码更新地址&#xff1a;https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释&#xff1a;黄海广&#xff0c;haiguang2000wzu.edu.cn 1&#xff0e;分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if…

Jsoup | Document | HTML解析器

Jsoup 一、获取 <p>标签下的所有图片 一、获取 <p>标签下的所有图片 <p> <img style"max-width: 100%;" src"http://image.svipjf.cn/1678271098160-480_01.jpg"/><img src"http://image.svipjf.cn/1678271097994-480_02…

FPGA project: uart_rs485

没有设计rs485的顶层&#xff0c;因为我的另一块板子没有TTL信号转差分信号的芯片&#xff1a;MAX3485CSA module ctrl(input wire sys_clk ,input wire sys_rst_n ,input wire key_w ,input …

如何使用 RunwayML 进行创意 AI 创作

标题&#xff1a;如何使用 RunwayML 进行创意 AI 创作 介绍 RunwayML 是一个基于浏览器的人工智能创作工具&#xff0c;可让用户使用各种 AI 功能来生成图像、视频、音乐、文字和其他创意内容。RunwayML 的功能包括&#xff1a; * 图像生成&#xff1a;使用生成式对抗网络 (…

零基础也能快速上手活动海报设计

在现代社会中&#xff0c;活动海报设计已经成为推广活动、宣传信息的重要手段之一。然而&#xff0c;对于大部分人来说&#xff0c;设计一张漂亮的海报可能会觉得困难重重。不过&#xff0c;不用担心&#xff01;现在有了乔拓云&#xff0c;零基础的你也能轻松上手活动海报设计…

GraphBase基础原理

一、GraphBase简介 互联网时代&#xff0c;随着网络技术的发展&#xff0c;企业积累的数据越来越多。伴随着数据集的不断增加&#xff0c;传统的关系型数据库查询性能会随之变差&#xff0c;特别是针对一些特殊的业务场景&#xff0c;所以迫切的需要一种新的解决方案去应对这种…

[腾讯云 Cloud Studio 实战训练营] 云上编程的革命:我的 Cloud Studio 体验之旅

文章目录 1. 无缝的云端体验1.1 云端工作站的魅力1.2 真正的在线编程1.3 强大的协作能力1.4 多平台兼容性1.5 安全和数据备份1.6 持续更新和维护1.7 灵活的资源扩展 2. 功能强大的在线 IDE2.1 基础功能全覆盖2.2 高级功能支持2.3 多语言支持2.4 自定义工作流程2.5 版本控制和协…

单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】

文章目录 问题描述问题解决方案多边形网格化区分每个单元格是在多边形内部还是外部根据已标记单元格寻找最大内接矩形剪枝优化多角度旋转 案例测试代码实现说明 问题描述 给定一个多边形的点集&#xff0c;希望找出多边形内部面积最大的矩形。该问题可能出现在&#xff0c;从一…

Linux命令200例:cu是用于设置与终端设备通信的工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…

Netsh命令修复DNS无法上网问题

关注【潇湘信安】、【Hack分享吧】公众号&#xff0c;一起学网络安全知识&#xff01; 0x01 问题描述 今早打开电脑后突然发现上不了网了&#xff0c;TIM可以正常登录&#xff0c;浏览器打不开网页&#xff0c;出现这样情况一般都是DNS的问题&#xff0c;用ipconfig /all命令查…

Kotlin文件遍历FileTreeWalk filter

Kotlin文件遍历FileTreeWalk filter import java.io.Filefun main(args: Array<String>) {val filePath "."val file File(filePath)val fileTree: FileTreeWalk file.walk()fileTree//.maxDepth(1) //遍历层级1&#xff0c;不检查子目录.filter {it.isFile…