【不就是C程序设计习题嘛】— 第二章:算法----程序的灵魂(1)

简介: 【不就是C程序设计习题嘛】— 第二章:算法----程序的灵魂(1)

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

算法:简而言之就是求解问题的步骤,对特定问题求解步骤的一种描述。


比如生活中的例子:


1. 考大学


首先填报志愿表、交报名费、拿到准考证、按时参加考试、收到录取通知书、按照日期到指


定学校 报到。


2. 去北京听演唱会


       首先在网上购票、然后按时坐车到北京,坐车到演唱会会场。


3. 把大象放进冰箱


       先打开冰箱门,然后将大象放进冰箱,关冰箱。


4.煮饭


先抓米,再加水,淘一淘,加水,盖上锅盖,插上电

2. 什么叫结构化的算法?为什么要提倡结构化的算法?

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


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

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

结构化程序设计方法主要由以下三种基本结构组成:


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


(比如你只有拿到了录取通知书才能去学校报到)


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


(讲人话就是,当条件成立时做……,当条件不成立时,做……)


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


(这里就要注意死循环问题)


重新设计基本结构要满足以下几点:

1. 只有一个入口

2. 只有一个出口

3. 结构内的每一部分都有机会执行到

4. 结构内不存在死循环

因此给出以下复习结构:while型和until型循环复合以及多选择结构

4. 用传统流程图表示求解以下问题的算法。

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


解析: 用两个瓶子显然很难实现,可以借助一个空瓶子C作为中转,先将A中醋导入C中,然后将B中的酱油导入A中,最后将C中的醋导入B中即可实现交换。

图片来自比特

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

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

3. 有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,结束


图片来自比特

4. 求1 + 2 + 3 + ... + 100。

解析:给定N为1,sum为0,如果N小于等于100时,进行sum += N,直到N超过100,循环操作完成后,sum即为从1加到100的结果。

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

解析:


i:输入数据n

ii:如果n能被3整数,进行iii,否则输出n不能被3和5整数

iii:如果n能被5整数,输出n能被3和5整数,否则n不能被3和5整数

6. 将100~200之间的素数输出

素数:即数学中的质数,因子只有1和其本身的数字称为质数。

对100和200之间的每个数进行一下操作:该数能否被2~该数之间的所有数整除,是则是素数,输出,否则取下一个数字。

7. 求两个数m和n的最大公约数

解析:辗转相除法

a. 如果m大于n,交换m和n,m中存储大数,n中存储小数

b.如果b不等于0,循环进行一下操作:

用m%n结果给r,将n的值给m,将r的值给n

c.n等于0时,m即为最大公约数

8. 求方程ax^2 + bx + c = 0的根。

分别考虑:

  • 有两个不相等的实根;
  • 有两个相等的实根;

解析:

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

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

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

图片来自比特科技

3. 有3个数a,b,c, 要求按大小顺序把他们输出。

4. 求1 + 2 + 3 + ... + 100。

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

6.求100到200之间的素数

7. 求两个数m和n的最大公约数

8. 求方程ax^2 + bx + c = 0的根。

分别考虑:

  • 有两个不相等的实根;
  • 有两个相等的实根;

相关文章
|
7月前
|
算法 测试技术 C++
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
C++二分算法习题:判断是否是完全平方数[容易]和排列箱子[容易]
|
7月前
|
存储 算法 搜索推荐
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(下)
40 0
|
7月前
|
存储 算法 C++
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
标准模版库 知识点总结 C++程序设计与算法笔记总结(八) 北京大学 郭炜(上)
33 0
|
7月前
|
算法 C++ 索引
函数模板和类模板 知识点总结 C++程序设计与算法笔记总结(七) 北京大学 郭炜(下)
函数模板和类模板 知识点总结 C++程序设计与算法笔记总结(七) 北京大学 郭炜(下)
27 0
|
6天前
|
算法 SoC
基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)
基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)
|
6天前
|
存储 算法 算法框架/工具
基于HSV色度空间的图像深度信息提取算法FPGA实现,包含testbench和MATLAB辅助验证程序
该文档介绍了在一个FPGA项目中使用HSV色彩模型提取图像深度信息的过程。通过将RGB图像转换为HSV,然后利用明度与深度的非线性映射估计深度。软件版本为Vivado 2019.2和MATLAB 2022a。算法在MATLAB中进行了对比测试,并在FPGA上实现了优化,包括流水线并行处理和查找表技术。提供的Verilog代码段展示了RGB到灰度的转换。实验结果和核心程序的图片未显示。
|
6天前
|
存储 算法
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础
39 0
|
6天前
|
算法
写一段圆弧插补算法程序
写一段圆弧插补算法程序
47 0
|
6天前
|
存储 算法 搜索推荐
Java常见算法-算法与程序、公式、数据结构的区别
算法、程序、公式和数据结构是计算机科学中的基本概念,它们之间有着密切的联系,但各自有着独特的含义和作用。
|
6天前
|
缓存 算法 JavaScript
提高Java程序性能!了解可达性分析算法、强软弱虚引用和三色标记GC的过程,避免不可达对象阻碍程序性能!
提高Java程序性能!了解可达性分析算法、强软弱虚引用和三色标记GC的过程,避免不可达对象阻碍程序性能!