首页 > 其他分享 >03.控制语句、运算符及bool类型

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

时间:2024-08-31 11:25:43浏览次数:11  
标签:语句 03 初始化 int C++ else 运算符 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

标签:语句,03,初始化,int,C++,else,运算符,bool
From: https://www.cnblogs.com/yyyylllll/p/18390023

相关文章

  • django.core.exceptions.ImproperlyConfigured: 'django.contrib.gis.db.backends.mys
     没解决此问题(venv)[root@VM-8-12-centosMYPROJECT-django20240830]#python3manage.py runserver0.0.0.0:8080Exceptioninthreaddjango-main-thread:Traceback(mostrecentcalllast): File"/root/MYPROJECT/backend/venv/lib/python3.8/site-packages/django/d......
  • 037.CI4框架CodeIgniter,使用Model模型绑定数据库表
    01、我们创建一个数据库,如下:CREATETABLE`user`(`id`int(20)NOTNULLAUTO_INCREMENT,`username`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULL,`userpassword`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDE......
  • 代码随想录算法训练营,8月30日 | 203.移除链表元素, 707.设计链表, 206.反转链表
    链表理论基础1.单链表:数据域和指针域(指向下一个结点的位置)组成,头结点,结尾为空指针;双链表:多了一个指向前一个结点的指针;循环链表:结尾指向头结点。2.链表在内存中的存储不是顺序的,跟数组不同,要找一个数据只能通过前一个数据来找,所有这就导致链表的查询比数组麻烦,但是插入删除数据......
  • 基于SSM的公交车客流自动调整系统的设计与实现 毕业设计-附源码03009
    摘要随着城市公共交通需求的日益增长,公交车客流量的自动调整成为提升公交服务质量和运营效率的关键。本文提出了一种基于SSM(Spring、SpringMVC、MyBatis)框架的公交车客流自动调整系统的设计与实现方案。该系统通过实时监测公交车客流数据,结合预设的规则和策略,自动调整公交......
  • CF603E 题解
    题意给定一个\(n\)个结点的无向图,初始没有边。接下来有\(m\)个询问,每次向图中加入一条连接\((u,v)\)权值为\(w\)的边。每次加边后,查询是否存在一个边集\(E\),满足当图中只有\(E\)中的边时,所有点的度数均为奇数。同时你还要最小化\(\max\limits_{(u,v,w)\inE}......
  • 探索智能照明--关于调光降压芯片FP7102、FP7103在摄影灯上的应用
    近年来,人们在丰富多彩的日常生活中对照明设备的功能和效果提出了更高要求。而智能调光降压芯片在照明领域也成为备受关注的热门技术。尤其是FP7102和FP7103这两款具有突出性能的芯片,在摄影灯的应用中展现出了巨大优势。本文将深入探讨台湾远翔智能调光降压芯片FP7102、FP7103......
  • 小尺寸BLE 5.2低功耗串口透传蓝牙模块 - ANS-BT103M
    ANS-BT103M是安朔科技自主开发的一款小尺寸BLE蓝牙5.2模块,它支持HID、GATT、ATT和其他配置文件,使用UART作为编程接口,用户可以使用AT命令通过UART读取或写入模块的配置,支持空中升级。支持蓝牙主从一体,一对多连接,透传速率可达60KB/s,支持定制开发。产品参数:模块型号      ......
  • P7045 「MCOI-03」金牌
    题意简述给你\(n\)个数,你不知道每个数的权值。每次可以查询\(x,y\)表示查询\(x,y\)的权值是否相等,0是1否。你需要在\(2n-2\)次查询之内将这些数排成一个相邻两个数的权值不同的数列,并构造出来,或者报告无解。分析考虑在什么情况下会无解。如果存在一种数使得等于......
  • 第103期 车牌数据集
    引言在数字化和智能化浪潮的推动下,数据集的寻找和应用已成为众多研究者、开发者和工程师关注的焦点。特别是在智能交通、安全管理以及停车场管理等领域,车牌检测技术的重要性日益凸显。本文旨在深入探讨车牌检测的研究意义、重要性以及其在多个领域内的应用,以期为相关领域的研究和......
  • BZOJ 4403序列统计题解
    缅怀zxc......