函数:
库函数和自定义函数
交换a和b的值的函数:
a,b的值未改变的原因是形参只是实参的一份临时拷贝,对形参的修改不会影响实参,现在的a,b,x,y是单独无关的变量
所以运用指针知识可改为:
函数是否取地址要看改不改变a,b的值
真是传递给函数的参数叫做实参,实参可以是常量,变量,表达式,函数等;
形参是函数名后括号里的变量,出函数自动销毁。
函数调用:
传值调用和传址调用
寻找100到200之间的素数:
int main()
{
int a = 100;
int b = 0;
for (a = 100; a <= 200; a++)
{
int flag = 1;//用来判断是否是素数的变量
for (b = 2; b <= a - 1; b++)//寻找素数让数字从2开始除,除到比数字小一的数字
{
if (a % b == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d\n", a);
}
}
return 0;
}
可优化为(运用sqrt()需要一个include <math.h>的头文件):
int main()
{
int a = 100;
int b = 0;
for (a = 100; a <= 200; a+=2)
{
int flag = 1;//非素数的数任何一个因数都小于等于它的开平方数
for (b = 2; b <= sqrt(a); b++)//sprt()是开a的平方的函数
{
if (a % b == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d\n", a);
}
}
return 0;
由此可得,改成函数形式:
函数可以嵌套调用,但不能嵌套定义
链式访问(函数一定要有返回类型):
strlen的返回值做了printf()的参数
函数的声明和定义:
只有函数声明无法知道函数存不存在,先声明后使用
上述代码一般写为以下模式:
函数递归:
把大事化小
输入1234,输出1 2 3 4:
每一次函数调用都会在栈区上申请空间,递归层次太深会出现栈溢出现象
编写函数不创建临时变量,求字符串的值:
递归与迭代