C语言中几种嵌套结构的教学分析

2018-09-17 06:24邓波夏太武
考试周刊 2018年82期
关键词:循环嵌套函数

邓波 夏太武

摘要:C语言中程序常见有三种嵌套结构,即选择结构嵌套、循环结构嵌套、函数调用嵌套,笔者通过对以上结构教学分析,告知读者在使用的过程中三者的需要注意之处,对提高C语言学习效率很有好处。

关键词:嵌套;循环;函数;递归

一、 引言

接触过C语言的人都知道C语言是一种功能强大的计算机编程语言,学好C语言得花很多的功夫才能学好,它功能强大也表现在自由度大、语句灵活、学习过程中容易出错,像嵌套结构就是其中容易出错的部分。比如在学习选择结构嵌套时,学生们最容易出现else与if的配对问题;在循环结构嵌套时,一些初值的设置问题;在函数嵌套调用时,特别是递归调用,正推与反推过程的理解问题无不困扰着初学者。对此,笔者将这三种情况集中进行了教学分析,很大程度避免易混淆、难理解问题。

二、 选择结构嵌套问题

C语言中的选择结构语句包含单分支结构、双分支结构以及多分支结构,其中单分支结构采用if语句完成,双分支结构采用if-else语句完成,而多分支结构可采用if语句的嵌套,也可以采用else-if的嵌套,对于整型或字符型数据还可以switch语句以及switch的嵌套结构来完成,由此可以看到选择结构嵌套形式是多样的,下面对分段函数用if的两种嵌套为例来介绍循环结构的嵌套问题,函数如下:

注意两个程序代码中的嵌套部分的区别,可以看出如果采用if语句的嵌套,它是将复杂的部分放置在前,简单的部分放置在后,即在前面嵌套,程序中往往会连续出现多个if或else的情形,这个时候要注意else与if的配对问题,象程序①中的第一个if是跟第二个else进行配对,而第二个if是跟第一个else进行配对,这是初学者一定要注意的地方,而采用else-if语句嵌套,它是将复杂的部分放置在后面,简单的部分放置在前面,即在后面嵌套,if跟else往往会交替出现,这个时候二者的配对就难以混淆起来,程序②中第一个if是跟第一个else进行配对,而第二个if是跟第一个else进行配对。在if语句嵌套程序中,要改变if跟else的配对问题,也就是说if的嵌套部分就是一个单分支if语句,只有通过对嵌套部分添加{}来完成。

三、 循环结构的嵌套问题

循环结构嵌套对于初学者来说是一个麻烦问题,大家知道循环完成的是对有规律的操作进行重复,找规律对初学者特别是文科类学生是头痛的,理工科学生几分钟能够考虑好的算法,文科生要十几分钟甚至更长时间才能想清楚,简单循环稍微好些,例如,设计程序求1+2+3+…+100的和,学生们上手都快,但是把程序改成1+1/2+2/3+3/4+…+99/100,就有相当一部分学生找不到规律,或者找到了规律也不知怎么用C语言表示,这是跟学生的素质有很大关系的,当然跟老师的讲授也有一定的关系。像1-(1+2)-(1+2+3)-…-(1+2+3+…+100)的求值问题,素质高的同学可采用单循环做,素质一般同学的可采用循环的嵌套来做,素质高的同学立马想到了除了第一个数为正以外,其他每一项都是负的,而且每一项都比前一项多一个数,这个数有规律,素质一般的同学想到的是要用循环的嵌套,外循环做减法,内循环做加法,每一趟加法都是没有任何联系的,在循环嵌套设置中,学生们感觉普遍为难的地方就是初值的设置问题,像这个问题,对于内循环的求和问题,表示和的变量应该是每一趟都是从0开始的,所以这个变量应在每一趟内循环开始都要置0,而不能只在程序的开始部分置0。

程序分析:设置变量s=1-(1+2)-(1+2+3)-…-(1+2+3+…+100),它的初值设为1,外循环用变量i来表示第i项,其初值设为2,表示从第二项开始,变量t用来表示每一项的和,用內循环来完成求t,代码如下:

同样是对变量赋初值,变量s,i,t,j对于赋初值都有自己的方式及位置,这也是学生们要通过大量的训练才能熟练的。

四、 函数嵌套调用问题

C语言中所有的函数都是级别相同的,在C语言中不允许函数嵌套定义,即在一个函数内部再定义其他函数,但允许嵌套调用,在函数嵌套调用中,比如主函数调用函数a,而函数a在执行过程中又调用函数b,函数b在执行过程中又调用函数c,这样函数c执行完后返回b,函数b执行完后返回a,函数a执行完后返回主函数,这样的函数嵌套调用需要注意的是函数的说明、定义通常要在该函数被调用之前进行,除非被调用的函数类型是整型,这种调用通常层次不会很多,只要在函数调用过程中不要出现死锁情况(即如函数a执行时调用函数b,而函数b在执行时又调用函数a,这样就会出现直接死锁,还有一种就是间接死锁,情况如函数a执行时调用函数b,而函数b在执行时又调用函数c,而函数c在执行时又调用函数a),在函数嵌套调用中,递归调用是最有代表性的嵌套调用,所谓递归就是函数在执行过程中,调用自己本身,这种调用不是简单调用自身,而是在调用时要使问题的规模逐渐缩小,最后达到解决问题的目的,也就是说,一定要有结束递归调用的情况出现。例如用递归调用编程求5!。

通过函数的嵌套调用,我们发现主函数变得简单了,程序的功能都交由被调用的函数来完成。对于递归调用,它的正推与反推是相对应的,一定要有一个结束正推的情况出现,否则就是一个有去无回的调用。

五、 总结

通过上述各种嵌套结构的分析,我们了解了选择结构嵌套、循环结构嵌套、函数嵌套调用等多种形式在使用过程中要注意的地方,这对于学好C语言这门课程是有所帮助的。

作者简介:

邓波,夏太武,湖南省邵阳市,邵阳学院信息工程学院。

猜你喜欢
循环嵌套函数
基于嵌套Logit模型的竞争性选址问题研究
二次函数
第3讲 “函数”复习精讲
二次函数
函数备考精讲
PDCA循环在持续改进领导教育质量中的应用
浅析英语词汇记忆策略
分层、过滤、循环教学法初探*
物质能量循环理论
一种基于区分服务的嵌套队列调度算法