C语言函数基础
前言
一、函数的定义与分类
1、 函数是什么?
函数是组织好的,可以重复利用的,用来实现相关联功能的代码段。
2、函数的分类
(1)常用的函数分为三大类,分别是主函数,库函数和自定义函数。
(2)主函数就是main函数,在C语言中有且仅有一个哟。
(3)库函数是C语言编译软件自带的函数,如输入/输出函数scanf/printf等。
(4)自定义函数是用户自己编写的,能完成某些功能的函数。
二、库函数
1、库函数链接:
https://zh.cppreference.com/w/c/header
2、头函数
库函数是在标准库中对应的同文件中声明的,如想要用printf函数需要有(stdio.h)头文件。
三、自定义函数
1、自定义函数的形式
一般定义形式如下
函数返回值类型 函数名(类型名 形参1,类型名 形参2,类型名 形参3) { 说明部分 语句部分 }
2、注意事项
(1)函数名是唯一的,函数不能嵌套定义,就是不能再一个函数内部再定义一个函数。
(2)省略函数返回值类型时,默认为int型,不需要返回值时,可定义为空类型,如void。
(3)函数可以没有形参,形参以及函数体再被调用时才临时开辟内存单元,退出函数时,将被全部释放。
3、函数值
函数值通过return 语句返回,例如
return 表达式; 或 return (表达式); 或 return;
表达式的类型必须和函数首部说明的类型一致,若不一致,则转换为函数定义时的类型。
示例
#include<stdio.h> int ret(double a, double b) { double s = a*b; return s; } int main() { double a = 3.1; double b = 3.1; double r = ret(a, b); printf("%lf\n", r); }
本来返回值为double,但是函数返回值为int,导致结果为9.000000。
4、函数的调用
函数调用一般形式如下
函数名(实参表列) add(a,b);
实参个数要和形参个数匹配,函数应先定义在调用
5、函数的说明
函数说明一般形式如下
类型名 函数名(形参1的类型 ,形参2的类型) int add(int,int);
6、综合示例
两数之和
第一种 #include<stdio.h> double add(double,double);//函数说明 int main() { double a,b,sum = 0; scanf("%lf %lf",&a,&b); sum = add(a,b);//函数调用,将获得的函数值赋给sum printf("sum = %lf\n",sum); } double add(double x,double y)//函数定义 { double s; s = x+y; return s; } 或者 第二种 #include<stdio.h> double add(double x,double y)//函数定义 { double s; s = x+y; return s; } int main() { double a,b,sum = 0; scanf("%lf %lf",&a,&b); sum = add(a,b);//函数调用,将获得的函数值赋给sum printf("sum = %lf\n",sum); }
二、调用函数和被调用函数的数值传递
1、实参传给形参
实参传给形参的数据传递是单向的,按值传递。
如sum =add(a,b)中a和b就是实参,有确定的值,调用时将a,b的值各复制一份,分别赋给形参的a和b。
2、通过函数返回值传递
如sum=add(a,b)获得的函数值赋给sum,通过return 语句将函数值返回调用处,就是add(a,b)带回来一个值,将这个值赋值给了sum。
3、综合示例
判断素数
#includ<stdio.h> #include<math.h>//sqrt需要包含的头文件 int isprime(int a) { int i = 0; for(i = 2;i<=sqrt(a);i++)//sqrt是开方的函数,一个数的因子一定会小于或等于它的平方根 { if(a%i==0) return 0; return 1; } } int main() { int n = 0; scanf("%d",&n); if(isprime(n)) printf("%d是素数\n",n); else printf("%d不是素数\n",n); }
求1/1-1/3+1/5-1/7+…1/n的值
#include<stdio.h> double fun(int n) { int flag = 1; double s = 0.0; for (int i = 1; i <= n; i++) { s += (1.0/i*flag); flag *= -1; } return s; } int main() { int n = 0; scanf("%d", &n); printf("%lf\n", fun(n)); return 0; }
编写函数计算n的x次方
#include<stdio.h> int fun(int x, int n) { int i, s = 1; for (i = 1; i <= x; i++) s *= n; return s; } int main() { int a, b, m = 0; printf("请输入两个数\n"); scanf("%d %d", &a, &b); m = fun(a, b); printf("%d的%d次方是%d\n", b, a, m); return 0; }