函数定义
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,重新分配动态内存
❥(^_-) 我的学习之路任重道远,咱们下期见~~~