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语言中多维数组的内存分配和释放(malloc与free)的方法

    C语言中多维数组的内存分配和释放(malloc与free)的方法

    写代码的时候会碰到多维数组的内存分配和释放问题,在分配和释放过程中很容易出现错误。下面贴上一些示例代码,以供参考。
    2013-05-05
  • QString的常用方法(小结)

    QString的常用方法(小结)

    这篇文章主要介绍了QString的常用方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Qt实现http服务的示例代码

    Qt实现http服务的示例代码

    这篇文章将为大家详细讲解有关Qt如何实现http服务,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获
    2023-04-04
  • C++改变编程入口为main函数

    C++改变编程入口为main函数

    这篇文章主要介绍了C++改变编程入口为main函数的方法的相关资料,需要的朋友可以参考下
    2015-06-06
  • C++实现彩色飞机大战

    C++实现彩色飞机大战

    这篇文章主要为大家详细介绍了C++实现彩色飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • 关于STL中set容器的一些总结

    关于STL中set容器的一些总结

    关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序
    2013-09-09
  • C语言将24小时制转换为12小时制的方法

    C语言将24小时制转换为12小时制的方法

    这篇文章主要介绍了C语言将24小时制转换为12小时制的方法,涉及C语言针对时间的相关操作技巧,非常简单实用,需要的朋友可以参考下
    2015-07-07
  • C++中的数据对齐示例详解

    C++中的数据对齐示例详解

    这篇文章主要介绍了C++中数据对齐的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C++中的const限定符的使用和作用

    C++中的const限定符的使用和作用

    C++ 中的 const 限定符用于声明不可变量,即在变量声明时指定该变量的值不可修改。它的使用可以帮助程序员避免一些常见的编程错误,如误修改不应该被修改的变量的值等
    2023-05-05
  • 利用C++实现一个线程安全的map

    利用C++实现一个线程安全的map

    这篇文章主要为大家详细介绍了如何利用C++实现一个线程安全的map(使用ChatCPT生成),代码是通过两轮对话完善的,感兴趣的小伙伴可以了解一下
    2023-05-05

最新评论