递推就是一个不断由变量旧值按照一定的规律推出变量新值的过程,递推在程序设计中往往通过迭代方法实现。迭代过程在程序结构上使用循环结构进行处理。求出斐波那契数列的前n项。题目分析:设用f1、f2和f3表示相邻的3个裴波那契数据项,据题意有f1、f2的初始值为1,即迭代的初始条件为:f1=f2=1;迭代的公式为:f3=f1+f2。......
2023-11-20
在程序设计中,许多问题的解“隐藏”在多个可能之中。穷举就是对多种可能的情形一一测试,从众多的可能中找出符合条件的(一个或一组)解或者得出无解的结论。在一个集合内对集合中的每一个元素进行一一测试的方法称为穷举法。穷举本质上就是在某个特定范围中的查找,是一种典型的重复型算法,其重复操作(循环体)的核心是对问题的一种可能状态的测试。穷举方法的实现主要依赖于以下两个基本要点:
·搜寻可能值的范围如何确定。
·被搜寻可能值的判定方法。
对于“被搜寻值”的判定,一般都是问题中所要查找的对象或者要查找对象应该满足的条件,在问题中都会有清晰的描述。但对于搜寻范围,有些问题比较确定,而另外一些问题则不确定。程序设计中应据问题的描述具体分析,确定时应尽量缩小搜索范围,提高程序效率。
【例4.9】 编写程序找出所有的“水仙花数”。“水仙花数”是指一个3位数,其各位上数字的立方之和等于这个数本身。如153=13+53+33,所以153是“水仙花数”。
题目分析:这是一个典型的搜寻范围已定的穷举问题。依题意可以得出,搜寻可能值的范围为100~999;判定方法为各位上数字的立方之和等于被判定数。程序可以依次取出区间[100,999]之间的每一个数,然后将该数分解为3个数字,按照判定条件判定即可。
上面求取“水仙花数”的方法可以称为分离数据法,除此之外还可以使用组合数据的方法求取“水仙花数”。如果用a、b和c分别表示3位数的百位、十位和个位,则该3位数可以表示为:a*100+b*10+c,其中a的变化范围为[1,9],b和c的变化范围均为[0,9]。使用3重循环结构,每层循环分别控制a、b和c的变化,组合出所有的3位数参加判断即可。(www.chuimin.cn)
【例4.10】 搬砖问题:36块砖,36人搬,男人一次可搬4块砖,女人一次可搬3块砖,两个小孩一次可抬1块砖。要求将所有的砖一次搬完,问需要男人、女人、小孩各多少人?
题目分析:这是一个典型的搜寻范围需要分析确定的穷举问题。
设男人、女人、小孩的数量分别为man、woman、child,依题意可以得出被搜寻值的判定方法可以用下式表示:4*man+3*woman+0.5*child=36。
对于搜寻的范围,按照常识简单划分,men、women、child都应该为整数,而且男人的数量应该少于9人(36/4),女人的数量应该少于12人(36/3),当男人数量和女人数量一定的情况下小孩的数量可以用算式children=36-men-women&&child%2==0来确定。由此可以简单地确定搜寻范围表示如下:
程序中通过表达式(4*man+3*woman+child/2.0)==36保证小孩人数为偶数,该表达式左边4*man+3*woman+child/2.0是实数,比较运算时右边的36自动转换为实数(36.0)进行比较,如果相等关系成立则表示左边表达式值的小数部分也为0,从而保证了小孩数一定是偶数。程序执行的输出结果为:
man=3 woman=3 child=30
有关C语言程序设计基础(第3版)的文章
递推就是一个不断由变量旧值按照一定的规律推出变量新值的过程,递推在程序设计中往往通过迭代方法实现。迭代过程在程序结构上使用循环结构进行处理。求出斐波那契数列的前n项。题目分析:设用f1、f2和f3表示相邻的3个裴波那契数据项,据题意有f1、f2的初始值为1,即迭代的初始条件为:f1=f2=1;迭代的公式为:f3=f1+f2。......
2023-11-20
A.与参数x的类型相同B.无法确定C.void类型D.int类型3.为了避免嵌套的条件语句if-else的二义性,C语言规定()。A.else与缩排位置相同的if配对B.else与同一行上的if配对C.else与其之后最近的if配对D.else与其之前最近的尚未配对的if配对4.设x、y、z和k都是int型变量,则执行表达式:x=后,x的值为()。A.7 B.6 C.5 D.47.在C语言程序中,用关键字()定义无符号型变量。else语句实现两个分支。......
2023-09-19
若在表中找不到与给定条件相符合的数据,则称为不成功的查找,给出提示信息或空位置信息。本节介绍最常用的两种查找方法:顺序查找和折半查找。③基准位置数据值与查找的关键字值不相符时,在两个子集合中选取一个,重复执行①、②,直到被处理的查找集合中没有数据为止。图6.11是在一有序序列中实现对key=21进行折半查找的过程。......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
算法的描述方法主要有如下几种。例如,用传统流程图表示的顺序结构如图3.2所示,用NS图表示的顺序结构如图3.2所示,表示先执行A操作,再执行B操作,两者是顺序执行的关系。......
2023-11-20
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
图3.6程序的4分支结构示意图对于一般的多分支情况,程序设计语言中没有直接对应的控制语句,需要首先对其分解,然后用单分支或者双分支控制结构的嵌套进行处理。图3.7分支结构对称分解示意图图3.8分支结构不对称分解示意图1.使用if语句嵌套组成多分支结构程序如果if结构或者else结构的语句部分又是另外一个if结构,称为if语句的嵌套。......
2023-11-20
相关推荐