Appearance
L1-06 数学表达式
数学表达式
我们要计算机帮我们完成各种各样有难度的任务,都离不开做运算的过程。所有的运算都需要运算符连接,用以告诉计算机我们要做的是哪一种运算。
在写程序的时候我们可能会用到 + - * ()
这些符号,和我们在数学上进行四则运算的 + − × ()
相对应,实际上四则运算中的除法 ÷
在计算机语言上也有对应的符号 /
。这些符号都被称为运算符,是用来对值或变量做运算的,计算机语言中还有很多有趣的运算符,比如三目运算符 ? :
,一元运算符 !
,让我们通过之后两节的学习来认识这些有趣的运算符吧!
算术运算符
运算符名称 | 运算符符号 | 数学符号 | 举例 | 备注 |
---|---|---|---|---|
加号 | + | + | 1+1 -> 2 | 无 |
减号 | - | - | 5-3 -> 2 | 无 |
乘号 | * | × | 7*6 -> 42 | 书写形式不同 |
除号 | / | ÷ | 18/3 -> 6 | 注意变量类型 |
取余 | % | 无 | 14%3 -> 2 | 计算机特有 |
括号 | () | () | (1+2)*3->9 | 无 |
加减乘法括号
计算机语言中的算术运算符+ - *
与四则运算中的+ - *
用法相同,都是用来计算两个数的和或差的。在 C++ 中,乘除法的优先级也高于加减法,所以这个时候与数学运算类似,可以通过括号改变运算的优先级。
需要注意的是,在计算机语言中,+ - *
可以代表其他的含义,以 -
为例,当其不用在两个量(变量或值)之间而是用在某一个量(记为 a ) 的前面时,用来使这个整体等于 a 的相反数。
text
a=-9 //-a->9
b=7 //-b->-7
但需注意,当 - 表示负号时,即使用在变量前面,只会让 “-变量”这个整体的值等于变量本身的值的相反数,不会改变变量里面存储的值。
c++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a;
a = 3;
cout << -a << endl;
cout << a << endl;
return 0;
}
输出内容如下:
text
-3
3
单选题
运行下面这段程序,将会输出()?
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int n = 60000;
long long m = n * n;
if (m > 100000000)
cout << "Yes";
else
cout << "No";
return 0;
}
A. Yes
B. No
题解
B
1、因为你的n是int型的,n*n也int类型它超出了int的范围,所以溢出,就变成负数 因此输出:No 2、若把int 改为long long 则输出Yes
除法
为什么要把除法单独列出来呢?因为计算机中的除法有其特殊之处。
我们试着运行下面这份代码:
c++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
a = 5;
b = 2;
cout << a/b << endl;
return 0;
}
我们都知道 5 除以 2 等于 2.5 ,那么我们就来运行一下看看计算机怎么说。
text
2
看到结果是 2 的同学是不是有一种把电脑送去维修的冲动?
又或者怀疑自己学了假的除法?
其实这和 C++ 语言的取整操作有关,我们看到 a,b 这两个变量的数据类型都是 int ,即三个变量存储的值都是整数,那么他们运算得到的结果也必须是整数,于是就只取其 2.5 的整数部分作为 a/b 的结果,因此我们看到输出的 a/b 的值为 2 。
那么再来看下面这份代码:
c++
#include<bits/stdc++.h>
using namespace std;
int main()
{
int c;
c = 5.0/2.0;
cout << c << endl;
return 0;
}
好嘛!现在是两个小数进行运算了,总能输出正确的结果 2.5 给我了吧?
来运行一下看看:
text
2
咦?怎么还是 2 啊?
其实关键在于存储 5.0/2.0 的这个变量 c,变量 c 的数据类型是 int ,意味着 c 只能用来存储整数,所以和刚才一样,取了 2.5 的整数部分 2 存入变量 c 中。解决办法是将 c 的变量类型改成 double 型。
c++
#include<bits/stdc++.h>
using namespace std;
int main()
{
double c;
c = 5.0 / 2.0;
cout << c << endl;
return 0;
}
取余运算符%
取余运算符的运算法则很简单,正如他的名字一样,是用来计算余数的。
用数学语言来描述就是: 若 a=q∗b+r ,其中 0<=r<b ,则 a
例:
text
18%4=2
8%3=2
23%8=7
注: 取余运算又称取模
单选题
下列取余计算结果正确的是( )。
A. 15%4=3
B. 23%6=3
C. 12%2=6
D. 5%2=2
题解
A
15%4=3 23%6=5 12%2=0 5%2=1
单选题
假定 x 和 y 是整型,值分别是 18 和 4,则 x%y 和 x/y 的值分别为 2 和 4.5。
A. 正确
B. 错误
题解
B
因为x和y都是整型,且x=18,y=4 所以:x%y=2 x/y=4
数学表达式
单选题
所有的表达式都有值
A. 正确
B. 错误
题解
所有的表达式都有值
在为变量赋值的内容中,我们讲解了很多种为变量赋值的方法,等号(=)右边的部分,都可以统称为数学表达式。
text
int a = 3, b = 4, c = 5, d;
d = a * b + c; //d = 17
其中 a∗b+c 就是一个数学表达式。使用数学表达式赋值,等号(=)左边一定是单独的变量,不可以是另一个表达式,例如:
text
int a = 3, b = 4, c = 5, d;
d + c = a * b;
这段程序会产生编译错误。此外,还有一些特殊的表达式赋值方法,例如:
text
int a = 3, b = 4, c = 5;
a += c + 1; // a = 9
b *= c + 1; // b = 24
这段程序等同于下面的程序:
text
int a = 3, b = 4, c = 5;
a = a + (c + 1); // a = 9
b = b * (c + 1); // b = 24
在之前讲解强制类型转换时,我们曾以 int 和 long long 为例,讲解过表达式计算的规则,这里再重复强调一下。
text
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 5;
double b = a / 2;
cout << b;
return 0;
}
这段程序输出的结果为 2 。
text
2
如果需要得到准确的结果,请将程序改为:
text
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 5;
double b = a * 0.5;
cout << b;
return 0;
}
单选题
下面数学表达式赋值正确的是( )。
A. int a = 3, b = 4, c = 5, d; d = a * b + c;
B. int a = 6, b = 9, c = 3, d; d + c = a * b;
C. int a = 2, b = 1, c = 4, d; c/a= b * d;
D. int a = 3, b = 4, c=15, d; a* b = c - d;
题解
A
正确的赋值语句,等号的左边只能有一个变量
C++运算符概述
本章的内容是数学表达式,我们知道一个数学表达式是由变量、数字、括号以及算数运算符组成的。
除了数学表达式, C++ 中还有逻辑表达式。逻辑表达式同样是由变量、数字、括号以及逻辑运算符组成的。
不同的表达式使用不同的运算符, C++ 中的运算符可以简单划分为几类:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
运算符 | |
---|---|
算术运算符 | +, −, ∗, /, %, ++, −− |
关系运算符 | ==, !=, >, <, >=, <= |
逻辑运算符 | &&, |, ! |
位运算符 | &, |, ^, <<, >> |
赋值运算符 | =, +=, −=, ∗=, /= |
这些运算符的定义,并非天生被 C++ 支持,比如 double 类型,不支持 %
运算。每种运算符,只被某些类型采用。
未来还会学到自己定义新的类型,对于这些类型,我们可以自己定义运算符的计算处理方法,这里不展开讲解。
习题
课堂练习:启蒙练习-取余V2
给出两个正整数a,b,请你求出a除以b的商与余数。
输入格式
输入两个数a,b,以空格隔开。
输出格式
输出两个整数,分别表示商和余数,以空格隔开。
输入样例
text
5 3
输出样例
text
1 2
数据范围
对于35%的数据,1≤a,b≤500; 对于100%的数据,1≤a,b≤10000;
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a / b << ' ' << a % b << endl;
return 0;
}
按照题目要求,声明 2 个变量 x,y ,然后利用 cin 读取 x,y 输入的值。
两个 int 类型的变量做除法,得到的结果也是整数,而不是小数,因此直接输出 x/y 和 x%y 的结果即可。
注意: 2 个结果中间需要输出空格。
课后作业:启蒙练习-矩形
已知有一个矩形,它的长和宽分别为a,b,请你求出这个矩形的周长和面积。
输入格式
输入两个数a,b,分别表示矩形的长和宽。
输出格式
输出两个数,分别表示矩形的周长和面积。
输入样例
text
2 4
输出样例
text
12 8
数据范围
对于20%的数据,1≤a,b≤20; 对于100%的数据,1≤a,b≤10000;
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
long long a, b;
cin >> a >> b;
cout << (a+b)*2 << ' ' << a * b << endl;
return 0;
}
按照题目要求,声明 2 个变量 a,b ,分别用于存储矩形的长和宽,然后利用 cin 读取 a,b 输入的值,输出 (a+b)×2 和 a×b 的结果。注意中间输出空格。