内容正文:
CCF-GESP C++二级
CCF-GESP C++二级
编程能力等级认证
1
数学函数
数学函数
第五课
2
常用的数学函数
01
01
绝对值函数 abs()
平方根函数 sqrt()
max函数
min函数
随机数函数rand(),srand()
3
数学函数
头文件中<cmath> 或 <math.h>声明了很多函数来执行数学运算
数学函数 作用
abs() 计算一个数的绝对值
pow() 计算幂
sqrt() 计算数字的平方根
知识讲解
在编写C++程序时,我们有些时候会使用一些数学函数来帮我们进行一些数学运算。数学函数也是C++种函数的一种,一般都在头文件<cmath>或者<math.h>中。(cmath是C++风格的头文件,math.h是C风格的头文件,两个头文件写哪个都可以)。这里我们讲解三个<cmath>头文件中提供的数学函数。
1、abs函数,它的作用是计算一个数的绝对值
2、pow函数,它的作用是计算幂
3、sqrt函数,它的作用是计算数字的平方根
4
判断题
(2023年6月)在使用C++语言编写程序时,不能使用sqrt、abs等数学函数,包含<cmath>或<math.h>头文件后就能够使用了。
正确 错误
真题解析
解析:本题考查C++语言中的头文件,包含<cmath>或<math.h>头文件后,可以使用sqrt、abs等数学函数,所以本题正确。
5
绝对值
绝对值:指一个数在数轴上所对应点到原点的距离
0
-1
1
2
3
-3
-2
-4
4
5
-5
1
1
原点
-1
1
1
1
绝对值
绝对值
-4
4
绝对值
4
4
绝对值
知识讲解
这里我们先来讲解求绝对值的函数,首先需要知道什么是绝对值。
绝对值是指一个数,在数轴上所对应的点到原点的距离。如下是一个数轴,0为原点,其余每个店都代表一个整数。例如:-1到原点的距离是1,所以-1的绝对值就是1,1到原点的距离也是1,所以1的绝对值也是1。再举个例子,-4到原点的距离是4,所以-4的绝对值就是4,4到原点的距离也是4。
6
求绝对值函数
abs(-2);
abs(2);
abs(-3.14);
abs(3.14);
2
2
3.14
作用: 计算一个数(整数、小数)的绝对值。
语法格式: abs(x)
说明:abs函数的返回值类型与传入的参数类型相同
3.14
知识讲解
<cmath>头文件中提供的abs函数就是求绝对值的函数,它的作用就是计算一个数的绝对值,这个数可以是整数或者是小数。
例如:abs(-2)的结果为2,abs(2)的结果也是2。-2和2的绝对值都是2。
abs(-3.14)的结果是3.14,abs(3.14)的结果是3.14。-3.14和3.14的绝对值都是3.14。
7
选择题
如下哪个函数是计算一个数的绝对值( )。
sqrt
abs
min
pow
B
课堂练习
解析:选项A,sqrt函数是开平方函数,选项B,abs是求一个数的绝对值,选项C,min函数是计算两个数中的较小值,选项D,pow函数是计算x的y次幂。因此本题正确的选项为B。
8
选择题
假设 j=4,下面哪个选项是 abs(4j-5) 的结果( )
11
-1
1
0
A
课堂练习
解析:j为4时,4j的结果为16,16-5的结果为11,11的绝对值就是11,所以本题的正确选项为A。
9
幂函数
作用: 计算x(底数)的y(指数)次幂。
语法格式: pow(x,y)
说明:pow()函数返回值为double类型
23
底数
指数
pow(2,3);
8
pow(4,2);
16
pow(3,3);
27
2×2×2
8
知识讲解
幂函数:
pow函数就是幂函数,幂函数的作用就是计算x的y次幂,其中x是底数,y是指数。例如:求2的3次幂(也就是2×2×2,结果为8),其中2是底数,3是指数。
使用pow计算2的3次幂,需要在第一个参数的位置传入底数2,第二个参数的位置传入指数3,计算得到的结果为8。
还可以使用pow计算4的2次幂,4为底数,2为指数,也就是pow(4,2),计算的结果为16。
另外还可以使用pow计算3的3次幂,也就是pow(3,3)计算的结果为27。
10
选择题
与数学表达式 xn ÷ (2x - 1) 对应的C++语言表达式是( )。
xn / (2 * x - 1)
x ** n / (2 * x - 1)
pow(x, n) / (2 * x - 1)
pow(n, x) / (2 * x - 1)
C
课堂练习
解析:本题的数学表达式为xn/(2x-1)是求x的n次幂,除2x-1的结果。选项A:xn写法是错误的,选项B:C++中没有**运算符,选项C,pow(x,n)计算的是x的n次幂,选项D,pow(n,x)计算的是n的x次幂。所以本题的选项应该是C。
11
求平方根函数
作用: 计算一个数(整数,小数)的平方根。
语法格式: sqrt(x)
说明:sqrt()函数返回值为double类型
sqrt(4);
2
sqrt(9);
3
sqrt(81);
9
22
4
32
9
4的平方根
9的平方根
知识讲解
求平方根函数:
sqrt函数是求平方根函数,它的作用就是计算一个数的平方根,可以是整数,可以是小数,先来看看什么是平方根。
例如:2的平方,结果是4。那么2就是4的平方根,3的平方,结果是9。那么3就是9的平方根。
使用sqrt计算一个数的平方根:
例如:计算4的平方根,sqrt(4)结果为2;计算9的平方根,sqrt(9)结果为3;计算81的平方根,sqrt(9)的结果是9。
12
(2023年6月)表达式sqrt(9.0)的计算结果为3,且结果类型为int。
判断题
正确 错误
真题解析
解析:本题考察常用数学函数中的sqrt函数,该函数的返回值类型为double,所以本题错误。
13
选择题
(2023年12月)以下C++代码用于输出1-100(含)的整数平方数(完全平方数),如16是4的平方,横线处应填写( )
C
int(sqrt(i)) * int(sqrt(i)) = i
int(sqrt(i)) == sqrt(i)
int(sqrt(i)) * int(sqrt(i)) == i
int(sqrt(i)) = sqrt(i)
for(int i=1; i<100+1; i++)
if(__________________________)//此处填写代码
cout<<i<<" ";
真题解析
解析:本题考察常用数学函数中的sqrt函数,判断一个数是否是平方数,可以先计算它的平方根,之后将计算的结果相乘,验证这个结果是否等于该数字,如果等于则证明该数是平方数,如果不等于则证明不是。因为sqrt计算平方根的结果是小数,所以需要使用强制转换成整数。因此本题正确答案为C。
14
其他常用的函数
02
02
15
随机数函数
作用:返回一个 0~RAND_MAX 之间的整数。
(RAND_MAX 最小是 32767 )
语法格式:rand()
说明:所在头文件<cstdlib>
cout<< rand();
3
3
3
多次运行结果相同
知识讲解
随机数函数就是rand()函数,rand函数不需要任何参数,它会返回一个从0到RAND_MAX的任意整数(RAND_MAX 最小是 32767)注意生成的随机数字是一个整数,而且生成每个整数的概率是相同的。这个函数使用的头文件是cstdlib,所以在使用该函数时需要先导入<cstdlib>。
例如:使用rand函数生成一个随机整数,使用cout输出该整数,是一个整数3。当多次运行该代码,我们会发现,多次运行生成的随机数字是相同的。这是由于rand函数内部的算法生成的并不是真的随机数。
16
srand()函数设置随机种子
srand(time(0));
cout<< rand();
3
0
4
srand()
作用:设置随机种子,根据不同参数可以产生不同的种子,令rand()每次生成的随机整数不同。
参数:一般传入time(0),返回值为1970年1月1日至今所经历的时间。
使用 rand() 函数之前
多次运行结果不同
知识讲解
若想要每次生成不同的随机数,需要调用此函数产生随机数前,必须先利用 srand()设置好随机数种子。种子不同,rand函数每次生成的随机数也就不同。
srand()函数就是用于设置随机种子,它的参数必须是一个整数。根据不同的输入参数可以产生不同的种子,这样rand()所产生的随机数值每次就会不一样。因此通常会将time(0)作为srand()函数的参数,time(0) 的返回值为1970年1月1日至今所经历的时间,这样根据调用的时间不同,生成的随机数也就不同了。需要注意的是:srand()函数必须使用 rand() 函数之前,并且在整个程序中只需被调用一次。在rand函数之前使用srand()函数,多次运行之后会发现生成的随机整数是不同的。
17
生成指定范围内的随机整数
语法格式:
a + rand() % (b-a+1)
起始值
终止值
//生成0~4之间的整数
0 + rand()% (4-0+1);
//生成1~5之间的整数
1 + rand()% (5-1+1);
//生成5~10之间的整数
5 + rand()% (10-5+1);
3
5
5 + rand()% 6;
简写
8
生成指定范围(a~b)内的一个随机整数
简写
简写
rand()% 5;
1 + rand()% 5;
知识讲解
在实际应用中,通常需要要将随机数的范围限制,例如:我们需要生成一个a~b范围内的随机整数。想要利用rand生成指定范围内的随机整数,语法格式为:a + rand() % (b-a+1)其中,a是范围的起始值,b是范围的终止值。
例如:现在生成0~4之间的整数,rand()% 5;可以生成一个整数3。
生成1~5之间的整数,1+rand()%5,可以生成一个整数5。
生成5~10之间的整数,5 + rand()% (10-5+1);可以简写成5 + rand()% 6;这样可以随机生成一个整数8.
18
判断题
(2023年12月)在C++代码中,执行 srand(0) 后连续两次执行 rand() 的结果相等。
正确 错误
真题解析
解析:rand()函数是随机生成一个整数,一个程序中,执行两次rand()生成的数字不一定相同。srand(0)中设置的随机种子无法控制一个程序中两个rand()函数生成的数字相同。所以题目说法错误。
19
选择题
如下选项中,哪个能随机生成4~25之间的一个整数( )。
4 + rand( ) % 25
4 + rand( ) % (25-4)
4 + rand( ) % 22
rand( ) % (25-4+1)
C
课堂练习
解析:若想是生成a~b之间的随机一个整数,公式为:a+rand()%(b-a+1)。生成4~25之间的随机整数,4+rand()%(25-4+1),可以简写为4+rand()%22。因此本题正确的选项为C。
20
选择题
在使用rand()函数时需要导入以下哪个头文件( )。
<cmath>
<math.h>
<algorithm>
<cstdlib>
D
课堂练习
解析:在使用rand函数时,需要导入的是cstdlib头文件。所以本题正确的选项为D。
21
补全横线处的代码,令程序能够生成10个1~1000之间的整数,要求每次随机生成的数字不同( )。
选择题
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
__________//此处填写代码
for(int i=1; i<=10; i++){
int a=1+rand()%1000;
cout<<a<<" ";
}
return 0;
}
srand(time(0));
srand(1);
srand(0);
srand();
A
课堂练习
解析:若想要每次生成的随机数不同,则需要使用srand函数设置随机种子,在参数中可以传入time(0)返回当前时间。所以本题正确的选项为A。
22
判断勾股数
【问题描述】
勾股数是很有趣的数学概念。如果有三个正整数a、b、c,满足a2+b2=c2,而且1≤a≤b≤c,我们就将a、b、c构成的一组数称为勾股数。你能通过编程,判断输入的三个数是否为勾股数么?
【输入描述】
输入一行,包含三个正整数a,b,c,每个数字之间使用一个空格分隔。
(1≤a≤b≤c≤100)
【输出描述】
是勾股数则输出"YES",不是则输出"NO"。
【输入样例1】
3 4 5
【输出样例1】
YES
【输入样例2】
6 10 23
【输出样例2】
NO
课堂练习
23
思路分析
输入三个正整数(1≤a≤b≤c≤100)。
int a,b,c;
cin>>a>>b>>c;
判断a、b、c能否构成一组勾股数。
if(pow(a,2)+pow(b,2)==pow(c,2))
cout<<"YES";
else
cout<<"NO";
勾股数成立条件:a2+b2=c2
课堂练习
【完整代码】
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if(pow(a,2)+pow(b,2)==pow(c,2))
cout<<"YES";
else
cout<<"NO";
return 0;
}
提供pow函数
课堂练习
完整代码
25
作用: 计算两个数(整数、小数、字符)中较大的数。
语法格式: max(x, y)
说明:1) x和y必须是同一类型的数据。
2) max函数的返回值类型与传入的参数类型相同。
3) 所在头文件<algorithm>
max函数
max(5,10);
max(3.14,5.8);
max('A','C');
10
5.8
'C'
比较ASCII码值
知识讲解
系统函数max。它的作用是计算两个数中的较大数,语法格式为:max(x,y)。系统函数max可以用于整数、小数或者是字符。但是在使用max函数的过程中需要注意,传入的两个参数必须是同一个数据类型。另外max函数所在的头文件并不是<camth>而是<algorithm>头文件
例如:找出两个整数中的较大数,max(5,10)的结果为10。找出两个小数中的较大数:max(3.14, 5.8),结果为5.8。
找出两个字符中较大的字符,max('A','C'),此时比较的是字符的ASCII码值,因此输出结果为'C'。
26
5
3.14
'A'
作用: 计算两个数(整数、小数、字符)中较小的数。
语法格式: min(x, y)
说明:1)x和y必须是同一类型的数据。
2) min函数的返回值类型与传入的参数类型相同。
3)所在头文件<algorithm>
min(5,10);
min(3.14,5.8);
min('A','C');
min函数
知识讲解
系统函数min。它的作用是计算两个数中的较小数,语法格式为:min(x,y)。该函数可以用于整数、小数或者是字符。
例如:找出两个整数中的较大数,max(5,10)的结果为10。找出两个小数中的较大数:max(3.14, 5.8),结果为5.8。
找出两个字符中较大的字符,max('A','C'),此时比较的是字符的ASCII码值,因此输出结果为'C'。
27
判断题
现有一行代码:cout<<max(10, 20.5); 这行代码输出的结果是20.5。
正确 错误
课堂练习
解析:max函数中传入的两个参数必须是同一个类型,题目中max函数中传入的10是int类型,20.5为double类型,程序会报错,因此本题的说法是错误的。
28
判断题
现要求使用min函数找出a、b、c三个变量中的较小值,可以通过cout<<min(min(a,b),c);这行代码来实现。
正确 错误
课堂练习
解析:min函数的返回值是两个数的较小值,可以将该值作为min函数的一个参数,与另外一个参数做比较。因此min(min(a,b),c)可以找出三个变量中的较小值。因此这种说法是正确的。
29
选择题
在使用min函数时需要导入以下哪个头文件( )。
<cmath>
<math.h>
<algorithm>
<iostream>
C
课堂练习
解析:在使用min函数时需要导入的头文件是algorithm头文件,这是一个包含了很多算法的头文件,因此正确的选项为C。
30
感谢你的学习
31
$$