c语言函数调用数组_第七讲:C语言基础之函数,第二节,实现汉诺塔

本文约2200字,主要讲了C语言基础之函数,递归,数组作为函数参数以及案例、练习题等。

带你进入C语言的世界,入门C语言,后边将持续更新。可以收藏学习。想了解C语言基础之函数,函数的基本概述,函数的调用关系,函数的一般形式,函数参数和函数的值以及例题等请点击该处跳转阅读。

本文全干货,新手必备,感谢你的阅读,祝你学有所成,生活愉快!


一、函数的嵌套调用

嵌套定义就是在定义一个函数时,其函数体内又包含另一个函数的完整定义。然而,C语言不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。

main(){

a();

}

a(){

b();

}

b(){

return;

}

f017d542eaaa2ac384d2cc4e9100c008.png

二、递归

在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。

例如:

int f(int x)

int y,z;

z=f(y);

return(2*z);

案例1:汉诺塔问题

2f969ddfcb8413b72801bdb21414c0a0.png

由上面的分析可知:将n个盘子从A座移到C座可以分解为以下3个步骤:

(1) 将A上n-1个盘借助C座先移到B座上。

(2) 把A座上剩下的一个盘移到C座上。

(3) 将n-1个盘从B座借助于A座移到C座上。

#include

main()

{

void hanoi(int n,char one,char two,char three); /* 对hanoi函数的声明 */

int m;

printf("input the number of diskes:");

scanf("%d", &m);

printf("The step to moveing %d diskes:", m);

hanoi(m, 'A', 'B', 'C');

}

void hanoi(int n, char one, char two, char three) /* 定义hanoi函数, 将n个盘从one座借助two座,移到three座 */

