函数定义
return_type function_name([datatype1 arg1],[datatype1 arg2],...)
{
//函数体
}
函数三要素
返回值类型
函数名
参数列表
自定义函数的完整写法
#include <stdio.h>
// 函数原型
int sum(int,int);
// 调用函数
int main()
{
int sum();
}
// 函数定义
int sum(int num1,int num2)
{
//函数实现的代码
}
注意:
- 函数原型与函数定义的头部类似,函数原型最后以分号结尾
- 函数原型中的参数名称可以省略,只写参数类型
练习
三种图形的面积计算公式如下:
圆:s = PI * r * r;
矩形:s = width * height;
使用函数分别实现图形的面积计算,打印计算结果
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 函数原型
void calcCircle(); // 计算圆面积
void calcRectangle(); //计算矩形面积// 函数定义
void calcCircle()
{double r,s; //定义圆的半径和面积printf("请输入半径:");scanf("%lf",&r);s = 3.14 * pow(r,2);printf("面积为:%.2lf\n",s);
}
void calcRectangle()
{double width,height,s; //定义矩形宽、高和面积printf("请输入宽和高:");scanf("%lf%lf",&width,&height);s = width * height;printf("面积为:%.2lf",s);
}
int main()
{calcCircle(); // 调用计算圆面积calcRectangle(); // 调用计算矩形
}
带返回值的函数
C语言中的返回值
关键词:return
只能返回一个值,不能返回多个值
返回值类型必须与原型中的返回值类型匹配
return会立即终止函数并返回,可返回空值
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 函数原型
int calcSum(); // 求1-100之间的偶数和
// 函数定义
int calcSum()
{// 1-100之间的偶数和int sum = 0;int i;for(i = 1;i <= 100;i++){if(i % 2 == 0){sum += i;} } // 将计算的结果返回return sum;
}
// 调用函数
int main()
{// 如果函数有返回值,调用时,记得使用对应类型的变量int sum = calcSum(); printf("1-100偶数和为:%d",sum);
}
函数案例
需求:
书写函数实现数组元素的查找,要求返回找到的元素下标
#include <stdio.h>
#include <stdlib.h>
// 书写函数实现数组元素的查找,要求返回找到的元素下标
// 函数原型
int search();
// 函数调用
int main()
{int index = search(); // 接收函数里面返回的值printf("%d",index);
}
// 函数定义
int search()
{int SearchIndex = -1; // 查找数字的下标,初始值一个不存在的下标int SearchNum; // 需要查找的数字int nums[] = {2,44,99,33,222,1000,99,4}; // 数组printf("请输入需要查找的数:");scanf("%d",&SearchNum);int i;for(i = 0;i < 8;i++){// 使用指针取值 if(SearchNum == *(nums + i)){SearchIndex = i; // 记录找到元素的下标 break;} } return SearchIndex; // 返回查找到的元素下标
}
书写函数实现冒泡排序并返回排序后的数组
#include <stdio.h>
#include <stdlib.h>
// 书写函数实现冒泡排序并返回排序后的数组
// 函数原型
double *sort();
// 函数调用
int main()
{sort();
}
// 函数定义
double *sort()
{double nums[] = {2,4,9.9,1,4,6};double temp; // 中间值// 使用双循环排序// 交换个数for (int i = 0;i < 6;i++){// 交换次数for(int j = 0;j < 6 - i - 1;j++){if(nums[j] > nums[j + 1]){temp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = temp;}}}// 使用循环打印printf("打印数字内容为:\n");for(int i = 0;i < 6;i++){printf("%.2lf\t",nums[i]);}return nums; // //返回值是首地址,函数名和函数原型前面要加*,调用的时候不需要只要函数名
}
注意://返回值是首地址,函数名和函数原型前面要加*,调用的时候不需要只要函数名
C语言自定义函数返回数组、字符串的写法:
小结:
动态分配内存
malloc (int *)malloc(4 * 5); //强转,5个元素4字节
calloc calloc(5,4);
free 释放malloc和calloc分配的内存
realloc 推翻malloc和calloc,重新分配动态内存
❥(^_-) 我的学习之路任重道远,咱们下期见~~~