C语言学习——函数(含递归)

C语言学习——函数(含递归)一、函数的几点说明:(1) 一个源文件由一个或者多个函数组成。(2) 一个C程序由一个或者多个源文件组成。(3) C程序的执行从 main 函数开始。(4) 所有的子函数都是平行的。(5) 从用户的角度看,函数分库函数和自定义函数。(6) 函数形式:①无参函数:主调函数无数据传送给被调函数,可带或不带返回值。②有参函数:主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、函数的几点说明:

(1) 一个源文件由一个或者多个函数组成。
(2) 一个C程序由一个或者多个源文件组成。
(3) C程序的执行从 main 函数开始。
(4) 所有的子函数都是平行的。
(5) 从用户的角度看,函数分库函数和自定义函数。
(6) 函数形式:
①无参函数:主调函数无数据传送给被调函数,可带或不带返回值。
②有参函数:主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数的形参, 被调函数的数据可返回主调函数。

根据(1)(2)(3)可知,逻辑上一个C语言程序是由函数构成的,C语言程序从主函数开始执行,在主函数中调用其他函数,这些函数可能又调用别的函数,主函数执行完毕代表整个程序结束。主函数只能调用不能被调用。物理上一个程序由一个或者若干个文件(源文件)构成,函数分别放置在这些文件中。

函数定义的一般形式
无参函数的定义形式
类型标识符:
用于指定函数带回的值的类型,不写时为int型。
不带回值时可以不写。

无参函数
void PrintMesage()
{ 
   
	printf("----------Hello world----------\n");
}void PrintMesage(void)
{ 
   
	printf("----------Hello world----------\n");
}

二、函数参数和函数的值、函数调用

形式参数和实际参数
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号中的表达式

几点说明:
实参可以是常量、变量或表达式。必须有确定的值。当函数调用时,将实参的值传递给形参,若是数组名,则传送的是数组首地址。
形参必须指定类型,只能是简单变量或数组,不能是常量或表达式
形参与实参类型一致,个数相同顺序相同。
若形参与实参类型不一致,自动按形参类型转换———函数调用转换
形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放
实参对形参的数据传送是值传送,也是单向传送,当被调函数的形参发生变化时,并不改变主调函数实参的值。形、实参占据的是不同的存储单元

案例:

#include <stdio.h>
void AddFunc(int x, int y);
int main(void)
{ 
   
	int a = 66, b = 88;
	printf("a=%d,b=%d\n",a,b);
	printf("a=%d,b=%d\n", &a, &b);
	AddFunc(a, b);
	printf("a=%d,b=%d\n", a, b);
	printf("a=%d,b=%d\n", &a, &b);

	return 0;
}
void AddFunc(int x, int y)
{ 
   
	x = x + 4;
	y = y + 2;
	printf("a=%d,b=%d\n", x, y);
	printf("a=%d,b=%d\n", &x, &y);
}

结果为:
在这里插入图片描述
函数的返回值
返回语句形式:
return(表达式);或 return 表达式;
功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数

说明:
函数的返回值,必须用 return 语句带回。
return 语句只能把一个返值传递给调用函数。
函数中可有多个return语句,执行哪一个由程序执行情况来定。
if(a>b) return(a);
else return(b);
return 后的值可以是一个表达式,如:return(x > y ? x : y);
返回值的类型为定义的函数类型,不指定的按整型处理。
如:

int   max(int x, int y) 
              float  min(float a,float b) 
              double  abc(float d1,float d2)

若 return 语句中表达式类型与函数类型不一致,则转换为函数类型。
若无return语句,遇}时,自动返回调用函数。可能返回一个不确定或无用的值 。
无返回值的函数,定义为 void 类型。
函数的调用
主调函数:主动去调用其它函数
被调函数:被其它函数所调用
函数调用的一般形式
函数名(实参表列)
说明:
实参表列:有确定值的数据或表达式
实参与形参个数相等,类型一致,按顺序一一对应,当有多个实参时,实参间用“ ,”分隔
实参表求值顺序,因系统而定(Turbo C 自右向左)
调用无参函数时,实参表列为空,但( )不能省

在这里插入图片描述

函数调用的方式

按函数在程序中出现的位置,有三种调用方式:
函数语句:以独立的语句去调用函数。不要求有返回值,仅完成一定的操作。
printstar();
printf(“Hello,World!\n”);

函数表达式:
函数返回一个确定值,以参加表达式的运算。不可用于void
例 *m=max(a,b)2;

函数参数:函数调用作为另一个函数的参数。
printf(“%d”,max(a,b)); /输出大数/
m=max(a,max(b,c)); /三数比大小/

对被调用函数的声明和函数原型
对被调用函数要求:

