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; }
码字不易,还请多多点赞支持呀!
有了你们的的点赞和关注我将会写出更加优秀的文章。