蓝桥杯准备训练(lesson4 ,c++)

算术操作符

5.1 算术操作符

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

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

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

易错点:

• / 除法的操作符,除数不能为0,如果除数为0,程序会崩溃的。

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

• 取模操作符的操作数只能是整型,不能是浮点型,这个编译器会报语法错误的。

cpp 复制代码
#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 浮点数的除法

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

上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是

1.5 。原因就在于 整数除法是整除,只会返回整数部分,丢弃⼩数部分。

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

5.3 负数取模

• 负数也是⽀持取模的,但是负数求模结果的正负号由第⼀个运算数(操作数)的正负号决定

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	cout << 11 % -5 << endl;// 1
	cout << -11 % -5 << endl;// -1
	cout << -11 % 5 << endl;// -1
	return 0;
}

5.4 数值溢出

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

cpp 复制代码
#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 ,当字符相加超过最⼤值后,打印出来的结

果会变成负数,这与数据的存储有关

意识到数据类型的取值是有其范围的,那么我们在编程的时候就要选择合适的数据类型,才能得到正确的结果。正所谓:⼗年 IO ⼀场空,不开 long long ⻅祖宗。

5.5 练习

练习1:计算(a+b)*c

链接:https://www.luogu.com.cn/problem/B2008

cpp 复制代码
#include <iostream>
using namespace std;
int a, b, c;
int main()
{
	cin >> a >> b >> c;
	int r = (a + b) * c;
	cout << r << endl;
	return 0;
}

练习2:带余除法

链接:https://www.luogu.com.cn/problem/B2010

cpp 复制代码
#include <iostream>
using namespace std;
int a, b;
int main()
{
	cin >> a >> b;
	cout << a / b << " " << a % b << endl;
}

练习3:整数个位

链接:https://ac.nowcoder.com/acm/problem/21990

cpp 复制代码
#include <iostream>
using namespace std;
int a;
int main()
{
	cin >> a;
	cout << a % 10 << endl;
	return 0;
}

练习4:整数⼗位

链接:https://ac.nowcoder.com/acm/problem/21991

cpp 复制代码
#include <iostream>
using namespace std;
int a;
int main()
{
cin >> a;
cout << a % 100 / 10 << endl;
return 0;
}

练习5:时间转换

链接:https://ac.nowcoder.com/acm/contest/18839/1031

cpp 复制代码
#include <iostream>
using namespace std;
int time;
int main()
{
	cin >> time;
	cout << time / 60 / 60 << " " << time / 60 % 60 << " " << time % 60 <<
endl;
	return 0;
}

解释:

  1. time除以60(1分钟有60秒)先换算出分钟数,分钟数除以60(1⼩时有60分钟)交换算
    成⼩时。
  2. time除以60(1分钟有60秒)先换算出分钟数,分钟数对60取模,就是换完⼩时后剩余的
    分钟数
  3. time对60取模,每60秒凑1分钟,还剩多少多少秒,没办法凑够⼀分钟。

练习6:⼩⻥的游泳时间

链接:https://www.luogu.com.cn/problem/P1425

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	int a, b, c, d;
	cin >> a >> b >> c >> d;
	int h, m;
	int t = c * 60 + d - a * 60 - b;//计算机出时间差,单位是分钟
	h = t / 60;
	m = t % 60;
	cout << h << " " << m << endl;
	return 0;
}

6.1 连续赋值

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

c 复制代码
int a = 3;
int b = 5;
int c = 0;
c = b = a + 3;//连续赋值,从右向左依次赋值的。

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

6.2 复合赋值符

在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:

c 复制代码
int a = 10;
a = a + 3;
a = a - 2;

这样代码C++给提供了更加⽅便的写法:

cpp 复制代码
int a = 10;
a += 3;
a -= 2;

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

6.3 练习

练习:交换值

链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=2064

cpp 复制代码
#include <iostream>
using namespace std;
int main()
{
	int a = 0;
	int b = 0;
	cin >> a >> b;
	int c = a; //c是⼀个临时变量,作为中间变量实现交换的
	a = b;
	b = c;
	cout << a << " " << b << endl;
	return 0;
}
相关推荐
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
于小猿Sup10 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
x_yeyue11 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路12 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星12 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
小小编程路12 小时前
C++ 多线程与并发
java·jvm·c++
失去的青春---夕阳下的奔跑12 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光13 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩13 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up