04.循环语句 & 逻辑运算符

yyyylllll / 2024-08-31 / 原文

4.循环语句 and 逻辑运算符

4.1 for循环

for循环的基本结构为:

两个分号是必不可少的,用while表示for可以写为:

如果在for循环中,第一部分被省略,C++会假定判断条件始终为真,循环一直进行。

程序经常在循环体中显示控制变量值或在计算中使用它,但这种使用不是必需的。控制变量通常用于控制迭代,尽管控制变量的值可以在for循环的主体中更改,但应避免这样做是因为这种做法可能会导致细微的错误。如果程序必须修改循环体中控制变量的值,请使用while而不是for。

setw(int n)是c++中在输出操作中使用的字段宽度设置,设置输出的域宽,n表示字段宽度。只对紧接着的输出有效,紧接着的输出结束后又变回默认的域宽。当后面紧跟着的输出字段长度小于n的时候,在该字段前面用空格补齐;当输出字段长度大于n时,全部整体输出。头文件为#include

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    // 开头设置宽度为 4,后面的 runoob 字符长度大于 4,所以不起作用
    cout << setw(4) << "runoob" << endl;
    // 中间位置设置宽度为 4,后面的 runoob 字符长度大于 4,所以不起作用
    cout << "runoob" << setw(4) << "runoob" << endl;
    // 开头设置间距为 14,后面 runoob 字符数为6,前面补充 8 个空格 
    cout << setw(14) << "runoob" << endl;
    // 中间位置设置间距为 14 ,后面 runoob 字符数为6,前面补充 8 个空格 
    cout << "runoob" << setw(14) << "runoob" << endl;
    return 0;
}

representational error---表征错误

不要使用double(或float)类型的变量来执行精确的货币计算。浮点数的不精确性可能导致错误。

clunky---笨重

类型long long和其他C++的整数类型的范围在不同的平台会有所不同。

类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

C ++中的abs()函数返回参数的绝对值。abs() 方法在C++语言中,最早的C98版本中,只对double、float、long double类型生效,不支持int类型,作用是求数据的绝对值。从C++11开始,增加了对int整型数据类型的支持。

size函数用来获取字符串长度。

**请注意,类的任何成员函数可以直接调用任何其他成员函数来对类的同一对象执行操作

Banker's Rounding:

传统的 “四舍五入” 会让数量非常大的数据计算之后偏大,因为两端距离相等的时候始终选择绝对值大的,而 “四舍六入五成双” 的 Banker's Rounding 规则会让数据两端取舍的概率均等,因为对于不同的数值,偶数可能在左边,也可能在右边,计算之后的数据不会明显偏大或偏小。Banker's rounding 就是对于0.5的情况,向最近的偶数舍入,例如0.5舍入为0,3.5和4.5都舍入为4。

4.2 switch

If no match occurs and the switch does not contain a default case, program control simply continues with the first statement after the switch.

如果没有匹配,并且不包含默认情况,程序控制只需继续执行switch后的第一条语句。

尽管case和defult可以以任意顺序出现在switch中,但还是习惯于将default放在最后,当default在最后时,break就不是必须的。

在case后,除了可以使用整数,还可以使用字符常量(以单引号包裹),还可以使用枚举常量(enum)。

注意1:switch语句中表达式类型只能是整型或者字符型。
注意2:case里如果没有break,那么程序会一直向下执行。
总结:与if语句比,对于多条件判断时,switch的结构清晰,执行效率高,缺点是switch不可以判断区间。

在case中,可以用x ... y 表示范围在[x,y]的值,两边都是闭区间。

#include <iostream>
using namespace std;

int main() {

	int month;
	cin >> month;
    if(month < 1 || month > 12) //优先判断是否合法月份
        cout << "不合法" << endl;
    else{
        switch(month){ //根据月份判断
            case 3 ... 5: //连续的值
                cout << "春季" << endl;  break;
            case 6 ... 8:
                cout << "夏季" << endl;  break;
            case 9 ... 11:
                cout << "秋季" << endl;  break;
            default:
                cout << "冬季" << endl;
        }
    }
	return 0;
}

4.3 break

break语句在while、for、do…while或switch中执行时,会导致立即退出该语句——执行从循环语句之后的第一个语句开始。

4.4 continue

continue语句在while、for或do…while中执行时,跳过循环体中的其余语句,继续循环的下一次迭代。

4.5 逻辑操作符(与或非)

C++’s logical operators enable you to form more complex conditions by combining simple conditions. 逻辑操作符包括;&&(与)、||(或)、!(非)。

boolalpha的作用是使bool型变量按照false、true的格式输出。如不使用该标识符,那么结果会按照1、0的格式输出。当使用boolalpha后,以后的bool类型结果都将以true或false形式输出,除非使用noboolalpha取消 boolalpha流的格式标志。

Lvalues can also be used as rvalues on the right side of an assignment,but not vice versa.