C++基础教程
——
作业及参考答案全部汇总文档
节3函数阶段作业

最新版本V2.0
王道C++团队
COPYRIGHT ⓒ 2021-2024. 王道版权所有

基础题篇

Gn!

下面都是一些基础的语法、概念编程练习题。

函数基础语法练习题

Gn!

编写函数实现以下功能:

  1. 键盘录入一个正整数,请判断它是否是一个素数,然后控制台输出对应的结果。要对键盘录入的数据做参数校验,素数是一个大于1的自然数,它仅能被1和自身整除。

  2. 键盘录入两个整数:底(base)和幂指数(exponent),计算base的exponent次幂,并打印输出对应的结果。(注意底和幂指数都可能是负数)

提示:求幂运算时,基础的思路就是先无脑把指数转换成正数,然后累乘,最后再根据指数是否是负数决定是否取倒数。

参考代码如下:

参考代码:

第一题,判断素数:

第二题参考代码:

以上。

函数基础语法练习题2

Gn!

键盘录入三个边长(带小数),然后用海伦公式计算三角形的面积(如果它确实是一个三角形的话)

海伦公式求三角形面积:

题目2-海伦公式

要求基于下列两个函数完成这个编程题:

注意:不要忘记使用sqrt函数要包含头文件<math.h>

参考代码如下:

参考代码:

以上。

交互式简易计算器-函数/全局变量

Gn!

实现一个终端交互式的简易计算器,交互的形式大体如下:

题目3-示意图

要求至少提供四种运算加减乘除,如下:

并且在结束进程时,打印总共执行操作的次数。(也就是这些函数调用的次数)

注意:除法的实现,要求判断除数不为0,并且在除数为0时使用exit表示异常退出进程。

参考代码如下:

参考代码:

以上。

递归练习题

Gn!

(1) 汉诺塔

有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:

  1. 每次只能移动一个圆盘;

  2. 大盘不能叠在小盘上面。

利用递归的方式,打印出移动轨迹。运行结果如下图所示:

题目4-示意图

(2) 十进制转换成二进制

给定任意一个非负十进制整数,请利用递归的方式,求解它的二进制表示方式

基本的思路是:把该整数除以2得到余数,然后倒着输出余数。

思考一下:如何实现倒着打印余数呢?

参考代码如下:

参考代码如下:

第一题,求解汉诺塔移动轨迹,参考代码:

第二题,十进制转换成二进制参考代码:

以上。

扩展题篇

Gn!

以下题目都属于扩展题。

扩展:打印目标步骤汉诺塔移动轨迹

Gn!

汉诺塔移动轨迹的扩展题,感兴趣且学有余力可以研究一下,不做统一要求。

现在你已经知道如何打印n个盘子汉诺塔问题的移动轨迹了,那么在这个的基础上,我们进行以下扩展:

对于n个盘子的汉诺塔问题,给定一个整数m,要求在控制台打印出m + 1步的移动轨迹。

程序的运行图如下所示:

扩展题1-示意图

提示:

既然要打印m + 1步的移动轨迹,那么肯定需要计数器记录移动的步骤,需要用什么变量呢?

核心思路就还是move函数的递归,但要加上一个计数器,实际编码时注意边界值就可以了。

参考代码如下:

参考代码如下:

以上。

The End