第十一天学习精要
函数
函数的定义
-
“函数” 可以将实现了某一功能,并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该项功能时,只需写一条语句,调用实现该功能的 “函数”即可。
-
不同的程序员可以分别写不同的函数,拼起来形成一个大程序。
-
如果函数不需要返回值,则“返回值类型”可以写“void”。
返回值类型 函数名(参数1类型 参数1名称, 参数2类型 参数2名称……)
{
语句组(即“函数体”)
}
函数调用和return语句
-
调用函数:函数名(参数1,参数2,……)
-
对函数的调用,也是一个表达式。函数调用表达式的值,由函数内部的return语句决定。
- return语句语法如下:return 返回值;
- return语句的功能是结束函数的执行,并将“返回值”作为结果返回。
- “返回值”是常量、变量或复杂的表达式均可。
- 如果函数返回值类型为“void”,return语句就直接写:return ;
- return 语句作为函数的出口,可以在函数中多次出现。多个return语句的“返回值”可以不同。
- 在哪个return语句结束函数的执行,函数的返回值就和哪个return语句里面的“返回值”相等。
函数使用实例
- Max函数
# include <iostream>
using namespace std;
int Max(int x, int y)
{
if (x > y) // 求两个整型变量中的较大值,x和y是形参。
return x;
else
return y;
}
int main()
{
int n = Max(4, 6); // 实参, 形参实参类型需兼容!
cout << n << "," << Max(20, n) << endl;
return 0;
}
- 判断是否是素数的函数
# include <iostream>
using namespace std;
bool isPrime(unsigned int n)
{
if (n <= 1)
{
return false;
}
for (int i = 2; i < n; ++i)
{
if ((n % i) == 0) // 看看有没有n的因子
{
return false;
}
}
return true;
}
int main()
{
cout << isPrime(2) << "," << isPrime(4) << "," << isPrime(5) << endl;
return 0;
}
- 已知三角形三个顶点位置求边长
- 给定平面上不共线的三个点,其坐标都是整数,编写程序,求它们构成的三角形的三条边的长度。
- 输入是6个整数: x1,y1,x2,y2,x3,y3代表三个点的坐标,以任意顺序输出三条边的长度均可。
# include <iostream>
using namespace std;
# define EPS 0.001 // 用以控制计算精度
double Sqrt(double a) // 求a的平方根
{
double x = a / 2;
double lastX = x + 1 + EPS; // 确保能够进行至少一次迭代
while (x - lastX > EPS || lastX - x > EPS)
{
lastX = x;
x = (x + a / x) / 2;
}
return x;
}
double Distance(double x1, double x2, double y1, double y2)
{ //求两点(x1,y1),(x2,y2) 的距离
return Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main()
{
int x1, y1, x2, y2, x3, y3;
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
//输出(x1,y1)到(x2,y2)距离
cout << Distance(x1, y1, x2, y2) << endl;
cout << Distance(x1, y1, x3, y3) << endl;
cout << Distance(x3, y3, x2, y2) << endl;
return 0;
}
一维数组作为函数的参数
-
一维数组作为形参时的写法如下:类型名 数组名[ ],不用写出数组的元素个数。
-
数组作为函数参数时,是传引用的,即形参数组改变了,实参数组也会改变。
-
编写一个求整型数组最大值的函数
# include <iostream>
using namespace std;
int a1[4] = {4, 15, 6, 9};
int a2[] = {3, 18, 56, 40, 78};
int findMax(int a[], int length)
{ // length是数组长度
int mx = a[0];
for (int i = 1; i < length; ++i)
{
if (a[i] > mx)
{
mx = a[i];
}
}
return mx;
}
int main()
{
cout << findMax(a1, sizeof(a1) / sizeof(int)) << endl;
cout << findMax(a2, sizeof(a2) / sizeof(int)) << endl;
return 0;
}
- 编写一个把int数组所有元素置0的函数
# include <iostream>
using namespace std;
int a1[4] = {4, 15, 6, 9};
int SetToZero(int a[], int length)
{
for (int i = 0; i < length; ++i)
{
a[i] = 0;
}
}
int main()
{
SetToZero(a1, 4);
for (int i = 0; i < 4; ++i)
{
cout << a1[i] << ",";
}
return 0;
}
二维数组作为函数的参数
-
二维数组作为形参时,必须写明数组有多少列,不用写明有多少行。
-
必须要写明列数,编译器才能根据下标算出元素的地址。
-
a[i][j]的地址:数组首地址+i×N×sizeof(a[0][0])+j×sizeof(a[0][0])(N是数组列数)。
-
形参数组的首地址就是实参数组的首地址。
库函数和头文件
-
#include :头文件中包含许多数学库函数,比如调用标准库函数sqrt(a)求平方根。
-
库函数:C/C++标准规定的,编译器自带的函数。
-
头文件:C++编译器提供许多“头文件”,如iostream、cmath、string。
- 头文件内部包含许多库函数的声明以及其他信息。
- 如cin,cout的定义 #include 即可将头文件包含到程序中,此后即可使用头文件中定义的库函数及其他信息。
- 数学库函数声明在cmath中,主要有:
- int abs(int x):求整型数x的绝对值。
- double cos(double x):求x(弧度)的余弦。
- double fabs(double x):求浮点数x的绝对值。
- int ceil(double x):求不小于x的最小整数。
- double sin(double x):求x(弧度)的正弦。
- double sqrt(double x):求x的平方根。
- 字符处理函数在ctype中声明,主要有:
- int isdigit(int c):判断 c 是否是数字字符。
- int isalpha(int c):判断 c 是否是一个字母。
- int isalnum(int c):判断 c 是否是一个数字或字母。
- int islower(int c):判断 c 是否是一个小写字母。
- int islower(int c):判断 c 是否是一个小写字母。
- int isupper(int c):判断 c 是否是一个大写字母。
- int toupper(int c):如果 c 是一个小写字母,则返回对应大写字母。
- int tolower (int c):如果 c 是一个大写字母,则返回对应小写字母。