03.控制语句、运算符及bool类型

3.控制语句、运算符及bool类型

3.1 算法

任何计算问题都可以通过按特定顺序执行一系列操作来解决。用以下方法解决问题的程序:

1.要执行的操作

2.这些操作的执行顺序

就叫做算法。指定程序中语句(操作)执行的顺序称为程序控制。

3.3 伪代码(Pseudocode)

使用伪代码,不必担心C++中的细枝末节。伪代码并不在计算机上执行,一个精心准备的伪代码程序可以很容易地转换成相应的C++程序。在我们的伪代码,我们通常不包括变量声明,但是一些程序员选择列出变量并说明它们的用途。

3.4 控制结构

它们使您能够指定要执行的下一个语句不一定是按顺序执行的下一个语句。这就是所谓的控制权转移(transfer of control)。所有的程序都可以用三种结构表示:顺序结构、选择结构和循环结构。C++提供了四种循环语句,while,do...while,for和range-based for。C++的关键词如下:

关键词必须小写,并且不能用作标识符。

3.5 带有初始化器的if和switch语句(C++17)

3.5.1 带有初始化器的if语句

不带初始化器的if语句:

int foo(int arg){
	return arg;
}
int main(){
	auto x=foo(42);
	if(x>40){
        //do something with x
    }
    else{
        //do something with x
    }
    //auto x=3;
}

带初始化器的if语句:

int foo(int arg){
	return arg;
}
int main(){
	//auto x=foo(42);
	if(auto x=foo(42);x>40){
        //do something with x
    }
    else{
        //do something with x
    }
    auto x=3;//名字x可以重用
}

为何使用带有初始化器的if语句:

1.本应限制于if块的变量,侵入了周边的作用域

2.若编译器确知变量作用域限于if块,则可以更好地优化代码

3.5.2 带有初始化器的switch语句

语法:

switch (initializer;variable);

示例:

switch(int i=rand()%100;i){
	case 1:
        //do something
    default:
        std::cout<<i<<endl;
        break;
}

3.6 if...else

悬挂else问题(Dangling-else Problem)。

在整个文本中,我们总是将控制语句正文括在大括号中,从而避免了一个被称为悬挂else问题的逻辑错误。else的匹配不管你if—else是如何嵌套使用,对不对齐,你看的顺不顺眼,我else只会和离得最近的if去匹配,所以要养成良好的习惯,即在if和else后都加上大括号。

3.6.1 三元运算符

?:是C++唯一的三元运算符。可以在代码中代替if...else让代码更加简洁。例如:

cout<<(studentGrade>=60? "passed":"failed");

若?前的语句为真,则执行:前的内容,反之执行:后的内容。由于此运算符的优先级较低,所以一般将整个运算符放在括号内,在if...else不能执行功能时用来代替。冒号两侧不光可以输出字符串,还可以执行操作,如下:

grade>=60?cout<<"passed":"failed";

3.7 嵌套控制语句(narrowing conversion)

使用列表初始化防止narrowing conversion

A narrowing conversion changes a value to a data type that might not be able to hold some of the possible values. For example, a fractional value is rounded when it is converted to an integral type, and a numeric type being converted to Boolean is reduced to either True or False.

在之前,初始化值可以写为

int x=12.7

此种情况下,C++会浮点部分截断,即narrowing conversion,实际上赋给x的值是12。许多编译器会给出警告,但仍然会允许编译。但是使用列表初始化,例如:

int x{12.7};
//or
int x={12.7};

就会产生编译错误,帮助你预防潜在的逻辑错误。

3.8 复合赋值运算符

3.9 递增和递减运算符

即++ 和 --

3.10 运算符优先级

3.11 布尔数据类型

C++语言在其标准化过程中引入了booltruefalse关键字,增加了原生数据类型来支持布尔数据。布尔数据类型主要与条件语句相关。

例如:

bool isMybook;
bool isRunning={false};
bool isBoy();

‍布尔数据类型与整型的转换:

整数0和布尔false互相转化

整数1和布尔true互相转化

任意非0整数和布尔true相互转化

编码规范:

布尔变量/函数的命名应该使用前缀"is"

isMale,isOpen,isVisible

posted @ 2024-08-31 11:22  yyyyyllll  阅读(32)  评论(0)    收藏  举报