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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 虚函数 inline函数

    虚函数 inline函数一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1.定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式:  virtual函数返回值类型虚函数名(形参表)  {函数体}2.作用:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合

    2022年7月16日
    9
  • 免费国内php空间_全球vps交流网站超级vps管理器

    免费国内php空间_全球vps交流网站超级vps管理器网站名称:000webhost.com250MB硬盘空间,100GB数据流量有足够的空间存放你的网站,emails 和数据库. 服务器为百兆独享接入Internet, 所以可以提供100G的数据流量.PHP 和MySQL 数据库支持不想其他免费空间,对php和mysql的功能进行限制.在这里你可以使用最新版本的php和mysql. 所有以下php特性都支持:

    2022年9月21日
    0
  • python动图爱心表白_用python画动态图

    python动图爱心表白_用python画动态图初级画心学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆:于是这就很简单了,十行代码解决:importturtleastt.pensi…

    2022年10月7日
    0
  • QCustomPlot鼠标跟随显示坐标值

    QCustomPlot鼠标跟随显示坐标值tags:QCustomPlothover背景Qt最大的优势就是各种库非常全,尤其在图表方面,在5.7版本之后虽然引入了原本企业版才有的QCharts,但相对于只有2个文件就可以引入库的QCustomPlot来说还是太臃肿了。这里解决一个使用图表的都会碰到的问题–跟随鼠标显示值,在QCustomPlot里非常简单,它早就给出了解决方案-QCPItemTracer.可以直接看下面…

    2022年10月16日
    0
  • pycharm基本操作_pycharm用法

    pycharm基本操作_pycharm用法0前言1官方快捷键2自定义快捷键0前言1官方快捷键Ctrl+快捷键说明Ctrl+鼠标左键/B点击变量应用处,到达变量定义处点击变量定义处,显示变量应用列表Ctrl+C/X/V复制/剪切/粘贴Ctrl+D现场复制粘贴选中的区域或当前行Ctrl+F/R开启查找/替换功能,开启时自动填写选中的字符Ctrl+H显示当前class的层次结构Ctrl+S全部保存Ctrl+W扩大光标选中范围Ctrl.

    2022年8月28日
    0
  • linux开机启动步骤

    linux开机启动步骤

    2021年9月8日
    58

发表回复

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

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