栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

解析C语言函数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解析C语言函数

目录

前言

函数是什么

函数的构成

函数的定义与调用

函数分类

库函数

库函数的使用

自定义函数

函数的参数

实际参数(实参)

形式参数(形参)

函数的调用

传值(数值)调用

 传址(地址)调用

练习

判断素数

判断闰年

前言

        近期博客一天一更,更新C语言知识点,知识点连贯详细,关注支持一下!

函数是什么         函数是一个大型程序中的某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。函数最好 高内聚低耦合(高内聚就是函数内部的语句要高度的聚集和关联,低耦合就是函数与函数之间关联程度越低越好,最好互不影响) ,所以函数的功能最好单一。

         代码执行是从上往下遍历,在main函数使用自定义函数的时候,如果自定义函数没有创建在main函数之前,或声明没有在main函数之前,编译器会报错!函数的声明需要返回类型+函数名+(参数类型)即可,参数可以不写。

        高内聚低耦合的好处就是,函数自己能够单独完成一个特定的任务,函数与函数之间的几乎没有关系,在运行的时候出现bug,可以很好的确定错误的地方,减少调试的时间。方便维护、升级代码。就像上面的print1函数只用来打印Hello,print2函数用来打印World,如果没有打印Hello,就可以清楚的判定出是print1函数出现了问题,这时候只需要对print1函数进行调试,修改代码即可。程序员编写的自定义函数,代码更为复杂,函数功能单一,可以更好的确定错误地方!

函数的构成

返回类型+函数名+(函数参数)+{函数主题}

返回类型:一个函数可以返回一个值。int返回类型,结束标志为return 整形;void返回类型,结束标志直接return;char返回类型,结束标志return 字符......函数是否有返回类型决定是否能够实现链式访问(函数的返回值作为另一个函数的参数)。

函数名:作为使用函数的标志,函数的名字最好起的有意义。注:函数名不能用关键字来命名!

参数:参数就是你使用该函数需要提供的值,作为使用函数的原材料,函数自动完成功能。

函数主体:执行语句,功能实现的代码。

函数的定义与调用

        函数可以嵌套调用但是不能嵌套定义!函数调用自身叫做递归函数(下一期博客内容——递归函数)。

        这里只在main函数中调用了print1函数,print1函数中用调用了print2函数,所以print1和print2函数的内容都打印了。

函数分类

库函数

        早期是没有库函数的,像printf库函数这些,功能简单,实现也简单,但是一个大型程序中很多人都编译了功能相同printf函数,导致代码冗余,开发效率低,而这些函数的使用又有所差异。通过C语言标准,后面把一些常用的功能实现成库函数,集成成库,编译器自动导入静态库,只要引入#include<头文件>就能使用函数,提高了程序的效率。

库函数的使用

参考网站,英文文献

http://www.cplusplus.com/reference/cstdlib/system/?kw=system

自定义函数

        自定义函数和库函数一样,有返回值类型、函数名和函数参数。但是函数的功能可能更为复杂,需要程序员来设计。

函数的参数

实际参数(实参)

        使用函数时候传递的参数叫做实参,实参可以是变量、常量、表达式等等。形参在函数被调用的时候才会创建,创建后相当于实参的一份临时拷贝,值相同,但是不是同一个。

形式参数(形参)

        创建函数时()括号内部的参数叫做形参。注:形参只要在函数被调用的时候才会被创建(在内存中开辟空间),函数使用完后形参以及函数在内存开辟的空间自动销毁,还给操作系统。

函数的调用

传值(数值)调用

        传值调用是传递实参的值给形参,它们分别占用不同的内存,对形参的修改不会影响实参。

         这里的a,b就是实参,x,y,t就是形参。

        之所以会出现这种情况是因为,调用swap的时候传递的是值,把a拷贝到x上,把b拷贝到y上,它们的地址并不一样,它们之间并不是同一个变量,x和y交换,并不会影响到a和b,为了在swap函数中能够交换a和b的值,传a和b的地址,才能在swap函数中与main函数的a和b建立联系。

        当不需要对函数调用的值进行修改的时候使用传值调用即可。

 传址(地址)调用

        传址调用是把数据在内存中地址传递给函数,函数参数需要用指针来接收。这种传参方式可以让函数和函数外边的数据建立起真正的联系,也就是函数内部可以直接操作函数外部的数据。

        这里要介绍两个操作符,&是取出地址;*是解引用,通过地址找到那个变量;int* x的意思是:*表示x是指针变量,int表示x指针变量所指向的类型是int类型的(这里主要是讲函数,指针作为C语言另一大重点,后面另写一两篇博客讲指针)。

        注:传值的调用的功能比传值调用的功能更加强大,根据需求看实参是否需要修改,并且传址调用,能够提高效率。像是结构体这样的,会有很多的数据,如果使用传值调用,结构体过大,参数在栈区的消耗过大,会导致性能下降。

练习

判断素数

判断100-200中的数有多少个素数,并且打印素数。

素数: 素是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

代码

#include 
#include 
//函数判断是不是素数,是返回1,不是返回0
int prime_number(int n)
{
	int i = 0;
    //作为一个素数标志
	int flag = 1;
    //sqrt是开更,头文件是math.h
	for (i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
		{
            //如果能够整除,说明不是素数,把flag改为0
			flag = 0;
			break;
		}
	}
	return flag;

}
int main()
{
	int count = 0;
	int i = 0;
	for (i = 100; i <= 200; i++)
	{
        //如果函数返回1,则说明是素数
		if (1 == prime_number(i))
		{
			count++;
			printf("%d ", i);
		}
	}
	printf("n");
	printf("count = %dn", count);
	return 0;
}

结果:

判断闰年

判断1-1000的年份有多少个闰年

闰年:能被四整除但是不能被100整除或者能被400整除的为闰年。

代码:

#include 
#include 
//函数判断是不是闰年是返回1,不是返回0
int leap_year(int year)
{
            //条件为真是1,条件为假是0
	return ((year % 4 == 0) && (year % 100 != 0) || year % 400 == 0);
}

int main()
{
	int count = 0;
	int i = 0;
	for (i = 1; i <= 1000; i++)
	{
        //如果函数返回1,则是闰年
		if (1 == leap_year(i))
		{
			count++;
		}
	}
	printf("count = %dn", count);
	return 0;
}

结果:

 

        感谢大家的观看,觉得文章写得不错的话,点赞、评论、关注支持一下,后续还会整理别的知识点,若文章编写出现错误,麻烦在评论或者私信一下,我看到后及时更改,谢谢。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号