2020.9.18 第8节 用函数实现模块化程序

本文介绍了如何使用C语言中的函数来实现模块化程序。讲解了函数的组成,包括返回值类型、函数名和参数表,并探讨了不同类型的函数形态。文章详细阐述了函数参数、调用方式,特别是递归调用的实现。此外,还强调了函数传参的过程和数组处理,以及变量的作用域。最后,通过实例展示了模块化编程的原则和实践。
摘要由CSDN通过智能技术生成

2020.9.18 用函数是实现模块化程序

一、认识函数

1.函数的组成

​ 函数返回值类型 函数名(参数表)
​ {
​ 函数体;
​ return 数据;
​ }
​ 函数返回值类型 —>return 后面的数据的类型
​ void :空 —>没有
​ 1.1 任何函数遇到return 该函数结束
1.2 不写返回值,默认为int
​ 1.3 void返回值能不能return? 可以return
​ 1.4 函数返回值是函数唯一的遗留物 他是一个值

函数名: 随便写什么东西 —>标识符
参数表: 定义的变量
函数体: 写的代码

2.常见的函数形态

​ 2.1 功能描述
没有返回值,无参数,单纯是装一段代码
​ 2.2 数据处理
无返回值有参
​ 2.3 充当状态分析
0,1

3.函数参数

​ 都是参数赋值的方式
​ 形参:形式参数 定义函数的时候叫做形参
​ 实参:实际参数 调用的时候用参数
​ 理解: 形参是实参拷贝本

4.调用函数 函数调用

​ 函数名(实际参数);
​ 通常参数需要和形参保持类型和数目的一致性

#include <stdio.h>
//没有参数没有返回值
//NULL  void*
void makeMenu(void)   //等效 void makeMenu(); 
{
   
	printf("---------【自动关机小程序】----------\n");
	printf("\t\t0.退出系统\n");
	printf("\t\t1.立刻关机\n");
	printf("\t\t2.定时关机\n");
	printf("------------------------------------\n");
	return;		//不返回任何东西,对于void
}
//条件判断:状态
int gameOver() 
{
   
	return 1;
	if (1)
		return 0;
	else
		return 1;
}
//数据处理
int sum(int a, int b)  //形参 int a=实参1 int b=实参2
{
   
	a = 1001;
	return a + b;
}
//默认为int类型
print() 
{
   
	printf("我没有返回值");
}

//缺少返回值
//不是所有的控件都具有返回值
// “returnNum”: 不是所有的控件路径都返回值
int  returnNum() 
{
   
	for (int i = 0; i < 3; i++)
		if (i == 2)
			return i;

	//
	return -1;		//通过返回一个垃圾值充当没有满足条件的返回值
}


#include <stdio.h>
int main()
{
   
	//函数调用
	sum(1, 2);		//1,2 实参
	//int sum(1,2); 错误
	int aa = 1;
	int bb = 2;
	sum(aa, bb);
	print();
	//函数返回值是函数调用后的唯遗留物
	//函数调用后这个表达式的值
	//赋值
	int result=sum(2, 3);
	//做算数运算符
	result = sum(2, 3) * 2;
	printf("%d", sum(2, 3));
	//sum(2, 3) = 12;
	return 0;		//int 数据
}

二、函数的定义与声明

函数定义和声明问题:

1.未定义问题

​ 1.1 编译顺序问题,程序用到的东西一定是要已经存在的
​ 1.2 声明函数可以不写形参名,实现函数必须带参数

2.无法的解析的xxx符号

​ 无法解析的外部符号 _MIN,函数 _main 中引用了该符号
​ 2.1 通常情况调用时候函数名字写错
​ 2.2 函数没有实现

#include <stdio.h>
void print();
int max(int, int);
//int MIN(int, int);
int main() 
{
   
	//Min(1, 2);
	return 0;
}
void print()
{
   
	//warning C4013: “max”未定义;假设外部返回 int
	printf("%d", max(1, 2));
}
int  max(int a, int b)
{
   
	return a > b ? a : b;
}

三、函数调用

1.嵌套调用

​ 1.1 通过函数返回值充当参数的方式去嵌套调用
​ 1.2 通过实现递归调用

2.如何写函数递归:

​ 1.1 退出性条件
​ 1.2 数学递归公式
​ F(1)=1 退出条件
​ F(2)=1; 退出条件
​ f(3)=f(2)+f(1);
​ f(n)=f(n-1)+f(n-2); n>2 递归公式

#include <stdio.h>

int Max(int a, int b) 
{
   
	return a > b ? a : b;
}
int f(int n) 
{
   
	if (n == 1 || n == 2)
		return 1;
	return f(n - 1) + f(n - 2);
}
//求阶乘   1!=1
//		  2!=2*1
//		  3!=3*2*1
//        f(n)=n*f(n-1); n>1

int 阶乘(int n) 
{
   
	if (n == 1)
		return 1;
	return 阶乘(n - 1) * n;  //5*4!  5*4*3!
}

int main() 
{
   
	int a = 1;
	int b = 2;
	int c = 3;
	printf("%d", Max(Max(Max(a, b), c),4));
	int ab = Max(a, b);
	int abc = Max(ab, c);
	Max(abc, 4);
	printf("%d\n", f(3));
	printf("%d\n", 阶乘(5));
	return 0;
}

四、函数传参

1.传参就是一个赋值过程

​ 所以形参只是实参的拷贝本

2.特殊的传参

2.1 处理数组数据

​ 通常都会传入一个数组长度进去

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void 自己写的函数(int a) 
{
   
	a = 1001;
	printf("函数中:%d\n", a);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值