C语言超全面讲解函数的使用方法上

 更新时间:2022年04月22日 16:34:05   作者:马桶上看算法  
函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数,由于篇幅过大,分为两篇讲解,下面开始上篇

C语言超全面讲解函数的使用方法下

一、函数的分类

1.库函数

库函数是C语言基础库为了方便程序员进行软件开发而提供了一系列的函数,可以支持可移植性和提高程序的效率。

⚠️ 注意:库函数需要引头文件。

例如:strlen函数的头文件是<string.h>

2.自定义函数

自定义函数和库函数一样,有函数名、返回值类型和函数参数。但是不一样的是,这些都是我们自己来设计,这给程序员一个很大的发挥空间 

⚠️注意:这个函数是在库函数之外的,是不需要引头文件的。

3.库函数的分类

  • IO函数 : printf 、scanf 、getchar、putchar
  •  字符串操作函数 :strcmp、strlen
  • 字符操作函数:toupper
  •  内存操作函数:memcpy、memcmp、memcet
  • 时间/日期函数:time
  • 数学函数:sqrt、pow
  • 其他库函数

二、函数调用

1.传值调用

函数的形参和实参分别占有不同的内存块,对形参的修改不会影响实参

#include<stdio.h>
void swap(int x, int y)
{
	int z = 0;
	z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前=%d %d\n", a, b);
	swap(a, b);
	printf("交换后=%d %d\n", a, b);
	return 0;
}

  

2.传址调用

传址调用是把函数外部创建变量的内存地址传递地函数参数的一种调用函数方式。

这种操作可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

定义指针变量,以通过访问地址的方式来交换a和b的值。

函数定义部分的参数接收到的是变量a和变量b的地址,并通过地址来改变他们两个的值。

#include<stdio.h>
void swap(int * pa, int * pb )
{
	int z = 0;
	z = *pa;
	*pa = *pb;
	*pb = z;
}
int main()
{
	int a = 10;
	int b = 20;
	printf("交换前=%d %d\n", a, b);
	swap(&a, &b);
	printf("交换后=%d %d\n", a, b);
	return 0;
}

三、函数的声明

告诉编译器有一个函数,参数是什么?返回类型什么?但是具体是不是存在无关紧要。

函数的声明一般出现在函数的使用之前,要满足先声明后使用。

函数的声明一般要放在头文件中。 

对函数声明 

#include<stdio.h>
int main()
{
    int a = 10;
    int b = 20;
    //函数的声明 - 告知
    int Add(int, int);
    int c = Add(a, b);
    printf("%d\n", c);
    return 0;
}
//函数的定义
int Add(int x, int y)
{
    return x + y;
}

四、函数定义 

函数的定义是指函数的具体实现,交代函数的功能实现 。

定义是一种更强有力的声明

#include<stdio.h>
int add(int a, int b)//函数定义
{
	return a + b;//返回a + b的值
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = add(a, b);//函数调用 - 计算a + b的值
	printf("%d\n", c);
	return 0;
}

五、函数的参数

1.形式参数(形参)

函数定义部分的参数是形参

2.实际参数(实参)

函数调用部分的参数是实参

六、函数的练习

1.用函数求两个整数的较大值

难易程度:⭐

#include<stdio.h>
//求最大值 - 函数定义 - 传参
int get_max(int score_one, int score_two)//函数形参
{
	//如果score_one大于score_two就返回一个score_one的值
	//否则就返回score_two的值
	//返回的值即为最大值
	return score_one > score_two ? score_one : score_two;
}
int main()
{
	int score_one = 0;
	int score_two = 0;
	scanf("%d %d", &score_one, &score_two);
	//求最大值函数 - 调用 - 并传参
	int max = get_max(score_one, score_two);//函数实参
	printf("max=%d\n", max);
	return 0;
}

2.用函数打印100~200之间的素数

难易程度:⭐⭐

素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。

