5.8 习题
1.编写函数,重复打印给定字符n次。例如,在主函数中调用该函数后,给出打印字符和次数,该函数将在屏幕上输出指定字符。
【解答】该习题主要考查字符串参数在函数调用过程中的传递。根据前面章节的学习,读者知道字符的输出可以通过输出流cout来实现,但更好的办法是通过putchar函数来实现。指定输出字符的次数后,通过一个循环语句实现即可。同时,在主函数中要指定需打印的字符,也可以用函数getchar来实现接收。其简要实现代码如下所示。
2.下列程序的输出结果是多少?
【解答】该习题主要考查函数的调用。上述程序中的函数fun包含两个参数,在调用时将实参传递给形参。读者需要注意的是实参分别为k++和++k,进行参数传递后,k的值都将加1。因此,传递到函数fun后,x和y都变为6,运行函数后,得到函数返回值36。因此,该程序的输出为36。
3.已知三角形的三边,求三角形面积,将其编写成一个函数,在main函数中调用该函数。例如,运行该程序段后输入三角形的三边分别为3、4、5,输出三角形面积如图5-19所示。
图5-19 求三角形的面积
【解答】该习题主要考查函数的声明、定义和调用。在使用函数前需要先对其进行声明,声明后的函数定义可写在调用后。该函数求三角形面积,因此函数的参数为三边,根据三角形面积的计算公式:面积=三边之和除2再乘以其与三边之差的平方根。需要读者注意的是,此处的函数返回值应为浮点型,因为三角形面积有可能为浮点数。
4.输入的整数按字符串形式逆序输出,要求分别用递归算法和非递归算法实现。如输入12345,输出:5 4 3 2 1。
【解答】该程序段首先需声明两个函数,其分别对应非递归输出分解的结果和递归输出,在主函数main()中调用这两个函数。其中,非递归的函数实现中可使用while循环,其循环变量a以a/10为依次一次循环。其简要实现代码如下所示。
5.下面的程序段的运行结果是多少?
【解答】该习题主要考查递归函数及其返回值。递归函数是在定义中调用自身的函数,在上述程序中定义时调用了其自身。要计算递归函数的返回值,需要将实参传递到函数中后,先进行递推,再进行回归来实现。在上述程序中实参为9,那么第一次递推后p的值为(9-func(7)),第二次递推后p的值为(7-func(5)),一直到x的值为0或为1后再回归,得出最终p的值为7,如图5-20所示,因此该程序的返回值为7。
图5-20 递推与回归