C++ Prime Plus学习笔记:第六章 分支语句和逻辑运算符

本文详细介绍了C++中的分支语句和逻辑运算符,包括if语句的不同形式、逻辑运算符(OR、AND、NOT)的使用及优先级,以及switch语句的应用。此外还介绍了字符函数库cctype的函数及其用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

6.1. if语句

if(test-condition)
    statement;

if(test-condition)
    statement1;
else
    statement2;

6.2. 逻辑表达式

6.2.1. 逻辑OR运算符:||

if(test-condition1 || test-condition2)
    statement;

有一个为真,那么表达式就会为真。如果左边的为真,那么就不会去判定右边的表达式。

6.2.2. 逻辑AND运算符:&&

if(test-condition1 && test-condition2)
    statement;

两个都真,表达式才会真。

6.2.3. 用&&来设置取值范围

if(age > 17 && age < 35);

6.2.4. 逻辑NOT运算符:!

if(!(x > 5));

6.2.5. 逻辑运算符细节

逻辑或和逻辑与运算符的优先级都低于关系运算符

也就是说

x > 5 && x < 10

将被解释为

(x > 5) && (x < 10)

另一方面,!运算符的优先级高于所有的关系运算符和算数运算符。因此,如果要对表达式求反,那么必须用括号把它括起来

!(x > 5)	// is iit false that x is greater than 5
!x > 5	// is !x greater than 5

第二个表达式总是为false,因为!x的值只能为true或false,它们将被转换为1或0

逻辑与运算符的优先级高于逻辑或的运算符

age > 30 && age < 45 || weight > 300

将被解释为

(age > 30 && age < 45) || weight > 300

6.2.6. 其他表示方式

在C++当中,还能用 and or not来表达这三个表达式

6.3. 字符函数库 cctype

C++从C语言继承了一个与字符相关的软件包,可以简化比如确定字符是否为大写字母、数字、标点符号等工作,这些函数的原型是在头文件cctype(老式风格为ctype.h)中定义的。

函数名称 返回值
isalnum() 如果参数是字母数字,即字母或者数字,函数返回true
isalpha() 如果参数是字母,函数返回true
iscntrl() 如果参数是控制字符,函数返回true
isdigit() 如果参数是数字(0-9),函数返回true
isgraph() 如果参数是除空格之外的打印字符,函数返回true
islower() 如果参数是小写字母,函数返回true
isprint() 如果参数是打印字符(包括空格),函数返回true
ispunct() 如果参数是标点符号,函数返回true
isspace() 如果参数是标准空白字符,如空格、换行符、水平或垂直制表符,函数返回true
isupper() 如果参数是大写字母,函数返回true
isxdigit() 如果参数是十六进制数字,即0-9、a-f、A-F,函数返回true

tolower() 如果参数是大写字符,返回其小写,否则返回该参数
toupper() 如果参数是小写字符,返回其大写,否则返回该参数

6.4. ? : 运算符

expression1 ? expression2 : expression3;

5 > 3 ? 10 : 12;
// 如果5大于3,那么表达式的值为10,否则为12。

6.5. switch语句

switch(integer-expression){
    case label1:
        statement(s);
    case label2:
        statement(s);
    ...
    default:
        statement(s);
}

switch(choice){
    case 1:
        cout << "1" << endl;
        break;
    case 2:
        cout << "2" << endl;
        break;
    default:
        cout << "default" << endl;
}

6.5.1. 将枚举变量用作标签

通常,cin无法识别枚举类型。因为程序要求用户选择选项时输入一个整数。当switch语句将int值和枚举量进行比较时,会将枚举量提升为int。另外,在while循环条件当中,也会将枚举量提升为int类型。

6.5.2. switch 和if else

switch不是用来处理取值范围的。

if else可以。

6.6. break和continue语句

break跳过所有循环

continue跳过本次循环

6.7. 读取数字的循环

#include <iostream>
const int MAX = 5;
using namespace std;
int main(){
    double fish[MAX];
    cout << "please enter the weights of your fish.\n";
    cout << "you may enter up to " << MAX
        << " fish <q to terminate>.\n";
    cout << "fish #1: ";
    int i = 0;
    while(i < MAX && cin >> fish[i]){
        if(++i < MAX) cout << "fish #" << i + 1 << ": ";
    }
    double total = 0.0;
    for(int j = 0; j < i; j++) total += fish[j];
    if(i == 0) cout << "no fish\n";
    else cout << total / i << " = average weight of "
        << i << " fish\n";
    cout << "done.\n";
    return 0;
}

6.8. 简单文件输入/输出

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

cin输入时,程序将输入视为一系列的字节,每个字节都被解释为字符编码。不管目标数据类型是什么,一开始都是字符数据。然后cin对象负责将字符数据,也就是文本转化为其他类型。

如果在输入的时候,输入:

38.5 19.2

char ch;

cin >> ch;

这个会在ch当中存储第一个字符,也就是3

int n;

cin >> n;

这种情况下,cin会不断读取,知道遇到非数字字符。也就是,它将读取3和8。n中保存的将是38这个整数数值。

double x;

cin >> x;

这种情况下,会不断读取,直到遇到第一个不属于浮点数的字符。也就是说,cin读取3、8、句点和5。那么x中保存的将是38.5。

char word[50];

cin >> word;

在这种情况下,word数组将会保存38.5和一个空字符。

char word[50];

cin.getline(word, 50);

这种情况下,cin将不断读取,直到遇到换行符。所有字符都将被存储到数组word中,并在末尾加上一个空字符。换行符被丢弃,输入队列中的下一个字符是下一行中的第一个字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值