谭浩强C语言程序设计第二章题解-笔记

news/2024/7/6 16:49:38

题目 1:什么是算法?试从日常生活中找 3 个例子,描述它们的算法。

算法是求解问题的步骤,是对特定问题求解步骤的一种描述。

例如:

1. 自驾去新疆旅游:准备好车,规划旅游路线,开车出发,一路游山玩水。

2. 网上买一部手机:选择网购平台,挑选想要的品牌和型号,下单,等待到货。

3. 做西红柿炒蛋:准备食材(西红柿、鸡蛋、葱等),将鸡蛋打散,西红柿切块,葱切末;锅中倒油,炒熟鸡蛋盛出;再次倒油,放入葱末爆香,加入西红柿翻炒,再放入炒好的鸡蛋,加盐等调味料,翻炒均匀出锅。

题目 2:什么叫结构化的算法?为什么要提倡结构化的算法?

结构化算法是由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移只存在于一个基本的范围之内。

提倡结构化算法的原因是它便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量。

题目 3:试述 3 种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。

结构化程序设计的三种基本结构及特点如下:

1. 顺序结构:是一种线性、有序的结构,依次执行各语句模块。

2. 选择结构:根据条件成立与否选择程序执行的通路。

3. 循环结构:重复执行一个或几个模块,直到满足某一条件为止。

另外设计的两种基本结构(要符合只有一个入口、只有一个出口、结构内的每一部分都有机会执行到、结构内不存在死循环的特点):

1. while 型和 until 型循环复合结构。

2. 多分支选择结构。

题目 4(部分):用传统流程图表示求解以下问题的算法。

(1)有两个瓶子 A 和 B,分别盛放醋和酱油,要求将它们互换(即 A 瓶原来盛醋,现改盛酱油,B 瓶则相反)。

可以借助一个空瓶 C 作为过渡,其步骤为:先将 A 瓶中的醋倒入 C 瓶,再将 B 瓶中的酱油倒入 A 瓶,最后将 C 瓶中的醋倒入 B 瓶。

流程图如下:
开始→A 倒入 C→B 倒入 A→C 倒入 B→结束

(2)依次将 10 个数输入,要求输出其中最大的数。

先输入 10 个整数,将第一个整数赋值给变量 max,然后依次取剩余的整数与 max 进行比较,如果某个整数大于 max,则将该整数赋值给 max,直到所有剩余整数全部比较完,max 中保存的即为最大整数,最后将 max 值输出。

流程图如下:
开始→输入一个数给 max→循环(i=1 到 9)→输入一个数→如果该数大于 max,则 max 等于该数→循环结束→输出 max→结束

(3)有 3 个数 a、b、c,要求按大小顺序把它们输出。

先用 a 和 b 比较,如果 a 大于 b,将 a 与 b 内容交换(此时 a 是 a、b 较小者);再用 c 和 a 比较,如果 a 大于 c,将 a 和 c 交换(此时 a 是 a、c 中较小者,即 a、b、c 中最小);接着用 c 和 b 比较,如果 b 大于 c,将 c 和 b 交换(此时 b 是 b、c 中的小者,也是三者中次小者);最后输出 a、b、c。

流程图如下:
开始→输入 a、b、c→如果 a 大于 b,交换 a、b→如果 c 大于 a,交换 a、c→如果 b 大于 c,交换 b、c→输出 a、b、c→结束

(4)求 1+2+3+…+100。

设置变量 n 初始化为 1,变量 sum 初始化为 0,在 n 小于等于 100 时,执行 sum += n 的操作,然后 n 增加 1,直到 n 超过 100,循环操作完成后 sum 即为从 1 加到 100 的结果。

流程图如下:
开始→n=1,sum=0→如果 n 小于等于 100,执行 sum += n,n = n + 1→循环结束→输出 sum→结束

(5)判断一个数 n 能否同时被 3 和 5 整除。

输入数据 n,如果 n 能被 3 整除,再判断 n 是否能被 5 整除,如果能被 5 整除,则输出 n 能被 3 和 5 整除,否则 n 不能被 3 和 5 整除;如果 n 不能被 3 整除,则直接输出 n 不能被 3 和 5 整除。

流程图如下:
开始→输入 n→如果 n 能被 3 整除→如果 n 能被 5 整除,输出 n 能被 3 和 5 整除,否则输出 n 不能被 3 和 5 整除→否则,输出 n 不能被 3 和 5 整除→结束

(6)将 100~200 之间的素数输出。

素数是指除了 1 和它本身以外不再有其他因数的自然数。对 100 到 200 之间的每个数进行判断,判断该数能否被 2 到该数的平方根之间的所有数整除,如果不能被整除,则该数是素数并输出。

流程图如下:
开始→n = 100→循环(n 小于等于 200)→i = 2→循环(i 小于等于根号 n)→如果 n 能被 i 整除,结束本次循环→i = i + 1→循环结束→如果 i 大于根号 n,输出 n→n = n + 1→循环结束→结束

(7)求两个数 m 和 n 的最大公约数。

可以使用辗转相除法,即:如果 m 大于 n,交换 m 和 n;然后循环进行,用 m 除以 n 得到余数 r,将 n 的值赋给 m,将 r 的值赋给 n,直到 n 等于 0,此时 m 的值就是最大公约数。

流程图如下:
开始→输入 m、n→如果 m 大于 n,交换 m、n→循环(n 不等于 0)→r = m % n→m = n→n = r→循环结束→输出 m→结束

(8)求方程的根。分别考虑以下情况:
a. 有两个不相等的实根;
b. 有两个相等的实根。

首先计算判别式,如果,再判断:如果,则方程有一个实根;如果,则方程有两个实根,。

