编程菜鸟到大佬之路:C语言程序设计(十一)

第十一天学习精要

函数


函数的定义

  • “函数” 可以将实现了某一功能,并需要反复使用的代码包装起来形成一个功能模块(即写成一个“函数”),那么当程序中需要使用该项功能时,只需写一条语句,调用实现该功能的 “函数”即可。

  • 不同的程序员可以分别写不同的函数,拼起来形成一个大程序。

  • 如果函数不需要返回值,则“返回值类型”可以写“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 是一个大写字母,则返回对应小写字母。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/82963112