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,一经查实,立即删除!

相关文章

当代国人绝难做到的10件平常事

1、在饭厅中保持低声。无论是在家中&#xff0c;还是在大饭店吃饭&#xff0c;中国人总爱高声喧哗&#xff0c;如果是饮酒&#xff0c;还会扯酒皮&#xff0c;猜拳行令&#xff0c;完全不把旁人放在眼中。因而&#xff0c;在中国&#xff0c;也没有人觉得饭厅噪音得治一治。事实…

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

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

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

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

DNN SEO专题 (收集)

SEO, 是Search Engine Optimization的缩写, 翻译过来是“搜索引擎优化", 直白说就是“针对搜索引擎所做的优化处理工作”。 是一种利用搜索引擎的搜索规则来提高目的网站在有关搜索引擎( Google, Baidu, Live Search 等) 内提名的方式。它可以给你的网站带来更多的客户访问…

发送请求_发送soap请求调用WSDL

");soap.Append("");soap.Append("");soap.Append("XX系统");soap.Append("");soap.Append(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));soap.Append("");soap.Append("{"LoginName":&qu…

递归函数python有什么特点_Python中的递归

在前面的讲解中&#xff0c;函数的调用通常发生在彼此不同的函数之间。其实&#xff0c;函数还有一种特殊的调用方式&#xff0c;那就是自己调用自己&#xff0c;这种方式称为函数递归调用。 递归&#xff0c;在程序设计中也是一个常用的技巧&#xff0c;甚至是一种思维方式&am…

XML基本知识(三)

XML语法(3)--属性、声明符号、字符数据、注释 属性&#xff1a;提供元素的附加信息。 属性是元素开始标签的一部分。eg: <para keywords"Napoleon,France,history">...</para>注意: 属性由“名”和“值”组成&#xff0c;中间有“”分隔。值由引号包括…

apache实验报告 linux_Linux实验报告

Linux实验报告-源代码编译安装Apache(Tarball文件安装)实验背景&#xff1a;通常GNU组织提供的程序包都是源代码格式&#xff0c;即将软件的所有源码文件先以tar打包&#xff0c;然后再使用gizp或是bzip2压缩&#xff0c;生成一个.tar.gz或是.tar.bz2结尾的软件包&#xff0c;也…

python合并两个文本文件内容_用Python 将两个文件的内容合并成一个新的文件.

一个文件的内容是: Introduction to Programming, Networking Fundamentals, Internetworking Technologies, Platform Technologies, Information Technology for Users, Computer Forensics, Enterprise Networks, Database Technologies 还有一个是: BN108, MN401, MN503, B…

设备场景函数——72个

说明&#xff1a;本类 API 函数&#xff0c;内容均摘自网络&#xff0c;版权归实际作者所有。 CombineRgn 将两个区域组合为一个新区域 CombineTransform 驱动世界转换。它相当于依顺序进行两次转换 CreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 CreateDC,Cre…

安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!

原标题&#xff1a;你的安卓手机越来越卡&#xff1f;教你4招轻松解决问题&#xff01;现在我们对于手机的使用时间不会特别的长&#xff0c;所以这个更换的速度就比较快。其实是很多的用户换手机是因为比较喜欢用新的手机体验新的科技&#xff0c;不过也还是有很多的用户不是因…

python 导入自己写的类_python中自己的类不能被导入

我自己编写了一个类 class Settings(): def __init__(self): self.screen_width1200 self.screen_height800 self.bg_color(230,230,230) 然后我想在引用 import sys import pygame from settings import Settings def run_game(): pygame.init() ai_settingsSettings() screen…

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

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

python调用父类构造函数需要放在第一句吗_Python继承和调用父类构造函数

这是我正在Python中做的&#xff1a;class BaseClass:def __init__(self):print The base class constructor ran!self.__test 42class ChildClass(BaseClass):def __init__(self):print The child class constructor ran!BaseClass.__init__(self)def doSomething(self):prin…

python千位分隔符_python – 为pandas数据帧中的整数设置千位分隔符

我正在尝试使用{&#xff1a;,}’.格式(数字),如下例所示,格式化pandas数据帧中的数字&#xff1a; # This works for floats and integers print {:,}.format(20000) # 20,000 print {:,}.format(20000.0) # 20,000.0 问题是,对于具有整数的数据帧不起作用,并且在具有float的数…

[导入]【翻译】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…

DOM解析原理

DOM解析原理 关键字: xml w3c dom属性和方法用于处理XML文档的DOM元素属性 属性名 描述 childNodes 返回当前元素所有子元素的数组 firstChild 返回当前元素的第一个下级子元素 lastChild 返回当前元素的最后一个子元素 nextSibling 返回紧跟在当前元素后面的元素 no…

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…