当前位置: 首页 > news >正文

C++入门(三) (算法竞赛)


🌊用有趣的言语来阐述苦涩难懂的代码世界,让每一个技术都充满风趣!
🔭个人主页:散峰而望
🚀学习方向: C/C++等方向
📌专栏系列:

  • 📖《C语言:从基础到进阶》
  • 📚《编程工具的下载和使用》
  • 🚀《C语言刷题》
  • ⚖️《算法竞赛从入门到获奖》

💬人生格言:冀以尘雾之微,补益山海,荧烛末光,增辉岁月。

🎬博主简介

请添加图片描述

请添加图片描述

文章目录

  • 前言
  • 算术操作符
    • 5.1 算数操作符
    • 5.2 浮点数的除法
    • 5.3 取模
    • 5.4 数值溢出
    • 5.5 练习
  • 6. 赋值操作符
    • 6.1 定义
    • 6.2 连续赋值
    • 6.3 复合赋值符
    • 6.3 练习
  • 7. 类型转换
    • 7.1混合运算时的类型转换
    • 7.2 赋值时类型转换
    • 7.3 强制类型转换
    • 7.4 练习
  • 8. 单目操作符
    • 8.1 ++和--
      • 8.1.1 前置++和后置++
      • 8.1.2 前置--后置--
    • 8.2 +和-
  • 结语


前言

我们在前面已经对C++程序有着基础的认知,对数据结构变量和常量也有所了解。接下来将会对算数操作符赋值操作符等进行一一了解,为接下来的C++输入输出做好准备。

算术操作符

5.1 算数操作符

在写代码时候,一定会涉及到计算。为了方便运算,提供了一系列操作符,其中有一组操作符叫:算术操作符。分别是:+ - * / %,这些操作符都是双目操作符

注:操作符也被叫做:运算符,是不同的翻译,意思是一样的。

代码如下:

#include <iostream>
using namespace std;
int main()
{int a = 5 + 2;   //加法运算 int b = 5 - 2;   //减法运算 int c = 5 * 2;   //乘法运算 int d = 5 / 2;   //除法运算,得到的是整除后的商 int e = 5 % 2;   //取余运算,得到的是整除后的余数 cout << a << endl;cout << b << endl;cout << c << endl;cout << d << endl;cout << e << endl;return 0;
}

在这里插入图片描述

易错点:

  • /除法的操作符,除数不能为0,如果除数为0,程序会崩溃的。
  • %取模的操作符的计算结果是两个操作数进行除法运算后的余数。
  • 取模操作符的操作数只能是整型,不能是浮点型,这个编译器会报语法错误的。

代码如下:

#include <iostream>
using namespace std;
int main()
{int a = 10;int b = 0;int c = a / b;float d = 6.0;float e = d % 2;return 0;
}

在这里插入图片描述

5.2 浮点数的除法

浮点数的除法有点奇特,并不是只要给他定义为浮点数就能打印出小数点。代码如下:

#include <iostream>
using namespace std;
int main()
{float x = 6 / 4;cout << x << endl;          // 1float y = 6.0 / 4;          // 6/4.0结果是一样的 cout << y << endl;          // 1.5return 0;
}

在这里插入图片描述

上面示例中,尽管变量x的类型是float(浮点数),但是6 / 4得到的结果是1.0,而不是1.5。原因就在于整数除法是整除,只会返回整数部分,丢弃小数部分。哪怕定义为浮点数,也会输出的值为整数。

如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数,这时就会进行浮点数除法。

当然,如果你定义的为int,哪怕你两边都有浮点数,都没有用。代码如下:

int main()
{float x = 6 / 4;cout << x << endl;          // 1int y = 6.0 / 4;          // 6/4.0结果是一样的 cout << y << endl;          // 1.5return 0;
}

在这里插入图片描述
如果规定输入为整数,但是除法后得到的值必须为浮点型,那我们该怎么做?

  • 强行转换(后面会讲,不过不推荐)
  • 乘以一个浮点型1.0就行了,代码如下:
int main()
{int a = 5;float f = a * 1.0 / 4;//1.25float b = a / 4;//1cout << f << endl;cout << b << endl;return 0;
}

在这里插入图片描述

5.3 取模

%取模的操作符的计算结果是两个操作数进行除法运算后的余数。

  • 取模操作符的操作数只能是整型,不能是浮点型。
  • 负数求模结果的**正负号由第一个运算数(操作数)**的正负号决定。代码如下:
int main()
{cout << 9 % -4 << endl;          // 1cout << -9 % -4 << endl;         // -1cout << -9 % 4 << endl;          // -1return 0;
}

在这里插入图片描述

5.4 数值溢出