{

void move(char x, char y); /* 对move函数的声明 */

if( n==1 )

{

move(one, three);

}

else

{

hanoi(n-1, one, three, two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

void move(char x, char y) /* 定义move函数 */

{

printf("%c-->%c", x, y);

}

三、数组作为函数参数

数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式。

一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。

1.数组元素作函数实参

数组元素就是下标变量,它与普通变量并无区别。因此它作为函数实参使用与普通变量是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。

2.数组名作函数参数

用数组名作函数参数与用数组元素作实参有几点不同:

1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的。因此,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。

然而,用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明。当形参和实参二者不一致时,即会发生错误。

2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送是把实参变量的值赋予形参变量。

在用数组名作函数参数时,不是进行值的传送,即不是把实参数组的每一个元素的值都赋予形参数组的各个元素。

3.数据的传送实现

数组名就是数组的首地址。因此在数组名作函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。

形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。

例如:

void test(int b[10]);

void main()

{

int a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};

test(a);

putchar('');

}

void test(int b[10])

{

int i = 0;

for( ; i < 5; i++ )

{printf("%d ", b[i]);}}

4.内存数组的存储:

508c4e72f6373c93158827d3ecd4ccc3.png

例题2:有一个一维数组score,内放10个学生成绩,求平均成绩(写一个average函数求平均成绩)。

#include

double average(double array[10]); /* 函数声明 */

main()

{

double score[10] = {82, 100, 87.5, 89, 78, 85, 67.5, 92.5, 93, 94}, result;

result = average(score);

printf("average score is %5.2lf", result);

putchar('');

}

double average(double array[10])

{

double result = 0;

int i = 0;

for( i=0; i < 10; i++ )

{

result += array[i];

}

result /= 10;

return result;

}


感谢您的阅读,希望有所收获!会持续更新!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仍然报错_only_full_group_by配置,竟让所有应用报错?

推荐学习周一福利到&#xff01;献上“独家全新”MySQL进阶套餐&#xff0c;简直就是血赚 全网独家的“MySQL高级知识”集合&#xff0c;骨灰级收藏&#xff0c;手慢则无 1. 踩坑经历一个很平常的下午&#xff0c;大家都在埋头认真写bug呢&#xff0c;突然企业微信群里炸锅了&a…

根据录入的计算公式计算_污水处理工程设计入门(10)—堰口计算

呓语&#xff1a;虽然现在很多人会推送很多的快速计算表格&#xff0c;但是我并不想授人以鱼。我希望每一个想学习想入门做污水处理工程设计的人先看懂如何设计&#xff0c;再去想如何快速计算&#xff0c;再去想怎么改进。再者&#xff0c;想想有一天你当领导审图了&#xff0…

关于使用在webforms里使用routing遇到的问题

看了重典的两篇文章 System.Web.Routing入门及进阶 上篇 System.Web.Routing入门及进阶 下篇 仿照其中的进行了操作&#xff0c;发现怎么不都起作用&#xff0c;非常奇怪&#xff0c;搜了好多才找到了解决方案 是在MSDN上找到的&#xff0c;如下&#xff1a; To configure …

[导入]【翻译】WF从入门到精通(第十章):事件活动

摘要: 学习完本章&#xff0c;你将掌握&#xff1a;1.使用HandleExtenalEvent活动创建特定的事件处理程序2.在你的工作流中使用Delay活动3.在你的工作流中使用EventDriven活动4.在你的工作流中使用Listen活动5.理解EventHandlingScope活动在活动并发执行的情况下是怎样监听事件…

mysql查询返回xml格式_MySQL数据库查询操作XML的经验分享

mysql里面有内置的操作xml的函数。分别是ExtractValue()和UpdateXML()函数。语法&#xff1a;1EXTRACTVALUE (fiedname, XPathstring);第一个参数&#xff1a;fiedname是String格式&#xff0c;为表中的字段名第二个参数&#xff1a;XPathstring (Xpath格式的字符串) &#xff…

wordpress发布模块_如何用WordPress打造出一个类似知乎的问答站点

像打造一个像知乎这样的在线问答社区吗&#xff1f;问答网站非常有意思&#xff0c;而且用户活跃度也高&#xff0c;有很多非常有用的信息。在这篇文章中&#xff0c;我们将向你展示如何在没有任何编程经验的情况下利用WordPress快速打造一个问答类网站。你可以将整个网站做成问…

mysql 密码sha256_MySQL5.6启用sha256_password插件

一、背景&#xff1a;使用MySQL5.6过程中&#xff0c;发现默认的加密插件为mysql_native_password。而sha256_password的安全程度要比mysql_native_password高&#xff0c;尝试切换为sha256_password。二、配置过程&#xff1a;资料&#xff1a;1、从MySQL官网查询到服务器端sh…

ftp无法连接虚拟机_一步步编写操作系统4 安装x86虚拟机 bochs

本节内容摘自《操作系统真象还原》&#xff0c;请大家支持正版Bochs下载安装在完成了linux发行版的安装后&#xff0c;现在到了安装bochs的环节&#xff0c;这是我们的操作系统最终的宿主机。由于我的工作是运维&#xff0c;所以练就了任何软件包都要从源码安装的“陋习”&…

python语言用什么关键字来声明一个类_Python语言和标准库(第三章:类和对象)...

python如何将函数和数据整合在一起&#xff0c;并且通过一个对象的名称访问它们。 如何和为什么使用类与对象&#xff0c;以及他们如何使编程人员易于多种情形下编写和使用程序。 3.1考虑编程 现在要在python中创建一个对对象的描述&#xff0c;您已有足够的只是获得两个视图。…

mysql主从1594错误_3分钟解决MySQL主从1594错误

3分钟解决MySQL主从1594错误简介Part1:写在最前1594这个错误看起来挺严重的&#xff0c;会提示你binlog文件或者Relay log损坏了,例如binary log is corrupted、relay log is corrupted之类的看起来很吓人是吧&#xff0c;多数是由于掉电引发的&#xff0c;这也说明了机房配备U…

ci框架 mysql 超时时间_mysql 字符集和校验规则( CHARSET amp; COLLATE)

我们首先看下常见建表语句&#xff1a;mallAllGoodsCREATE TABLE qywl.mallAllGoods ( id varchar(64) NOT NULL COMMENT 主键id,userId varchar(64) NOT NULL DEFAULT COMMENT 发布人id,storeId varchar(64) NOT NULL DEFAULT COMMENT 发布商号id,data varchar(1000) NOT NU…

SQL 附加数据库时出现 无法打开物理文件错误

错误信息: 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo) ------------------------------ 无法打开物理文件 "D:\SqlDataBase\Test.mdf"。操作系统错误 5:"5(拒绝访问。)"。 (Microsoft SQL Server&#xff0c;错误…

Flash网页游戏辅助工具制作简析

《热血三国》好像是比较热&#xff0c;玩的人也挺多的&#xff0c;年前一个朋友希望能让我写一个这个游戏的外挂&#xff0c;也出于无聊&#xff0c;所以去玩了一下&#xff0c;谁知道一玩就有点喜欢这个游戏了&#xff0c;当然玩归玩&#xff0c;东西还是要做地&#xff0c;当…

sqlserver2008导出mysql_SQLserver 2008将数据导出到Sql脚本文件的方法

请看下面的操作图解。1.使用Sql Server Management Studio 2008 连接数据库。2.选中要导出数据的数据库节点&#xff0c;点鼠标右键&#xff0c;在菜单中选择“任务”->“生成脚本”&#xff0c;如图&#xff1a;3。在弹出的界面中&#xff0c;点2次“下一步”进入如图界面中…

opencv配置_Opencv在vs2012下的配置

别问我为什么记录这么老的版本&#xff0c;问就是因为老师推荐和因为怕自己再次把小米的搜索框给忘记了&#xff0c;又找个好几十分钟的【环境变量】。另外&#xff0c;要敲敲自己的脑袋&#xff0c;作为小米电脑的老用户怎么可以把搜索框给忘记了呢&#xff1f;第一步&#xf…

php7安装mysqli扩展_Ubuntu14版本下无法使用php7.2版本的bcmath扩展

在使用如下命令安装bcmath扩展的时候sudo apt-add-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get install php7.2-bcmath提示如下信息Reading package lists... DoneBuilding dependency tree Reading state information... DoneE: Unable to locate packag…

input 0.1无法相加_你真的知道0.1+0.2为何不等于0.3吗?

打开chrome控制台&#xff0c;给一个特别简单的输入如下&#xff1a;0.1 0.2 // 0.30000000000000004 复制代码不知道你有没有吃惊&#xff0c;这么简单的一个计算&#xff0c;无论在js中还是在python中&#xff0c;都不是准确的0.3&#xff0c;这是为什么呢&#xff1f;缘起要…

python图像增强_Python图像的增强处理操作示例【基于ImageEnhance类】

本文实例讲述了Python图像的增强处理操作。分享给大家供大家参考&#xff0c;具体如下&#xff1a; python中PIL模块中有一个叫做ImageEnhance的类&#xff0c;该类专门用于图像的增强处理&#xff0c;不仅可以增强&#xff08;或减弱&#xff09;图像的亮度、对比度、色度&…

python 二项分布_二项分布的理论基础、应用及Python实践

二项分布是概率统计中非常基础、非常实用的一种分布&#xff0c;可以说它在我们的生活中无所不在。它说明了这样一种现象&#xff1a;在给定的试验次数中&#xff0c;某一结果会发生多少次。比如&#xff1a;这个月有多少天会刮北风&#xff1f;今年有多少天会下雨&#xff1f;…

python网络爬虫_python小知识,基于Python 的网络爬虫技术分析

在现阶段大数据的时代中&#xff0c;想要实现对数据的获取和分析&#xff0c;要先具备足够的数据源&#xff0c;网络爬虫技术就为其数据获取提供了良好的条件&#xff0c;且还能够实现对数据源的目的性采集。在网络爬虫技术应用中&#xff0c;Python 脚本语言的使用十分广泛&am…