流程图如下:
开始→输入 a、b、c→计算 disc = b^2 - 4ac→如果 disc 小于 0,输出方程没有实根→结束;如果 disc 大于等于 0→如果 disc = 0,输出方程有一个实根 -b / (2a)→结束;否则,输出方程有两个实根 (-b + 根号 disc) / (2a) 和 (-b - 根号 disc) / (2a)→结束

题目 5:用 N-S 图表示第 4 题中各题的算法。

(1)有两个瓶子 A 和 B,分别盛放醋和酱油,要求将它们互换(即 A 瓶原来盛醋,现改盛酱油,B 瓶则相反)的 N-S 流程图如下:
|--开始--|
|     |--C = A--|
|     |--A = B--|
|     |--B = C--|
|--结束--|
(2)依次将 10 个数输入,要求输出其中最大的数的 N-S 流程图如下:
|--开始--|
|     |--n = 1--|
|     |--输入 max--|
|     |--while(n < 10)--|
|     |     |--输入 a--|
|     |     |--if(a > max) max = a--|
|     |     |--n = n + 1--|
|     |--end while--|
|     |--输出 max--|
|--结束--|

(3)有 3 个数 a、b、c,要求按大小顺序把它们输出的 N-S 流程图如下:
|--开始--|
|     |--输入 a、b、c--|
|     |--if(a > b) { temp = a; a = b; b = temp; }--|
|     |--if(a > c) { temp = a; a = c; c = temp; }--|
|     |--if(b > c) { temp = b; b = c; c = temp; }--|
|     |--输出 a、b、c--|
|--结束--|
(4)求 1+2+3+…+100 的 N-S 流程图如下:
|--开始--|
|     |--n = 1--|
|     |--sum = 0--|
|     |--while(n <= 100)--|
|     |     |--sum = sum + n--|
|     |     |--n = n + 1--|
|     |--end while--|
|     |--输出 sum--|
|--结束--|
(5)判断一个数 n 能否同时被 3 和 5 整除的 N-S 流程图如下:
|--开始--|
|     |--输入 n--|
|     |--if(n % 3 == 0)--|
|     |     |--if(n % 5 == 0)--|
|     |     |     |--输出“能同时被 3 和 5 整除”--|
|     |     |     |--end if--|
|     |     |--else--|
|     |     |     |--输出“不能同时被 3 和 5 整除”--|
|     |     |     |--end else--|
|     |--else--|
|     |     |--输出“不能同时被 3 和 5 整除”--|
|     |     |--end else--|
|--结束--|
(6)将 100~200 之间的素数输出的 N-S 流程图如下:
|--开始--|
|     |--n = 100--|
|     |--while(n <= 200)--|
|     |     |--i = 2--|
|     |     |--while(i <= sqrt(n))--|
|     |     |     |--if(n % i == 0) break--|
|     |     |     |--i = i + 1--|
|     |     |--end while--|
|     |     |--if(i > sqrt(n)) 输出 n--|
|     |     |--n = n + 1--|
|     |--end while--|
|--结束--|
(7)求两个数 m 和 n 的最大公约数的 N-S 流程图如下:
|--开始--|
|     |--输入 m、n--|
|     |--if(m < n) { temp = m; m = n; n = temp; }--|
|     |--while(n!= 0)--|
|     |     |--r = m % n--|
|     |     |--m = n--|
|     |     |--n = r--|
|     |--end while--|
|     |--输出 m--|
|--结束--|
(8)求方程的根。分别考虑以下情况:
a. 有两个不相等的实根;
b. 有两个相等的实根。

N-S 流程图如下:
|--开始--|
|     |--输入 a、b、c--|
|     |--disc = b^2 - 4ac--|
|     |--if(disc < 0)--|
|     |     |--输出“方程没有实根”--|
|     |     |--end if--|
|     |--if(disc >= 0)--|
|     |     |--if(disc == 0)--|
|     |     |     |--输出“方程有一个实根 -b / (2a)”--|
|     |     |     |--end if--|
|     |     |--if(disc > 0)--|
|     |     |     |--输出“方程有两个实根 (-b + 根号 disc) / (2a) 和 (-b - 根号 disc) / (2a)”--|
|     |     |     |--end if--|
|     |     |--end if--|
|--结束--|

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C# Winform项目中简单使用Sqlite并在DataGridview中显示

1. SQLite概述 1.1 什么是 SQLite&#xff1f; SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;您不需要在系统中配置。 1.2 为什么要用 …

不是大厂云用不起,而是五洛云更有性价比

明月代维的一个客户的大厂云境外云服务器再有几天就到期了&#xff0c;续费提醒那是提前一周准时到来&#xff0c;但是看到客户发来的续费价格截图&#xff0c;我是真的没忍住。这不就是在杀熟吗&#xff1f;就这配置续费竟然如此昂贵&#xff1f;说实话这个客户的服务器代维是…

七大排序算法的深入浅出(java篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ 等等 &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支…

二叉树的前中后序遍历(递归法、迭代法)leetcode144、94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输…

乘用车副水箱浮球式液位计传感器

浮球式液位计概述 浮球式液位计是一种利用浮球在液体中浮动的原理来测量液位的设备&#xff0c;广泛应用于各种工业自动化控制系统中&#xff0c;如石油化工、水处理、食品饮料等行业。它通过浮球的上下运动来测量液位的高低&#xff0c;具有结构简单、安装方便、测量范围广、…

线程池666666

1. 作用 线程池内部维护了多个工作线程&#xff0c;每个工作线程都会去任务队列中拿取任务并执行&#xff0c;当执行完一个任务后不是马上销毁&#xff0c;而是继续保留执行其它任务。显然&#xff0c;线程池提高了多线程的复用率&#xff0c;减少了创建和销毁线程的时间。 2…