前面我们了解到数据类型都有对应的数值范围,而在实际运算过程中可能会存在加法操作导致数据范
围超过当前数据类型规定的范围,代码如下:

#include <iostream>
using namespace std;
int main()
{char a = 'Z';char b = a + 'Z';cout << b << endl;     // 输出了不显示的内容 //printf是格式化输出,后面章节会讲,这里暂不做讲解 printf("%d", b);      // -76,char的十进制内容 return 0;
}

在这里插入图片描述
以char类型为例,char的数值范围在-128 ~ 127,当字符相加超过最大值后,打印出来的结果会变成负数,这与数据的存储有关,感兴趣的同学可以拓展学习。当然与数据的存储相关内容后面会讲。

当然我们也可以不用printf表示,可以对b的类型强制转换一下。代码如下:

在这里插入图片描述

第一行无法输出是因为超出char的数值范围,所以转换为整型来表示。可以看到打印的为-76,说明数值溢出了76,具体可以参考下图进行了解:

在这里插入图片描述

提示:可以类推其他类型

意识到数据类型是有范围的,如果选错范围也会造成不小的影响,所以要大致记一下各数据类型的取值范围。编程只有选择合适的数据类型,才能得到真确的结果。

5.5 练习

了解算数操作符,那么来几道题趁火打铁一并练习一下吧!练习题过两天会详细的进行讲解。

计算 (a+b)×c 的值

整数的十位

时间转换

6. 赋值操作符

6.1 定义

在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。

int a = 100;     //初始化 
a = 200;         //赋值

赋值操作符=是一个随时可以给变量赋值的操作符,赋值运算符是把右边的值赋值给左边的,和数学中的书写习惯是不同的。

6.2 连续赋值

赋值操作符也可以连续赋值,代码如下:

int a = 1;
int b = 2;
int c = 0;
c = b = a + 3;     //连续赋值,从右向左依次赋值

虽然支持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样方便观察代码的执行细节。

int a = 1;
int b = 2;
int c = 0;
b = a + 3;
c = b;

这样写,在调试的时候,每一次赋值的细节都是可以很方便的观察的。

6.3 复合赋值符

写代码时,我们经常可能对一个数进行自增、自减的操作,如下代码:

int a = 10;
a = a + 3;
a = a - 2;

C++提供了更加方便的写法:

int a = 10;
a += 3;
a -= 2;

C++中提供了复合赋值符,方便我们编写代码,这些赋值符有:

复合赋值符样例一般写法
+=a += 10a = a + 10
-=a -= 10a = a - 10
*=a *= 10a = a * 10
/=a /= 10a = a / 10
%=a %= 10a = a % 10
>>=a >>= 1a = a >> 1
<<=a <<= 1a = a << 1
&=a &= 10a = a & 10
^=a ^= 10a = a ^ 10

|=,a |= 10,a = a | 10(由于文本编辑器问题,所以在这里展示)

6.3 练习

了解赋值操作符,那么来几道题趁火打铁一并练习一下吧!练习题过两天会详细的进行讲解。

交换值

7. 类型转换

使用C/C++写代码的过程中,不同类型的数据进行混合计算的时候,或者赋值时等号两边的类型不统一的时候,都会发生类型转换,这时就需要根据类型的转换规则转换成合适的类型。

7.1混合运算时的类型转换

字符、整数、浮点数可以混合运算,在这种情况下首先要将不一致的数据类型进行转换,类型统一后才能进行计算。

这里边一般涉及两类转换:整型提升和算术转换。

  • 整型提升:表达式之中的char和short类型一定会先转换成int类型,然后参与运算。

  • 算术转换:表达式中出现下面的任意两种类型的值进行计算的时候,要先要将较下面的类型转换成另
    外一种类型才能计算。

long double          ^
double               |
float                |unsigned long int    |long int             |unsigned int         |int                  |

这些转换都是隐式自动发生的,不需要操心细节。

int main()
{char a = 'a';int b = 10;char c = a + b; //这里a会发生整型提升,a+b的结果存放到c中,又发生截断 cout << c << endl;int c = 10;double d = 3.14;double e = c + d; //c+d的时候,这里c会发生算数转换,转换为double类型 cout << e <<endl;return 0;
}

在这里插入图片描述

7.2 赋值时类型转换

当赋值操作符两端的数据类型不一致的时候,这时就需要类型转换,这种转换也是隐式自动发生的。转换规则如下:

  1. float和double赋值给int,直接截断小数部分,保留整数部分。
int a = 3.14;//这里a得到的是3 
  1. 较小的类型转换较大类型,直接转换,值不变。
  2. 较大的类型转换较小的类型,一般会发生截断,按照较小类型的⻓度,保留低位数据给较小的类型。

