**
函数,有些翻译成子程序。
c语言中的函数就是完成某项特定任务的**一小段代码**。同时,一个函数如果能完成某项特定任务的话,这个函数是可以复用的。提升了软件开发的效率。
在c语言中,我们一般会见到两类函数。
(1)库函数------现成的函数,可以直接使用。
(2)自定义函数----自己定义的函数
**
**
2.1标准库和头文件
标准库: 约定了常用函数的标准。
printf: 不去实现,只规定标准。
功能:在屏幕上打印信息
参数:xxxxxx
返回值:xxxxx
…
2.2库函数的使用方法
sqrt:计算平方根--------要包含头文件 <math.h>
double r=sqrt(16.00000);
printf("%lf",r);
**
**
3.1函数的语法形式
ret_type fun_name(形式参数){
函数体
}
ret_type:是函数返回类型
fun_name:是函数名
函数返回类型有两类:● void-表示什么都不返回
●其他 int char short ...
3.2函数的举例:
写一个加法函数,完成2个整型变量的加法操作。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int Add(int x, int y)//形式上的参数 简称形参。
{
int z = 0;
z = x + y; return x+y;
return z;
}
int main() {
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int c = Add(a, b); //a和b是真实传递给Add的参数,是实际参数,简称实参。
printf("%d", c);
return 0;
}
**
**
实参:真正传递给函数的参数 形参:只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程叫形参的实例化。
我们可以理解为形参是实参的一份临时拷贝。
**
**
●return后边可以是一个值也可以是一个表达式。
●return后边也可以什么都没有,直接写return;这种写法适合函数返回类型是void的情况。(可以结束这个函数)---不能用break;(是循环)
●return返回的值和函数返回类型不一样,系统会自动将返回的值隐式转换为函数的返回类型。
●如果函数存在if等分支的语句,则要保证每种情况下都有return返回,否则会出现编译错误。
**
**
●形参与实参的个数要匹配。
●函数实参是数组,形参也可以是数组。
●形参如果是一维数组,数组大小可以省略不写。
●形参如果是二维数组,行可以省略,列不能省略。
写一个函数对整型数组,里的内容全部设置成-1.
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
void set_arr(int arr[], int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
arr[i] = -1;
}
}
void printf_arr(int arr[], int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d", arr[i]);
}
}
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9,10};
//先写一个函数,将arr内的元素全设置成-1
int sz = sizeof(arr) / sizeof(arr[0]);
set_arr(arr, sz);
printf_arr(arr, sz);
return 0;
}
二维数组的传参:
**
**
假设计算某年某月有多少天?
is_leap_year():根据年份确定是否是闰年
get_days_of_month():确定是否是闰年后,再根据月计算这个月的天数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int is_leap_year(int y) {
if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
return 1;
else
return 0;
}
int get_days_of_month(int y,int m) {
int days[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int d = days[m];
if (is_leap_year(y) && m == 2) {
d += 1;
}
return d;
}
int main() {
int y = 0;
int m = 0;
scanf("%d %d", &y, &m);
int d= get_days_of_month(y,m);
printf("%d\n", d);
return 0;
}
链式访问:将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数的链式访问。
可以写成 :printf("%zd", strlen("abc"));
例题:
printf(“%d”,printf(“”%d),printf(“%d”,43^(打印字符: 2个字符)^));