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

目录
  • 一、函数的分类
    • 1.库函数
    • 2.自定义函数
    • 3.库函数的分类
  • 二、函数调用
    • 1.传值调用
    • 2.传址调用
  • 三、函数的声明
  • 四、函数定义
  • 五、函数的参数
    • 1.形式参数(形参)
    • 2.实际参数(实参)
  • 六、函数的练习

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语言函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言中函数的声明、定义及使用的入门教程

    对函数的"定义"和"声明"不是一回事.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型.形参及其类型以及函数体等,它是一个完整的.独立的函数单位.而函数的声明的作用则是把函数的名字,函数类型以及形参的类型.个数和顺序通知编译系统,以便在调用该函数时进行对照检查(例如,函数名是否正确,实参与形参的类型和个数是否一致),它不包括函数体.--谭浩强 ,<C程序设计>(第四版),清华大学出版社,2010年6月,p182 这段论述包含了许多概念性错误,这

  • C语言中的内联函数(inline)与宏定义(#define)详细解析

    先简明扼要,说下关键:1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快. 2.内联函数可以调试,而宏定义是不可以调试的.内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline.下面详细介绍一下探讨一下内联函数与宏定义. 一.内联函数是什么?内联函数是代码被插入到调用者代码处的函数.如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提

  • C语言函数基础教程分类自定义参数及调用示例详解

    目录 1.  函数是什么? 2.  C语言中函数的分类 2.1 库函数 2.1.1 为什么要有库函数 2.1.2 什么是库函数 2.1.3 主函数只能是main()吗 2.1.4常见的库函数 2.2 自定义函数 2.2.1自定义函数是什么 2.2.2为什么要有自定义函数 2.2.3函数的组成 2.2.4 举例展示 3. 函数的参数 3.1 实际参数(实参) 3.2  形式参数(形参) 4. 函数的调用 4.1 传值调用 4.2  传址调用 4.3 练习 4.3.1. 写一个函数判断一年是不是闰年

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

    目录 一.函数的嵌套调用 二.函数的链式访问 三.函数递归 递归的优缺点 必要条件 使用场景 函数递归的细节说明 举例说明 对两个必要条件的理解 四.递归练习 C语言超全面讲解函数的使用方法上 一.函数的嵌套调用 在定义函数时,一个函数内不能再定义另一个函数,即不能嵌套定义,但可以嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数. ️注意: 函数可以嵌套调用但是不可以嵌套定义. 每一个函数都应该在大括号的外面独立存在. 代码示例: 根据这张图可以清楚的看到,three_line() 函数

  • C语言自定义函数的实现

    函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收.接收用户数据的函数在定义时要指明参数,不接收用户数据的不需要指明,根据这一点可以将函数分为有参函数和无参函数. 将代码段封装成函数的过程叫做函数定义. C语言无参函数的定义 如果函数不接收用户传递的数据,那么定义时可以不带参数.如下所示: dataType functionName(){ //body } dataType 是返回值类型,它可以是C语言中的任意数据类型,例如 int.float.char

  • C语言菜鸟基础教程之自定义函数

    先动手编写程序: #include <stdio.h> int add(int x, int y) { int z = x + y; return z; } int main() { int a = 1; int b = 2; int c = add(a, b); printf("c = %d\n", c); return 0; } 运行结果: c = 3 程序分析: (1) 函数定义的形式为: 类型 函数名称(类型 形式参数,--) { 函数体 } (2) 对应于咱们的程

  • 深入解析C语言中函数指针的定义与使用

    1.函数指针的定义     函数是由执行语句组成的指令序列或者代码,这些代码的有序集合根据其大小被分配到一定的内存空间中,这一片内存空间的起始地址就成为函数的地址,不同的函数有不同的函数地址,编译器通过函数名来索引函数的入口地址,为了方便操作类型属性相同的函数,c/c++引入了函数指针,函数指针就是指向代码入口地址的指针,是指向函数的指针变量. 因而"函数指针"本身首先应该是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整形变量.字符型.数组一样,这里是指向函数.C在编译时

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

    目录 一.函数的分类 1.库函数 2.自定义函数 3.库函数的分类 二.函数调用 1.传值调用 2.传址调用 三.函数的声明 四.函数定义 五.函数的参数 1.形式参数(形参) 2.实际参数(实参) 六.函数的练习 C语言超全面讲解函数的使用方法下 一.函数的分类 1.库函数 库函数是C语言基础库为了方便程序员进行软件开发而提供了一系列的函数,可以支持可移植性和提高程序的效率. ️ 注意:库函数需要引头文件. 例如:strlen函数的头文件是<string.h> 2.自定义函数 自定义函数和库

  • C语言超详细讲解函数栈帧的创建和销毁

    目录 1.本节目标 2.相关寄存器 3.相关汇编指令 4.什么是函数栈帧 5.什么是调用堆栈 6.函数栈帧的创建和销毁 (1).main函数栈帧的创建与初始化 (2).main函数的核心代码 (3).Add函数的调用过程 (4).Add函数栈帧的销毁 (5).调用完成 7.对开篇问题的解答 1.本节目标 C语言绝命七连问,你能回答出几个? 局部变量是如何创建的?为什么局部变量不初始化其内容是随机的?有些时候屏幕上输出的"烫烫烫"是怎么来的?函数调用时参数时如何传递的?传参的顺序是怎样的

  • C语言超详细讲解函数指针的运用

    目录 前言 计算器的例子 回调函数 转移表 前言 前面我们学习了各种各样的指针类型,有些指针可以说是稀奇百怪,特别是函数指针,有些朋友可能觉得,函数指针有些多余,调用函数为什么要用指针调用,直接调用不好吗? 接下来我们从具体的实例来回答同学们的问题,加深对函数指针的理解. 计算器的例子 接下来我们写一个简单的计算器程序,完成不同的计算功能比如加减乘除: #include <stdio.h> //相加函数 int add(int a, int b) { return a + b; } //相减函

  • C语言超详细讲解getchar函数的使用

    目录 一.getchar 函数 二.缓冲区 1.什么是缓冲区 2.为什么要存在缓冲区 3.缓冲区的类型 4.缓冲区的刷新 三.getchar 函数的正确使用 1.getchar 的换行问题 2.getchar 与 scanf 的混合使用 一.getchar 函数 从上面的介绍来看,我们要正确使用getchar函数,首先得了解什么是缓冲区. 二.缓冲区 1.什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分. 也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部

  • C语言超详细讲解字符串函数和内存函数

    目录 字符串函数 长度不受限制的字符串函数 strlen strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找以及错误报告 strstr strtok strerror 内存操作函数 memcpy memmove memcmp 字符串函数 长度不受限制的字符串函数 strlen size_t strlen ( const char * str ) 求字符串长度: 字符串以'\0' 作为结束标志,strlen函数返回的是在

  • C语言超全面讲解字符串函数

    目录 1.gets函数 2.puts函数 3.strcat函数 4.strcpy函数(strncpy函数) 5.strcmp函数(strncmp函数) 6.strlen函数 7.strlwr函数 8.strupr函数 9.strstr函数 注意:在使用字符串处理函数时,一定要使用#include <string.h>开头 1.gets函数 其形式为:gets(字符数组)——输入字符串的函数 作用是从终端输入一个字符串到字符数组,并且得到一个函数值. 2.puts函数 其形式为:puts(字符数

  • C语言超详细讲解指向函数的指针

    目录 一.函数的指针 二.指向函数的指针变量 三.调用函数的两种方式 四.指向函数的指针的作用 五.用指向函数的指针作函数参数(重点) 六.为什么要将指向函数的指针变量作为函数的形参(重点) 一.函数的指针 首先,函数名代表函数的起始地址,调用函数时,程序会从函数名获取到函数起始地址,并从该地址起执行函数中的代码,函数名就是函数的指针,所以我们可以定义一个指向函数的指针变量,用来存放函数的起始地址,这样一来,就可以通过该变量来调用其所指向的函数. 二.指向函数的指针变量 定义指向函数的指针变量

  • C语言 超详细讲解链接器

    目录 1 什么是链接器 2 声明与定义 3 命名冲突 3.1 命名冲突 3.2 static修饰符 4 形参.实参.返回值 5 检查外部类型 6 头文件 1 什么是链接器 典型的链接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体–该实体能够被操作系统直接执行. 链接器通常把目标模块看成是由一组外部对象组成的.每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别.因此,==程序中的每个函数和每个外部变量,如果没有被声明为static,就都是一个外部

  • C语言 超详细讲解库函数

    目录 1 返回整数的getchar函数 2 更新顺序文件 3 缓冲输出与内存分配 4 库函数 练习 1 返回整数的getchar函数 代码: #include<stdio.h> int main() { char c; while((c = getchar())!=EOF)//getchar函数的返回值为整型 putchar(c); return 0; } 上述代码有三种可能: 某些合法的输入字符在被"截断"后使得c的取值与EOF相同,程序将在复制的中途停止. c根本不可能

随机推荐