#include<stdio.h>
int is_prime(int i)
{
	int j = 0;
	for (j = 2; j < i; j++)//产生除了1和它本身的自然数
	{
		//拿i试除除了1和它本身的自然数
		if (i % j == 0)//整除进入语句
		{
			return 0;//返回0
		}
	}
	//i与所有除了1和它本身的自然数试除之后,返回的值就是素数
	return 1;//返回1,就是返回素数的值
}
int main()
{
	int i = 0;
	int count = 0;//统计素数的个数
	for (i = 100; i <= 200; i++)//产生100-200之间的数字
	{
		if (is_prime(i) == 1)//如果返回值等于1就进入语句
		{
			//打印的i就是素数
			printf("%d ", i);
			count++;//每一次打印i,count++
		}
	}
	printf("\ncount = %d\n", count);
	return 0;
}

3.用函数打印1000~2000之间的闰年

⚠️ 注意   

  • 能被4整除,并且不能被100整除
  • 能被400整除

难易程度:⭐⭐

#include<stdio.h>
int is_leap_year(int n)//打印1000-2000素数的实现
{
    if (n % 4 == 0 && n % 100 != 0)//如果能被4整除,并且不能被100整除就进入语句
    {
        return 1;//返回1就是返回素数
    }
    else if (n % 400 == 0)//如果能被400整除就进入语句
    {
        return 1;//返回1就是返回素数
    }
    else
    {
        return 0;//返回0就不是素数
    }
}
int main()
{
    int i;
    int count = 0;//统计闰年的个数
    for (i = 1000; i <= 2000; i++)//产生1000-2000之间的数
    {
        if (is_leap_year(i) == 1)//如果返回的值等于1就进入语句
        {
            printf("%d ", i);//打印i就是打印闰年
            count++;//闰年的个数++
        }
    }
    printf("\ncount = %d\n", count);
    return 0;
}

码字不易,还请多多点赞支持呀!

有了你们的的点赞和关注我将会写出更加优秀的文章。

到此这篇关于C语言超全面讲解函数的使用方法的文章就介绍到这了,更多相关C语言函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解C++编程中的局部变量和全局变量

    深入理解C++编程中的局部变量和全局变量

    这篇文章主要介绍了深入理解C++编程中的局部变量和全局变量,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C++ win系统如何用MinGW编译Boost库

    C++ win系统如何用MinGW编译Boost库

    这篇文章主要介绍了C++ win系统如何用MinGW编译Boost库问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C++深入分析讲解智能指针

    C++深入分析讲解智能指针

    为了解决内存泄漏的问题,C++中提出了智能指针。内存泄漏的产生原因有很多,即使我们正确的使用malloc和free关键字也有可能产生内存泄漏,如在malloc和free之间如果存在抛异常,那也会产生内存泄漏。这种问题被称为异常安全
    2022-05-05
  • Linux/C++多线程实例学习十字路口车辆调度

    Linux/C++多线程实例学习十字路口车辆调度

    这篇文章主要为大家介绍了Linux/C++多线程实例学习十字路口车辆调度示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • OpenCV基于背景减除实现行人计数

    OpenCV基于背景减除实现行人计数

    本文主要介绍了如何使用OpenCV C++对视频中的人流量进行统计。文中的示例代码讲解详细,对我们学习OpenCV有一定的帮助,需要的可以了解一下
    2022-01-01
  • Microsoft Visual Studio 2022的安装与使用详细教程

    Microsoft Visual Studio 2022的安装与使用详细教程

    Microsoft Visual Studio 2022是Microsoft Visual Studio软件的一个高版本,能够编写和执行C/C++代码,具有强大的功能,是开发C/C++程序的主流软件,这篇文章主要介绍了Microsoft Visual Studio 2022的安装与使用详细教程
    2024-01-01
  • C语言实现简易通讯录

    C语言实现简易通讯录

    这篇文章主要为大家详细介绍了C语言实现简易通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 利用Matlab制作抖音同款含褶皱面料图

    利用Matlab制作抖音同款含褶皱面料图

    这篇文章主要介绍了如何利用Matlab制作抖音的同款含褶皱面料图,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下
    2022-03-03
  • C语言函数的递归和调用实例分析

    C语言函数的递归和调用实例分析

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层
    2013-07-07
  • C语言简单实现计算字符个数的方法

    C语言简单实现计算字符个数的方法

    这篇文章主要介绍了C语言简单实现计算字符个数的方法,涉及C语言针对字符串的简单遍历与判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07

最新评论