函数
在计算机科学中,函数是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。
库函数
void * memset ( void * ptr, int value, size_t num );
库函数查询工具:
自定义函数
和库函数一样;自定义函数有有函数名,返回值类型和函数参数。
和库函数不同的是,自定义函数由程序员自行设计,给程序员一个很大的发挥空间。
自定义函数由 返回类型,函数参数,语句项组成
实参与形参
形参:形参即形式参数,形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),只有在函数中才有效,函数调用完成后便被销毁。
实参:实参即实际参数,即真实传递给函数的值,实参可以是:常量、变量、表达式、函数等。 无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形 参。
函数的调用
1.传值调用
形参实质上是对实参的暂时拷贝,只是把值传递至函数,函数内对形参的修改不会影响实参。
2.传址调用
传址调用是在函数外部创建变量的内存地址传递至函数参数的一种形式,使函数内外的变量建立起真正的联系,从而实现在函数内对函数外的变量直接进行修改。
可以在函数内部修改变量,例:
//交换整数
int exchange(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
return 0;
}
int main()
{
int i = 0;int j=0;
scanf("%d", &i, &j);
exchange(&i, &j);
printf("%d %d", i, j);
return 0;
}
实现了在函数内部对两个变量的值进行交换。
函数的嵌套调用和链式访问
嵌套调用
根据自身需求将函数进行组合使用,一个函数可以放在另一函数内部被调用,被称为嵌套调用,函数可以嵌套调用,但不能嵌套定义,也就是不能在以函数内定义另一函数,另外,在一函数内调用另一函数,要求被调用的此函数在之前定义。
链式访问
将一个函数返回的值传递给另一个函数作为参数。被称为链式访问。
例:
int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0; }
打印的结果是4321,因为printf函数返回的值是打印的字符个数。
今日练习代码:
//素数判断
int sushu(int i)
{
int j = 0;
for (j = 2;j < i;j++)
{
if (i % j == 0) { return 0; }
else if (j == i - 1) { return 1; }
}
}
int main()
{
for (int i = 100;i <= 200;i++)
{
if (sushu(i) == 1) { printf("%d ", i); }
}
return 0;
}
//闰年判断
int run(int year)
{
if (year % 4 == 0 && year % 100 != 0) return 1;
else if (year % 400 == 0) return 1;
else return 0;
}
int main()
{
int year = 0;
scanf("%d", &year);
if (run(year) == 1) printf("是闰年");
else printf("不是闰年");
return 0;
}
//交换整数
int exchange(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
return 0;
}
int main()
{
int i = 0;int j=0;
scanf("%d", &i, &j);
exchange(&i, &j);
printf("%d %d", i, j);
return 0;
}
//乘法口诀表
int biao(int i)
{
int m = 0;int n = 0;
for (m = 1;m <= i;m++)
{
for (n = 1;n <= m;n++)
{
printf("%d * %d=%2d ", n, m, m * n);
}
printf("\n");
}
return 0;
}
int main()
{
int i = 0;
scanf("%d", &i);
biao(i);
return 0;
}