1、引入函数的原因
编程中常遇到完成某个功能的程序段出现多次;大家均要用到的功能。 为了减少不必要的重复编程使程序质量提高。在计算机高级语言中,引入函数(或子程序、过程)
2、函数的分类
C程序是由一个主函数和其它若干函数构成,每个函数实现一定的功能,其中主函数main()是必需的,其它函数被主函数调用或者其它函数之间相互调用。
C语言的函数可以分为三类:主函数main()、库函数(如printf()、scanf()等)和用户自定义函数。
3、函数的执行过程
C程序总是从主函数开始执行,其它函数只有在被主函数或其它正在执行的函数调用时才能被程序执行,执行后返回调用函数,最后返回到主函数,在主函数中结束整个程序的运行。
所有的函数在定义时是相互独立的,它们之间是平行关系,所以不能在一个函数内部定义另一个函数,即不能嵌套定义。函数间可以互相调用,但是不能调用主函数。
4、函数的定义
常见的函数定义的形式如下:
类型标识符 函数名(形式参数类型说明表列)
{
函数体
}
例如求两个浮点数x、y中最大数的函数max()定义
float max(float x,float y)
{
float z;
if (x>y)
z=x;
else z=y;
return z;
}
6、函数的形式参数
形式参数类型说明表中的形式参数用于接受主调函数传递过来的数值。
----------------------------------------------------------------------------------------------------------------------------------
例如max()是求两个数的最大数,需要从主调函数中传过来两个浮点数,所以形式参数有两个。如果max()改为求三个数的最大数,则从主调函数中需要传过来三个数,此时形式参数需要定义三个,并且实际传过来数据类型必须与形式参数的类型一致。
形式参数的命名只要符合变量的命名规则即可,无需与主调函数中的变量名一致。
如果函数不需要从主调函数处接受数据,可以不带形式参数,此时形式参数类型说明表是空的,但是函数名后面的圆括号不能省。
7、函数的声明
声明的方法是在主调函数开始位置加上被调函数的“函数原型”,即函数定义的第一行。
使用函数之前需要使用ANSI原型声明该函数
void show_n_char(char ch,int num);
当函数接受参数时,函数原型通过使用一个逗号分隔的类型列表来指名参数的个数和类型
void show_n_char(char,int);//在原型中使用变量名并没有实际地创建变量,这只是说明char代表一个char类型变量
7、函数的调用
函数只有在被调用时才能执行。当一个函数调用另一个函数时,程序就从主调函数转移到被调函数,并且从被调函数的函数体起始位置开始执行,直到函数体执行结束,返回到主调函数的调用位置继续往下执行。
函数调用的一般形式
函数名(实参表列);
a、当实参表列中含有多个参数,则各参数用逗号间隔
show_n_char(SPACE,spaces);
show_n_char(SPACE,(WIDTH - strlen(PLACE)/2))
1、数组的定义
类型标识符 数组名[元素个数];
可以存放5个整型数据
数组的定义要注意以下几个问题:
数组名的命名规则同变量名的命名,要符合C语言标识符的命名规则。
数组名后面的“[ ]”是数组的标志,不能用圆括号或其它符号代替。
数组元素的个数必须是一个固定的值,可以是整型常量、符号常量或者整型常量表达式。例如:int b[3*4];
2 、一维数组的定义
数组的定义要注意以下几个问题:
定义数组时,系统将按照数组类型和个数分配一段连续的存储空间存储数组元素。例如,上述定义的a、b的存储空间为20和48个字节。
在定义数组要特别注意:绝对不能使用变量或者变量表达式来表示元素个数,大多数情况下不要省略元素个数(形参和数组初始化时除外)。例如错误的写法:int n=3 , c[n] , d[ ];
数组元素的个数表示数组最多可以存放的数据。在定义int a[5]时,数组a最多可以存放5个整型数据,分别放入a[0]、a[1]、a[2]、a[3]、a[4]中,其中0~4称作数组的下标。数组的下标从0开始,小于元素个数,所以当定义数组a含有5个元素时,使用数组元素a[5]是错误的
数组的声明:
float candy[365];//365个浮点数的数组
char code[12];//12个字符的数组
int states[50];//50个整型数组
3、一维数组的定义和引用
数组元素存放是按照下标的顺序按次序存放的
---------------------------------------------------
实例1:数字0~4放入一个整型数组,并逆序输出数组
---------------------------------------------------
#include <stdio.h>
int main()
{
int i,a[5];
for (i = 0;i < 5;i++){
a[i] = i;
}
for (i = 4;i >= 0;i--){
printf("%3d",a[i]);
printf("\n");
}
}