c语言程序设计第五版谭浩强课后答案
- 1. 什么是算法?试从日常生活中找3个例子,描述它们的算法
- 2. 什么叫结构化的算法?为什么要提倡结构化的算法?
- 3. 试述3种基本结构的特点,请另外设计两种基本结构(要符合基类结构的特点)。
- 4. 用传统流程图表示求解以下问题的算法。
- 5. 用N-S图表示第4题中各题的算法
- 6. 用伪代码表示第4题中各题的算法
- 7. 什么叫结构化程序设计?它的主要内容是什么?
- 8. 用自顶向下、逐步细化的方法进行以下算法的设计:
第二章:算法----程序的灵魂
1. 什么是算法?试从日常生活中找3个例子,描述它们的算法
算法:简而言之就是求解问题的步骤,对特定问题求解步骤的一种描述。
比如生活中的例子:
- 考大学
首先填报志愿表、交报名费、拿到准考证、按时参加考试、收到录取通知书、按照日期到指定学校报到。 - 去北京听演唱会
首先在网上购票、然后按时坐车到北京,坐车到演唱会会场。 - 把大象放进冰箱
先打开冰箱门,然后将大象放进冰箱,关冰箱。
2. 什么叫结构化的算法?为什么要提倡结构化的算法?
- 结构化算法:由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移只存在于一个基本的范围之内。
- 结构化算法便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。
3. 试述3种基本结构的特点,请另外设计两种基本结构(要符合基类结构的特点)。
结构化程序设计方法主要由以下三种基本结构组成:
- 顺序结构:顺序结构是一种线性、有序的结构,它依次执行各语句模块
- 选择结构:选择结构是根据条件成立与否选择程序执行的通路。
- 循环结构:循环结构是重复执行一个或几个模块,直到满足某一条件位置
重新设计基本结构要满足以下几点:
- 只有一个入口
- 只有一个出口
- 结构内的每一部分都有机会执行到
- 结构内不存在死循环
因此给出以下复习结构:while型和until型循环复合以及多选择结构
4. 用传统流程图表示求解以下问题的算法。
- 有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换(即A瓶原来盛醋,现在盛酱油,B瓶则相反)。
解析:
用两个瓶子显然很难实现,可以借助一个空瓶子C作为中转,先将A中醋导入C中,然后将B中的酱油导入A中,最后将C中的醋导入B中即可实现交换。 - 依次将10个数输入,要求输出其中最大的数。
解析:
先输入10个整数,将第一个整数给max,然后依次取剩余整数与max进行比较,如果某个整数大于max,将该整数交给max,直到所有剩余整数全部比较完,max中保存的即为最大整数,将max值输出。
- 有3个数a,b,c, 要求按大小顺序把他们输出。
解析:
i:先用a和b比较,如果a大于b,将a与b内容交换,否则进行ii
ii:用c和a比较,如果c大于a,将a和c交换,否则进行iv
iii:用c和b比较,如果c大于b,将c和b进行交换,否则进行iv
iv:输出a、b、c,结束
- 求1 + 2 + 3 + … + 100。
解析:
给定N为1,sum为0,如果N 小于等于100时,进行sum += N,直到N超过100,循环操作完成后sum即为从1加到100的结果。 - 判断一个数n能否同时被3和5整除。
解析:
i:输入数据n
ii:如果n能被3整数,进行iii,否则输出n不能被3和5整数
iii:如果n能被5整数,输出n能被3和5整数,否则n不能被3和5整数
- 将100~200之间的素数输出
素数:即数学中的质数,因子只有1和其本身的数字称为质数。
对100和200之间的每个数进行一下操作:
该数能否被2~该数之间的所有数整除,是则是素数输出,否则取下一个数字。
- 求两个数m和n的最大公约数
解析:辗转相除法
a. 如果m大于n,交换m和n
b. 循环进行一下操作:
n是否为0? 是则最大公约数为m,输出m结束。
否则:用m%n结果给r,将n的值给m,将r的值给n - 求方程的根。分别考虑:
- 有两个不相等的实根;
- 有两个相等的实根;
解析:
如果则方程有两个不相等的实根:
如果则方程有一个实根:
如果则方程没有实根。
5. 用N-S图表示第4题中各题的算法
- 有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换(即A瓶原来盛醋,现在盛酱油,B瓶则相反)。
- 依次将10个数输入,要求输出其中最大的数。
- 有3个数a,b,c, 要求按大小顺序把他们输出。
- 求1 + 2 + 3 + … + 100。
- 判断一个数n能否同时被3和5整除。
- 求两个数m和n的最大公约数
- 求方程的根。分别考虑:
- 有两个不相等的实根;
- 有两个相等的实根;
6. 用伪代码表示第4题中各题的算法
- 有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换(即A瓶原来盛醋,现在盛酱油,B瓶则相反)。
- 依次将10个数输入,要求输出其中最大的数。
- 有3个数a,b,c, 要求按大小顺序把他们输出。
- 求1 + 2 + 3 + … + 100。
- 判断一个数n能否同时被3和5整除。
- 求两个数m和n的最大公约数
- 求方程的根。分别考虑:
- 有两个不相等的实根;
- 有两个相等的实根;
7. 什么叫结构化程序设计?它的主要内容是什么?
结构化程序设计(structured programming,简称SP)是进行以模块功能和处理过程设计为主的详细设计的基本原则。其概念最早由E.W.Dijikstra在1965年提出的。结构化程序设计思想确实使程序执行效率提高 ,是软件发展的一个重要的里程碑,它的主要观点是采用自顶向下、逐步求精的程序设计方法;各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口 。
8. 用自顶向下、逐步细化的方法进行以下算法的设计:
- 输出1900—2000年中是软黏的年份,符合下面两个条件之一的年份是闰年:
- 能被4整除但不能被100整除
- 能被100整除且能被400整除。
- 求的根。分别考虑大于0、等于0和小于0这三种情况。
- 输入10个数,输出其中最大的一个数。