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语言循环队列的表示与实现,对于数据结构与算法的研究很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++如何在变量前面加#

    C++如何在变量前面加#

    这篇文章主要介绍了C++如何在变量前面加#问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Recommended C Style and Coding Standards中文翻译版

    Recommended C Style and Coding Standards中文翻译版

    本文翻译自Recommended C Style and Coding Standards(C语言编码风格和标准),需要的朋友可以参考下
    2014-04-04
  • C++中两种字符串定义方式和区别介绍

    C++中两种字符串定义方式和区别介绍

    大家好,本篇文章主要讲的是C++中两种字符串定义方式和区别介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C++大数模板(推荐)

    C++大数模板(推荐)

    本篇文章是对C++大数模板的程序代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言中反斜杠的作用及说明

    C语言中反斜杠的作用及说明

    这篇文章主要介绍了C语言中反斜杠的作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C++模板以及实现vector实例详解

    C++模板以及实现vector实例详解

    模板是为了实现泛型编程,所谓泛型编程,就是指编写与类型无关的代码,下面这篇文章主要给大家介绍了关于C++模板以及实现vector的相关资料,需要的朋友可以参考下
    2021-11-11
  • Lua和C/C++互相调用实例分析

    Lua和C/C++互相调用实例分析

    今天小编就为大家分享一篇关于Lua和C/C++互相调用实例分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C++ static的作用解读

    C++ static的作用解读

    这篇文章主要介绍了C++ static的作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • C语言实现可增容动态通讯录详细过程

    C语言实现可增容动态通讯录详细过程

    这篇文章主要为大家介绍了C语言实现简易通讯录的完整流程,此通讯录还可以增容,并且每个环节都有完整代码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-05-05

最新评论