蓝桥杯准备训练(lesson4 ,c++)
算术操作符
5.1 算术操作符
在写代码时候,⼀定会涉及到计算。为了⽅便运算,提供了⼀系列操作符,其中有⼀组操作符叫:算术操作符。分别是: + - * / % ,这些操作符都是双⽬操作符。
注:操作符也被叫做:运算符,是不同的翻译,意思是⼀样的。
#include<iostream>usingnamespace std;intmain(){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;return0;}易错点:
• / 除法的操作符,除数不能为0,如果除数为0,程序会崩溃的。
• % 取模操作符的计算结果是两个操作数进⾏除法运算后的余数。
• 取模操作符的操作数只能是整型,不能是浮点型,这个编译器会报语法错误的。
#include<iostream>usingnamespace std;intmain(){int a =10;int b =0;int c = a / b;float d =6.0;float e = d %2;return0;}5.2 浮点数的除法
#include<iostream>usingnamespace std;intmain(){float x =6/4; cout << x << endl;// 1float y =6.0/4;// 6/4.0结果是⼀样的 cout << y << endl;// 1.5return0;}上⾯⽰例中,尽管变量 x 的类型是 float (浮点数),但是 6 / 4 得到的结果是 1.0 ,⽽不是
1.5 。原因就在于 整数除法是整除,只会返回整数部分,丢弃⼩数部分。
如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时就会进⾏浮点数除法。
5.3 负数取模
• 负数也是⽀持取模的,但是负数求模结果的正负号由第⼀个运算数(操作数)的正负号决定
#include<iostream>usingnamespace std;intmain(){ cout <<11%-5<< endl;// 1 cout <<-11%-5<< endl;// -1 cout <<-11%5<< endl;// -1return0;}5.4 数值溢出
前⾯我们了解到数据类型都有对应的数值范围,⽽在实际运算过程中可能会存在加法操作导致数据范围超过当前数据类型规定的范围,如下:
#include<iostream>usingnamespace std;intmain(){char a ='Z';char b = a +'Z'; cout << b << endl;// 输出了不显⽰的内容//printf是格式化输出,后⾯章节会讲,这⾥暂不做讲解printf("%d", b);// -76,char的⼗进制内容return0;}以 char 类型为例, char 的数值范围在 -128 ~ 127 ,当字符相加超过最⼤值后,打印出来的结
果会变成负数,这与数据的存储有关

意识到数据类型的取值是有其范围的,那么我们在编程的时候就要选择合适的数据类型,才能得到正确的结果。正所谓:⼗年 IO ⼀场空,不开 long long ⻅祖宗。
5.5 练习
练习1:计算(a+b)*c
链接:https://www.luogu.com.cn/problem/B2008
#include<iostream>usingnamespace std;int a, b, c;intmain(){ cin >> a >> b >> c;int r =(a + b)* c; cout << r << endl;return0;}练习2:带余除法
链接:https://www.luogu.com.cn/problem/B2010
#include<iostream>usingnamespace std;int a, b;intmain(){ cin >> a >> b; cout << a / b <<" "<< a % b << endl;}练习3:整数个位
链接:https://ac.nowcoder.com/acm/problem/21990
#include<iostream>usingnamespace std;int a;intmain(){ cin >> a; cout << a %10<< endl;return0;}练习4:整数⼗位
链接:https://ac.nowcoder.com/acm/problem/21991
#include<iostream>usingnamespace std;int a;intmain(){ cin >> a; cout << a %100/10<< endl;return0;}练习5:时间转换
链接:https://ac.nowcoder.com/acm/contest/18839/1031
#include<iostream>usingnamespace std;int time;intmain(){ cin >> time; cout << time /60/60<<" "<< time /60%60<<" "<< time %60<< endl;return0;}解释:
- time除以60(1分钟有60秒)先换算出分钟数,分钟数除以60(1⼩时有60分钟)交换算
成⼩时。 - time除以60(1分钟有60秒)先换算出分钟数,分钟数对60取模,就是换完⼩时后剩余的
分钟数 - time对60取模,每60秒凑1分钟,还剩多少多少秒,没办法凑够⼀分钟。
练习6:⼩⻥的游泳时间
链接:https://www.luogu.com.cn/problem/P1425
#include<iostream>usingnamespace std;intmain(){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;return0;}6.1 连续赋值
赋值操作符也可以连续赋值,如:
int a =3;int b =5;int c =0; c = b = a +3;//连续赋值,从右向左依次赋值的。虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样⽅便观察代码的执⾏细节。
6.2 复合赋值符
在写代码时,我们经常可能对⼀个数进⾏⾃增、⾃减的操作,如下代码:
int a =10; a = a +3; a = a -2;这样代码C++给提供了更加⽅便的写法:
int a =10; a +=3; a -=2;C++中提供了复合赋值符,⽅便我们编写代码,这些赋值符有:

6.3 练习
练习:交换值
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=2064
#include<iostream>usingnamespace std;intmain(){int a =0;int b =0; cin >> a >> b;int c = a;//c是⼀个临时变量,作为中间变量实现交换的 a = b; b = c; cout << a <<" "<< b << endl;return0;}