常见的库函数有以下几种类型:
- 输入输出函数(头文件为stdio.h):用于完成输入输出功能。
- 字符串函数(头文件为string.h):用于字符串操作和处理。
- 数学函数(头文件为math.h):用于数学函数计算。
- 内存管理函数(头文件为stdlib.h):用于内存管理。
- 日期和时间函数(头文件为time.h):用于日期、时间的转换操作。
- 接口函数(头文件为dos.h):用于与DOS、BIOS和硬件的接口。
无参函数没有形式函数,其定义的一般形式如下:
类型说明符 函数名 (void)
{
定义与声明部分
语句部分
}
其中,void表示函数没有参数。void也可以省略不写,而只在函数名后面跟一对空括号,这对空括号不能省略。
写一个简单的例子。
#include <stdio.h>
int p() {
printf("你好!");
return 0;
}
int main() {
p();
return 0;
}
输出结果。
有参函数有形式参数(简称形参),形参用于接收调用函数传递过来的数据,其定义的一般形式如下:
类型说明符 函数名 (形式参数表)
{
定义与声明部分
语句部分
}
写一个简单的例子。
#include <stdio.h>
/*编写一个计算矩形面积的函数*/
float calculate(float chang, float kuan) {
float square;
square = chang * kuan;
return square;
}
int main() {
float a, x, area;
printf("请输入矩形的长:");
scanf("%f", &a);
printf("请输入矩形的宽:");
scanf("%f", &x);
area = calculate(a, x);
printf("矩形的面积是%.3f", area);
return 0;
}
其中,用户自定义函数可以改写:
float calculate(float chang, float kuan) {
return (chang * kuan);
}
输入与输出结果不变。
函数的声明又称函数原型声明或函数原型,其一般形式如下:
返回值类型 函数名(形参类型1 形参名, 形参类型2 形参名, ···); //第一种形式
返回值类型 函数名(形参类型1, 形参类型2, ···); //第二种形式
主调函数和被调函数出现的前后位置可以任意,如果被调函数在主调函数之前,可以不对被调函数进行声明(例如对矩形面积计算的例子),反之必须对被调函数进行声明。
改写对矩形面积计算的例子。
#include <stdio.h>
float calculate(float, float); //函数声明也可以改写成“float calculate(float chang, float kuan);”
int main() {
float a, x, area;
printf("请输入矩形的长:");
scanf("%f", &a);
printf("请输入矩形的宽:");
scanf("%f", &x);
area = calculate(a, x);
printf("矩形的面积是%.3f", area);
return 0;
}
float calculate(float chang, float kuan) {
return (chang * kuan);
}
或是
#include <stdio.h>
int main() {
float a, x, area;
printf("请输入矩形的长:");
scanf("%f", &a);
printf("请输入矩形的宽:");
scanf("%f", &x);
float calculate(float, float); //函数声明也可以改写成“float calculate(float chang, float kuan);”
area = calculate(a, x);
printf("矩形的面积是%.3f", area);
return 0;
}
float calculate(float chang, float kuan) {
return (chang * kuan);
}
总的来说,对函数的声明一定要在使用函数的语句前。
关于数组,写一个简单的例子。
#include <stdio.h>
float calculate(float b[], int n); //函数声明,可改写“ float calculate(float [], int); ”,其中,"[]"不能省略
int main() {
int i = 0, n;
printf("请输入元素总数(超过3个):");
scanf("%d", &n);
float a[n], total, last3;
for (i = 0; i < n; i++) {
printf("请输入第%d个数字:", i + 1);
scanf("%f", &a[i]);
}
total = calculate(a, n); //计算数组总和
last3 = calculate(&a[n - 3], 3); //计算数组最后3个元素的总和
printf("总和:%.2f\n", total);
printf("最后3个元素总和:%.2f", last3);
return 0;
}
float calculate(float x[], int n) {
float sum = 0;
int i;
/*计算传入数组总和*/
for (i = 0; i < n; i++)
sum += x[i];
return sum;
}
输入和输出的结果。
二维数组名做函数的参数:二维数组名做形参时,第一维的长度说明允许省略,第二维的长度不能省略。
写一个简单的例子。
#include <stdio.h>
float plus(float [][3], int);
int main() {
float x[2][3] = {{11.2, 1.2, 3}, {1.1, 2.2, 3.3}}, total, t2;
total = plus(x, 2); //计算数组x的总和
printf("总和是%f\n", total);
t2 = plus(&x[1], 3); //计算数组x[1]行的总和
printf("第二行总和是%f", t2);
return 0;
}
float plus(float a[][3], int n) { //传入参数n作为形参数组a的行下标,即a[n][3]
int i, j;
float sum = 0;
for (i = 0; i < n; i++) {
for (j = 0; j < 3; j++)
sum += a[i][j];
}
return sum;
}
输出结果。