逻辑上:
1、能够完成特定功能的独立的代码单元。
物理上:
1、能够接受数据。
2、能够对接收的数据进行处理。
3、能够将数据处理的结果返回(也可以不返回任何值)。
总结:函数是一个工具,它是为了解决大量类似问题而设计的。函数可以当作一个黑匣子。
1、避免了重复性编写代码的操作。
2、有利于程序的模块化。
函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法。
函数返回值类型 函数名字(函数的形参列表)
{函数的执行体;return 待返回的值;
}
注意:
#include // 主函数就是一个int返回类型的函数。int表示该函数的返回值为int类型
// main为函数名
// 圆括号中的void表示该函数无参数
int main(void){return 0; // 0表示主函数返回值为0
}
# include // 定义f()函数
int f()
{return 10.8; //因为函数的返回值类型为int,所以最终f的返回值是10而不是10.8
}// 定义主函数
int main(void)
{int x = 0;x = f(); printf("%d\n", x); // x的值为10return 0;
}
// void表示该函数无返回数据类型。
// Info表示函数名。
// 圆括号中的void表示该函数无参数。
void Info(void){printf("This is info");return; // 表示终止函数,而不是返回类型值。return也可不写。
}
// double表示该函数的返回类型为double类型
// Div表示函数名
// void表示该函数无参数
double Div(void){double num = 10.0;
double div = 5.0;
double ret = 0;ret = num / div;return ret;
}
1、终止被调函数,向主调函数返回表达式的值。
2、如果return后的表达式为空,则只终止函数,不向被调用函数返回任何值。
3、break是用来终止循环和switch,return是用来终止函数的。
# include void f(void)
{int i;for (i = 0; i < 5; ++i){printf("同志们辛苦了\n");break; //终止循环return; //终止函数}printf("同志们好\n");
}
int main(void)
{f();return 0;
}
1、有参函数和无参函数
2、有返回值和无返回值
3、库函数和用户自定义函数
4、值传递函数和地址传递函数
5、普通函数和主函数(main函数)
一个程序必须有且只能有一个主函数。主函数可以调用普通函数,普通函数不能调用主函数。普通函数可以相互调用。主函数是程序的入口,也是程序的出口。
有参函数就是在函数名后的括号中有参数的定义。在函数名后面括号中的参数称为形参。在函数调用时传递的具体值是实参。无参函数就是在函数名后的括号中为void或为空的函数。
示例1:比较两个数的最大值
# include // i,j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}
示例2:判断是否为素数
# include
# include // bool表示返回值为布尔类型
// val为函数的形参,int为形参的数据类型
bool Isprime(int val)
{int i;for (i = 2; i < val; ++i){if (val % i == 0)break;}if (i == val)return true;elsereturn false;
}int main(void)
{int val = 0;scanf("%d", &val);// val为函数的实参if (Isprime(val))printf("Yes");elseprintf("No");return 0;
}
如果函数调用写在了函数定义的前面,则必须加函数前置声明
函数前置声明:
1、告诉编译器即将可能出现的若干字母代表的是一个函数。
2、告诉编译器即将可能出现的若干字母所代表的函数的形参和返回值的具体情况。
3、函数声明是一个语句,末尾必须加分号。
4、对库函数的声明是通过# include <库函数所在的文件的名字.h>来实现。
1、个数相同
2、位置一一对应
3、数据类型必须相互对应
在所有函数外部定义的变量。
全局变量使用范围:从定义位置到整个程序结束。
示例:
# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}
在一个函数内部定义的变量或者函数的形参。
局部变量的使用范围:只能在本函数的内部使用
局部变量在函数调用时创建,在函数结束后销毁。
示例:
# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参,也是该函数的局部变量
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m; // 局部变量,声明在主函数的内部,不能在函数的外面使用while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}
在一个函数内部如果定义的局部变量的名字和全局变量的名字一样时,局部变量会屏蔽全局变量。