《从问题到程序》第3章习题的讨论

(《从问题到程序》,裘宗燕著,机械工业出版社,2005年9月)


如果题目要求定义函数,写出函数定义后还需要定义一个主函数,其中调用自己定义的函数,为它提供适当的数据,试验所定义的函数。如果定义的函数有返回值,可以用变量保存其返回值,而后打印出来检查;或者直接把函数调用写在 printf 调用里(注意正确写出转换描述)。没有返回值函数就直接调用。

为确认一个函数能正确工作,需要在主函数里写多个函数调用,用不同的数据执行它,看它是不是都能正确处理(第4章最后一节有这方面的讨论)。

习题 题目和讨论
6 定义求圆球的体积、求圆球的表面积、求圆柱体的体积、求圆柱体的表面积的函数。

提示和讨论:

这几个函数都非常简单,函数体里只需要一个 return 语句。需要确定:

  • 函数的参数是什么类型,返回什么类型的值?
  • 为函数取合适的名字,写出函数的类型特征。而后定义函数体。
写一个主函数 main,其中调用你定义的函数,输出函数计算的结果。 根据得到的结果判断函数能否正确完成所希望的计算工作。
8定义函数:double tmax(double, double, double), 它返回三个参数中最大的一个。写一个主函数试验各种参数情况。

提示和讨论:

这里需要用嵌套的条件表达式,或者嵌套的 if 语句(条件语句)。请用两种方式写出程序,并比较它们,由此体会条件表达式和条件语句的区别。

151)写一个包含两个整型参数的简单函数,它输出从第一个整数到第二个整数为止的整数序列,而后用这个函数输出一些序列。2)写另一个取3个参数m、n、k的函数,它输出m、m+k、m+2k、…,直至这个序列里最后一个不大于n的整数。

提示和讨论:

这两个函数都是最普通的循环程序,问题就是如何正确写出循环:

  • 用 for 循环还是 while 循环?
  • 循环变量的取值问题:初值是什么,每次迭代最后如何更新?
  • 循环的结束条件是什么?
当然,还要确定函数的类型特征,确定循环结束后返回值是什么。
20请查出银行1年定期存款的利率和5年定期存款的利率。假定现在存入100元钱,存款到期后立即将利息与本金一起再存入。请写程序计算按每次存1年和按照每次存5年,共存50年后两种存款方式的得款总额。对两种情况每隔5年输出一次当时的总金额。

提示和讨论:

  • 首先需要到银行去弄清有关的利率,而后才能做这个题。
  • 这个题目适合用两个循环解决,用它们分别处理按1年期存款和按5年期存款的问题。
  • 解决问题的关键就是想清楚如何循环:如何开始和结束(结束条件),循环中需要维持哪些量。先写出循环的框架,而后填入细节。包括什么时候打印输出,循环结束后做什么。
23请写一个程序,它打印出1到100之间被6或者7整除的所有的数;修改这个程序,使它打印出1到100之间只被6或者7之一整除的数(不包括同时被两者整除的那些数)。

提示和讨论:

最简单的方法是从1到100循环工作,程序的基本框架很容易写出,问题是如何写出打印动作的条件。

另一种可能是考虑6和7的倍数序列,正确合并它们后输出。这种方式困难得多,但也不妨想想。

本页由裘宗燕建立和维护。 这里的材料可自由用于个人学习和教学活动。其他使用必须得到裘宗燕书面许可


EMAIL:qzy@math.pku.edu.cn
通讯地址:100871,北京大学数学学院信息科学系