练习与自测
(1)写一个能化简分数的函数,并测试。
(2)一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务。旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上面写的正整数m(<n)作为报数值。游戏进行时,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人被淘汰出列,然后从他顺时针方向上的下一个人开始重新报数,如此下去,直到圆圈中只剩下一个人,这个最后的幸存者就是游戏的胜利者,将得到免费旅行的奖励。
编程对某个给定的n=8与m=3,给出被淘汰出列的旅客编号,以及最终的幸存者。
(3)围绕着山顶有10个洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这10个洞中,你从10号洞出发,先到1号洞找,第二次隔1个洞找,第三次隔2个洞找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?
(4)某人将一缸鱼分五次出售,第一次卖出全部的一半加二分之一条,第二次卖出余下的三分之一加三分之一条,第三次卖出余下的四分之一加四分之一条,第四次卖出余下的五分之一加五分之一条,最后卖出余下的11条。问原来有多少鱼。
(5)如下图所示,分别找出和为最大及和为最小的4个相邻的数。
(6)编写函数将一个一维数组中的元素颠倒顺序。
(7)编写函数求一个二维矩阵的鞍点(在行上最大、在列上最小)。
(8)编写函数将数组中下标为偶数的元素与各自下一个元素对调位置,如果数组元素个数为奇数,则最后一个元素不动。
(9)写一个函数实现将一个方阵的行列互换。
(10)按递增顺序依次列出所有分母小于等于40的最简单真分数。
————————————————————
(1) 除了位段。
(2) 对于有些应用领域,如嵌入式开发等,有时需要特别关心指针的值。但对于初学者来说,这个值基本没有关心的必要。
(3) 这种常量的含义是指不可能通过代码在程序中改变。
(4) 严格的说法是,只要这个表达式是左值表达式。
(5) 只有void *类型的指针不是指向一块内存。
(6) 注意,不同类型的指针(甚至不一定是数据指针)在某些条件下也可以做减法。这涉及一套复杂的类型兼容性规则。本书不打算钻牛角尖介绍这套复杂的兼容性规则。如果真的确认两个不同类型的指针的减法有意义,通过类型转换应该以绕过兼容性规则。
(7) 这里说的是应该,不是必须。但如果两个指针不是指向同一数组,得到的结果如果不是没有意义,至少也是依赖编译或依赖硬件环境,从而令人怀疑可移植性的。
(8) 郑重声明,在C语言中,函数本身不是变量,当然也不是数组。