前言: 这篇文章是本人在学完函数后的知识梳理,特在此发表一些自己的理解,希望能给大家一些帮助。
一.函数的理解
对于函数其实我们都不陌生,在初高中时就常常与函数打交道,在数学中我们常用 y=f(x) 来表示函数,它由自变量,因变量,对应法则三部分组成,那么在c语言中函数又有什么不同呢?
在c语言中,函数通常由函数头,函数体两部分组成。
1.函数体:
函数体是编程语言中定义一个函数功能的所有代码组成的一个整体。
简而言之就是用花括号括起来的若干语句,里面的语句能完成一个具体的功能,例如:一个最基本的main()函数
int main()
{
printf("hello,world");
return 0;
}
```在花括号里的printf和return就是函数主体
2.函数头
函数头是指在函数体之前的所有部分它给出了该函数的返回类型,每个参数的次序和类型等函数原型信息
简而言之函数头就是除去函数体的部分。
它通常由返回值,函数名,参数三部分组成。
int is_prime(int x)
{
int n = 0;
for (n = 2; n <= sqrt(x); n++)
{
if (x % n == 0)
return 1;
}
}
...这是一个判断该数是否为素数的函数,如果是素数就返回1
这里int就是说明它返回的是一个整数,is_prime就是它的函数名,
(int x)就是它的参数
ps. 一个函数头可以没有返回类型和参数,那么我们就会在它原本放返回类型和参数的地方放个void或者什么都不放。例如:int main(),就没有参数。
二.函数的分类
在c语言中函数分为两大类,库函数和自定义函数。
1.库函数
一般指编译器提供的可在c源程序中调用的函数。
其实就是由原来的程序员写好的函数放在c语言库中,这样如果你想要实现一个功能,就只需要调用这个函数就可以了,不必再自己写一个函数。
例如:我想要给x开平方,我只需要sqrt(x)就可以了。但记住一定要引用头文件,sqrt的头文件是#include<math.h>。
调用库函数就好像去别人家里借东西,你借了东西肯定得跟东西的主人说一声吧,借的东西不同,那么它的主人可能也不同,所以就会有着不同的头文件,再比如:printf,scanf这些函数的主人就是#include<stdio.h>
库函数有那么多我怎么记得完呢?这时候就需要借助搜索工具了,这里我使用的是MSDN,具体的百度上可以搜到
2.自定义函数
作为一个程序员,遇到的问题数不胜数,仅靠库函数是远远不够的,更多的时候是需要我们自己写函数,当然一个函数不是随便写的,它有着一定的格式
int is_prime(int x)
{
int n = 0;
for (n = 2; n <= sqrt(x); n++)
{
if (x % n == 0)
return 1;
}
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
int p = is_prime(i);
if (p != 1)
{
printf("%d ", i);
}
}
return 0;
}
这里我引用了一个求100-200间素数并打印的代码,先简单的说说代码的运行规则。
首先从main函数进入,定义i变量,再用一个for循环得到100-200之间的所有数,当i=100时i进入函数is_prime(i),经过一系列的运算得到一个返回值并将它放到p中,如果p不等于1,那么就将i打印出来;同理当i=101,102,103…时,直到i=201时结束循环的同时打印出了100-200间所有素数。
这里我自定义了一个求素数的函数。它的函数名我改为is_prime(函数名可以任取,但建议取得有意义),可以看到的是我写了两次is_prime,一次是在main函数内,一次是在main函数外。main函数外的is_prime是我自己写的自定义函数,而在main函数内的is_prime是我再调用这个函数。现在来仔细讲讲这两个地方
1.main函数外的is_prime:根据上面函数的理解,看的出它的函数头就是int is_prime(intx),再仔细看函数头的三要素:int->返回类型,is_prime->函数名,(int x)->参数(ps:int x内的int是指x是整数)。它的函数体就是花括号内的代码,用来帮助我判断是否为素数。
2.main函数内部的is_prime:就是在使用这个函数,我将i传参给x用来判断i是不是素数,如果i不是素数那么就返回1(int p=is_prime(i))就变为了int p=1),再根据后面的if判断就可以打印出素数了
好了,以上就是我的知识梳理了,如果有什么不对或者漏掉的地方还请您指出,也希望这篇博客能对您有所帮助。