内容正文:
第六章 程序的模块化--函数
1
CONTENTS
目录
01
02
函数的分类
函数的认知
03
自定义函数及其应用
04
函数的调用
CONTENTS
目录
05
06
函数的递归调用
函数的嵌套调用
07
数组作为函数的参数
08
变量的作用域
C语言
知识树
My First Template
函数的分类
C语言程序设计
5
C语言
本次任务
利用函数
求1到5的平方根和立方。
函数的分类
My First Template
C语言
函数的认知
函数
具有一定功能的代码块。
My First Template
分工
复用
封装
C语言
函数的认知
函数的分类
C语言中的函数按照不同的分类标准可以分为不同的类型。
1、从函数定义的角度
库函数:
由C语言系统提供;
用户无须定义,也不必在程序中作类型说明;
只需在程序前包含有该函数定义的头文件;
自定义函数:
用户在程序中根据需要而编写的函数;
My First Template
自定义函数
库函数
C语言
函数的认知
库函数
使用库函数应注意:
(1)、函数功能
(2)、函数参数的数目、顺序、各参数意义和类型
(3)、函数返回值意义和类型
(4)、需要使用的包含文件
内置函数 头文件 用途
double sqrt(double x) math.h 计算x的平方根
double pow(double x, double y) 计算x的y次幂
double ceil(double x) 求不小于x的最小整数,并以double形式显示
double floor(double x) 求不大于x的最大整数,并以double形式显示
int toupper(int x) ctype.h 如果x为小写字母,则返回对应的大写字母
int tolower(int x) 如果x为大写字母,则返回对应的小写字母
int rand(void) stdlib.h 产生一个随机数
void exit(int retval) 终止程序
My First Template
C语言
函数的认知
函数的分类
C语言中的函数按照不同的分类标准可以分为不同的类型。
2、按照有没有参数
无参函数:
函数定义、说明及调用中均不带参数。主调函数和被调函数之间不进行参数传送。此类函数通常用来完成一组指定的功能,可以返回或不返回函数值。
有参函数:
函数定义、说明时有参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数,称为实际参数(简称为实参)。进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用
My First Template
无参函数
有参函数
C语言
函数的认知
任务实现
#include <stdio.h>//预处理输入输出
#include <math.h>//预处理数学相关
void main()//主函数
{
int x=1;
double pingfangen,lifang;
while(x<= 5)
{
pingfangen=sqrt(x);//使用库函数sqrt()
lifang=pow(x,3);//使用库函数pow()
printf(" %d的平方根:%3.2f\t %d的立方:%5.0f
",
x,pingfangen,x,lifang);
x++;
}
}
My First Template
自定义函数及应用
C语言程序设计
12
C语言
本次任务
利用函数实现具有加减乘除功能的简单计算器。
C语言程序设计 函数基础及应用
My First Template
C语言
C语言程序设计—自定义函数及应用
#include "stdio.h"//预处理
void main()//主函数
{//定义变量存储参数和和差积商
int canshu1,canshu2,he,cha,ji,shang;
printf("请输入两个数:
");
scanf("%d%d",&canshu1,&canshu2);//输入参数
he=canshu1+canshu2;//求和
cha=canshu1-canshu2;//求差
ji=canshu1*canshu2;//求积
if(canshu2!=0)//0不能做除数
{
shang=canshu1/canshu2;//求商
}
printf("%d和%d的和是%d
",canshu1,canshu2,he);
printf("%d和%d的差是%d
",canshu1,canshu2,cha);
printf("%d和%d的积是%d
",canshu1,canshu2,ji);
printf("%d和%d的商是%d
",canshu1,canshu2,shang);
}
我们能解决的问题--加减乘除
运行结果
My First Template
#include "stdio.h"//预处理
void main()//主函数
{//定义变量存储参数和和差积商
int canshu1,canshu2,he,cha,ji,shang;
printf("请输入两个数:
");
scanf("%d%d",&canshu1,&canshu2);//输入参数
he=canshu1+canshu2;//求和
cha=canshu1-canshu2;//求差
ji=canshu1*canshu2;//求积
if(canshu2!=0)//0不能做除数
{
shang=canshu1/canshu2;//求商
}
printf("%d和%d的和是%d
",canshu1,canshu2,he);
printf("%d和%d的差是%d
",canshu1,canshu2,cha);
printf("%d和%d的积是%d
",canshu1,canshu2,ji);
printf("%d和%d的商是%d
",canshu1,canshu2,shang);
}
C语言
任务分析
数据采集
数据输出
算法逻辑
函数
自定义函数及应用—任务分析
My First Template
C语言
任务分析
自定义函数及应用—任务分析
C语言中所有要使用的函数都必须“先定义、后使用”,在C编译环境中是必须先有这个函数,才能去调用。函数定义完成,必须明确函数功能。
My First Template
函数的定义
函数的声明
函数的调用
C语言
void printChar()
{
printf("******");
}
int qiuhe(int x, int y)
{
int z;
z=x+y;
return sum;
}
该函数名为printChar ,无参数,使用void说明无返回值,函数体内的语句用于输出6个“*”。
该函数名为qiuhe,它有两个int类型的参数,返回值为int类型。在函数体内有三条语句实现了求两个数的和,并将它返回。
第一步:函数定义
自定义函数及应用—相关知识:函数的使用步骤
My First Template
C语言
C语言程序设计 函数基础及应用
返回语句
形式: return(表达式);
或 return 表达式;
或 return;
功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数
说明:
函数中可有多个return语句
若无return语句,遇}时,自动返回调用函数
若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换
例 有返回值函数
int sum(int x,int y )
{
return x+y;
//return (x+y);
}
函数返回值
例 无返回值函数
void swap(int x,int y )
{ int temp;
temp=x;
x=y;
y=temp;
}
My First Template
C语言
#include <stdio.h>
float sum (int, int);
void main()
{
. . .
. . .
}
float sum(int x,int y)
{
. . .
}
函数原型说明在形式上与函数头部类似,最后加一个分号。原型说明中参数表里的参数名可以不写(只写参数类型)。
第二步:声明函数原型
自定义函数及应用—相关知识:函数的使用步骤
My First Template
C语言
C语言程序设计 函数基础及应用
通过在程序中使用函数名称,可以执行函数中包含的语句,这称为调用函数。
调用形式 函数名(实参表);
说明:实参与形参个数相等,类型一致,按顺序一一对应,实参必须有确定的值,形参必须指定类型。
第三步:函数调用
函数语句:
例 printstar();
函数表达式:
例 m=max(a,b)*2;
函数参数:
例 printf(“%d”,max(a,b));
m=max(a,max(b,c));
My First Template
C语言
#include "stdio.h"//预处理
int qiuhe(int x,int y);
int qiucha(int x,int y);
int qiuji(int x,int y);
int qiushang(int x,int y);
void main()//主函数
{//定义变量存储参数和和差积商
int canshu1,canshu2,he,cha,ji,shang;
printf("请输入两个数:
");
scanf("%d%d",&canshu1,&canshu2);//输入参数
he=qiuhe(canshu1,canshu2);//求和
cha=qiucha(canshu1,canshu2);//求差
ji=qiuji(canshu1,canshu2);//求积
shang=qiushang(canshu1,canshu2);//求商
printf("%d和%d的和是%d
",canshu1,canshu2,he);
printf("%d和%d的差是%d
",canshu1,canshu2,cha);
printf("%d和%d的积是%d
",canshu1,canshu2,ji);
printf("%d和%d的商是%d
",canshu1,canshu2,shang);
}
任务实现
自定义函数及应用—任务实现
int qiuhe(int x,int y)//求和函数
{ return x+y; }
int qiucha(int x,int y)//求差函数
{ return x-y; }
int qiuji(int x,int y)//求积函数
{ return x*y; }
int qiushang(int x,int y)//求商函数
{
if(y!=0) { return x/y;}
else { return 0; }
}
函数原型声明
函数调用
定义四个子函数
My First Template
$$