函数是一段可以重复调用的、功能相对独立完整的程序段。
①C语言是函数式语言
②必须有且仅有一个名为main的主函数
③C程序的执行总是从main函数开始,在main中结束
④函数不可以嵌套定义,但可以嵌套调用
函数的分类:
①从使用者角度:标准函数(库函数,直接调用)和用户自定义函数(用户自己编写的)
②从函数形式调度:无参数无返回值函数、无参数有返回值函数、有参数无返回值函数、有参数有返回值函数
使用库函数应注意:
①函数功能
②函数参数的数目和顺序、各参数意义和类型
③函数返回值意义和类型
④需要使用的的包含文件
函数的定义和调用
Ⅰ.无参数无返回值函数:
函数声明:void 函数名(void) ; 或者 void 函数名();
函数调用:函数名();
注意:对函数调用之前,必须先声明或先定义
编写C程序的一般格式:
①文件包含(include <stdio.h>等,用于标准库库函数原型声明)
②产量定义(根据需要而定,如 #define PI3.1415等)
③变量定义
④用户自定义函数声明
⑤main函数
⑥函数的实现
函数的返回形式:
①return(表达式); //有返回值
②return 表达式; //有返回值
③return ; //无返回值
函数中可以有多个return语句。对于无参数无返回值函数只能第三种形式
#include <stdio.h>
#include <math.h>
void showerror(); //声明showerror函数的原型
void main()
{
int a;
scanf("%d", &a);
while(a < 0)
{
showerror();
scanf("%d", &a);
}
printf("sqrt(a) = %.2f\n", sqrt(a));
}
void showerror() //函数的定义 无参数无返回值
{
printf("input error !\n"); //函数体
}
Ⅱ.无参数有返回值函数
函数声明:返回值类型符 函数名(void); 或 返回值类型符 函数名();
多用于完成某项固定的处理,执行完成后向调用者返回函数值。
函数调用: 函数名(); 或者 变量 = 函数名();
函数返回格式: return (表达式); 或 return 表达式; 表达式就是返回值。
表达式的值类型应与函数返回值类型一致
int sum()
{
int i, tot = 0;
char key;
key = getchar();
if(key != '0' key != '1')
return(-1);
for(i = (key == '0') ? 2 : 1 ; i <= 100; i++)
tot += i;
return (tot);
}
Ⅲ.有参数无返回值函数
函数声明:void 函数名(类型符1 形参名1,类型符2 形参符2,...类型符n 形参名n); 或 void 函数名(类型符1,类型符2,...类型符n);
主要是根据形参的值来进行某种事务的处理,灵活性比无参数的函数强,更能提现调用函数和使用函数之间的数据联系
函数调用:函数名(实参1,实参2,...实参n); 实参可以是常量、变量、表达式、函数等。
实参列表中的实参与函数定义时的形参数量相同、类型相符
实参的值在赋给形参时,他的对应关系是从左往右,一一对应 实参1 -> 形参1
#include <stdio.h>
void compare(int a, int b); //函数的原型声明
void main()
{
int i = 2;
compare i, i++; // i为实参
printf("i = %d\n", i);
}
void compare(int a, int b)
{
printf("a = %d b = %d\n", a, b);
if(a > b)
printf("a>b\n");
else
if(a == b)
printf("a=b\n");
else
printf("a<b\n");
}
Ⅳ.有参数有返回值函数
函数声明: 返回值类型符 函数名(类型符1 形参1,类型符2 形参2,...类型符n 形参n);
或 返回值类型符 函数名(类型符1,类型符2...类型符n);
根据形参的值来进行某种事务的处理,调用时可将处理后的结果值返回给调用函数。最能体现调用函数与被调函数之间的数据联系
函数调用:函数名(实参1,实参2,...实参n); 或者 变量名 = 函数名(实参1,...实参2,..实参n);
#include <stdio.h>
int max(int a, int b); //函数的原型声明
{
int a, b, c;
scanf("%d%d", &a, &b);
c = max(a, b); //函数的调用(a、b为实参)
printf("the biggest number is : %d\n ", c);
}
int max(int a, int b) //函数的定义
{
return (a > b ? a : b);
}
函数调用
①函数语句 例 printstar(); printf("Hello World! \n");
②函数表达式 例 m = max(a, b) * 2;
③函数参数 例 printf("%d", max(a,b)); m=max(a, max(b, c));
对于被调用的要求
①必须是已存在的函数
②库函数:#include <*.h>
③用户自定义函数: 函数类型说明
函数说明:
一般形式: 函数类型 函数名(形参类型 [形参名] ...); || 函数类型 函数名();
作用:告诉编译系统函数类型、参数个数及类型、以及检验
函数定义与函数说明不同。函数定义在函数外,而函数说明在函数内/外。函数说明比函数定义多了函数体。
而 在下列情况下可不作函数说明:
①若函数返回值是char或int型 系统自动按int型处理
②被调用函数定义出现在主调函数之前