这些转换都是隐式自动发生的,有些编译器会报警告,写程序的人并没有感知到,也不需要操心细节。

7.3 强制类型转换

在C/C++中也会有强制类型转换,根据实际的需要将某一数据的数据类型转换为指定的数据类型,强制类型转换是临时转换的,不影响变量本身的类型。语法形式如下:

(类型名)表达式
double d = 3.14;
int a = (int)d;

上面的代码是将double类型的3.14转换成int类型的值,赋值给a。

7.4 练习

了解类型转换,那么来几道题趁火打铁一并练习一下吧!练习题过两天会详细的进行讲解。

成绩

浮点数向零舍入

打印 ASCII 码

8. 单目操作符

前面介绍的操作符都是双目操作符,即有2个操作数。除此之外还有一些操作符只有一个操作数,被称为单目操作符。如++、–、+(正)、-(负) 就是单目操作符。

8.1 ++和–

++是一种自增的操作符,又分为前置++和后置++,–是一种自减的操作符,也分为前置–和后置–

注意:

  • 前置++ 或者后置++,都是让操作数自增1的
  • 前置-- 或者后置–,都是让操作数自减1的

8.1.1 前置++和后置++

int x = 10;
int a = ++x;             //++的操作数是x,是放在x的前面的,就是前置++ 
cout << x << " " << a << endl;int x = 10;
int a = x++;               //++的操作数是x,是放在x的后面的,就是后置++ 
cout << x << " " <<  a << endl;

技巧:
前置++:先+1,后使用
后置++:先使用,后+1

8.1.2 前置–后置–

int y = 10;
int b = --y;             //--的操作数是y,是放在y的前面的,就是前置-- 
cout << y << " " <<  b << endl;int y = 10;
int b = y--;                //--的操作数是y,是放在y的后面的,就是后置-- 
cout << y << " " << b << endl;

技巧:
前置–:先-1,后使用
后置–:先使用,后-1

8.2 +和-

这里的+是正号,-是负号,都是单目操作符

运算符+对正负值没有影响,是一个完全可以省略的运算符,但是写了也不会报错。

int a = +10;  //等价于  int a = 10; 

运算符-用来改变一个值的正负号,负数的前面加上-就会得到正数,正数的前面加上-会得到负数。

int a = 10;
int b = -a;
int c = -10;
cout << b << c << endl;   //这里的b和c都是-10 
int a = -10;
int b = -a;
cout << b << endl;        //这里的b是10

结语

至此,C++入门(算法竞赛)已完结撒花。希望这篇文章可以助各位敲开算法竞赛的大门,初识C++的奥秘,去探寻算法世界的精妙。接下来我们就要深入C++的输入输出,期待各位前来学习。

同时愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天

在这里插入图片描述

请添加图片描述

http://www.dtcms.com/a/578220.html

相关文章:

  • 遵义市网站建设网络营销产品推广
  • Docker-仓库-镜像制作
  • 网站增值业务一手项目对接app平台
  • easyExcel单元格动态合并示例
  • 《嵌入式驱动(十一):I2C子系统架构》
  • Android 多版本Toast版本区别以及使用可能遇到的问题
  • 集团高端网站建设公司wordpress侧边栏文件
  • 【Java面向对象编程入门:接口、继承与多态】
  • 百度联盟的网站怎么做企业网站的设计要求有哪些
  • 别墅花园装修设计公司wordpress 网址优化
  • 云服务器可以做虚拟机吗?
  • 计算机操作系统:文件存储空间的管理
  • 【stm32协议外设篇】- PAJ7620手势识别传感器
  • 网站增加权重吗免费ip地址
  • “工业数据库怎么选”之一:深度解析 PI System vs TDengine
  • 如何做好网站盘锦网站建设策划
  • k8s kubelet Nameserver limits exceeded
  • 供暖季技术实战:益和热力用 TDengine 时序数据库破解热力数据处理难题
  • 蔡甸建设局网站jsp源码做网站
  • AI代码开发宝库系列:Dify本地化部署和应用
  • 推荐高性能MCU微控制器N32H785EC(MCU单片机特征)
  • Bayes/BO-CNN-GRU、CNN-GRU、GRU三模型多变量回归预测Matlab
  • 免费做国际贸易的网站打广告专用图
  • 云南固恒建设集团有限公司网站wordpress主题结合
  • 深度与高程计算:OpenGL RTT技术解析
  • Rust 练习册 10:多线程基础与并发安全
  • 电子商务网站建设评估工具办公宽带多少钱一年
  • Razor VB 变量详解
  • 输入一个故事主题,使用大语言模型生成故事视频【视频中包含大模型生成的图片、故事内容,以及音频和字幕信息】
  • 英文网站首页优化中信建设有限责任公司招投标