必须是已存在的函数
库函数: #include <*.h>
用户自定义函数:如果被调函数定义在主调函数之后,那么在主调函数中对被调函数作声明。
函数声明
一般形式:函数类型 函数名(形参类型 [形参名],…… );
或 函数类型 函数名();
作用:告诉编译系统函数类型、参数个数及类型,以便检验
C语言中函数声明称为函数原型。
函数定义与函数声明不同,声明只与函数定义的第一行相同。声明可以不写形参名,只写形参类型。
函数说明位置:程序的数据说明部分(函数内或外)

说明:

旧版本C中函数声明不采用函数原型,只声明函数名和函数类型。如: float add( )
函数调用之前,如果未对函数作声明,则编译系统把第一次遇到的函数形式作为函数声明,并默认为int型。即:函数类型是int型可以不作函数声明,最好作声明。
被调用函数的定义(程序)在主调函数之前,可以不加函数声明。
在所有函数定义前,已在函数外部做了函数声明,则在各主调函数中可以不加函数声明。

三、函数的嵌套调用及递归调用

在这里插入图片描述
函数的递归调用
递归:在函数调用过程中,直接或间接的调用自身。
递归调用方式
直接递归调用:在函数体内又调用自身

间接递归调用:当函数1去调用另一函数2时,而另一函数2反过来又调用函数1自身。
解决无终止递归调用的方法是:确定好结束递归的条件。

例子:

在这里插入图片描述

实战案例:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170992.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月18日 上午8:00
下一篇 2022年8月18日 上午8:16


相关推荐

  • Vue进阶(十六):Vue 项目启动原理详解

    Vue进阶(十六):Vue 项目启动原理详解一般项目创建好后会有三个文件 index html main js app vue1 index html 所有 vue 文件都是单页面形式开发 所有 vue 组件都是通过 index html 进行渲染加载 2 main js 相当于 java 的入口函数 控制初次启动 vue 项目要加载的组件 importVuefro vue 引入 vueimportApp App 引入 App v

    2026年3月18日
    2
  • 图片链接如何在excel里转成图片_mdf文件怎么转成Excel

    图片链接如何在excel里转成图片_mdf文件怎么转成Excel前阵子从数据库中导出数据给业务,但是图片是个URL,业务需要在Excel中直接显示图片,因此在网上爬了很多VB脚本尝试修改,最终将Excel中的图片URL转换成了图片。VB脚本LoadImage.bas:’charsetGB2312.Excel中的图片链接转为图片文件AttributeVB_Name=”LoadImage加载图片”SubLoadImage()

    2026年2月16日
    4
  • 【Python】Jupyter在PyCharm中的使用

    【Python】Jupyter在PyCharm中的使用最近在学CS231n的课程,打算把作业做一下。由于官方给的例程是用的IPython,后缀名为ipynb,和之前接触的Python写法不一样,来记录一下自己今天踩到的一个坑。其实有一个很简单的解决方法就是安装Anaconda,我也不知道自己为什么要在PyCharm上死磕。步骤0安装Jupyterpipinstalljupyter1新建一个IPython文件这里

    2025年8月4日
    6
  • python编程是啥-Python编程「建议收藏」

    python编程是啥-Python编程「建议收藏」随着人工智能时代的来临,编程语言的热度居高不下,随着智能机器人的出现,在2020年更是迎来一波新的高峰。在这样的大环境下,关于谁是人工智能最流行编程语言的讨论也十分热烈,C、C++、Java、Python等编程语言不断被拿出来做比较。那么接下来,风变编程来解析一波当下编程语言的新趋势。Python受欢迎度有望超越Java?近日,TIOBE编程语言社区公布了2020年10月编程语言排行榜。榜单数据显…

    2022年5月17日
    37
  • 搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应

    搞不定Serverless?让你秒懂掌握Profiling让一份程序优雅自适应学委好久没有更新 NodeJS 专栏 还以为 NodeJS 冷门 没想到最近看到几个读者留言问怎么优雅的管理多环境的配置 太忙了 写篇短文简单展示一下原理 正好基于前篇 NodeJS 后端开发 07MySQL 数据库连接池开发生产应用 简单尝试了 mysql 库来连接数据库 本篇尝试一个更加优雅的方式 通过环境变量来控制程序动态加载不同的配置 这个搞 Java 的同学最清楚 比如我们开发 springboot 应用的时候会放置多个 application yml 然后部署的时候通过环境变量来选择配置 这个用 Node

    2025年8月21日
    4
  • Apache服务器的配置[通俗易懂]

    Apache服务器的配置[通俗易懂]Apache服务器的配置

    2022年4月23日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号