C语言程序设计第五版谭浩强著 第七章答案
第七章 用函数实现模块化程序设计
1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输人。
题目解析:
- 该题直接使用“辗转相除法”来求解最大公约数和最小公倍数
- 最大公约数找出两数中的最小值,然后直接相模,当能够同时被两数整除时,则为最大公约数。
- 最小公倍数找出两数中的最大值,然后直接进入死循环,直到找到一个数能够同时被两数整除时,则为最小公倍数
【注】此题还有一些比较高级的解法,比如求最大公约数的相减法、欧几里德辗转相除法等,有兴趣的同学可以查询相关资料
代码示例:
运行结果:
2、求方程 的根,用3个函数分别求当: 大于0、等于0和小于0时的根并输出结果。从主函数输入a,b,c的值。
题目解析
- 根据disc =
代码示例
运行结果:
3、写一个判素数的函数,在主函数输人一个整数,输出是否为素数的信息。
题目解析:
- 素数是一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做素数
- 该题可以使用概念直接判断法求解,不过不需要判断所有的数据,只需要判断数据的一半即可,因为偶数不可能为素数(除了2),所以只需判断该数的一半即可的到答案
代码示例:
运行结果:
4、写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。
题目解析:
进行数组的行列互换,其关键在于数组互换的表达式 ar[i] [j] = ar[j] [i];其次在循环的时候,内层循环不能到达最大列,需要根据此时是第几行的交换来决定循环的次数,否则有可能数组行列交换之后最后又交换回原来的形状了。
代码示例
运行结果:
5、写一个函数,使输人的一个字符串按反序存放,在主函数中输入和输出字符串。
题目解析及答案:
- 要把一个字符串反序存放,其实就是对字符串做一个逆序操作,操作过程为收尾字符交换,直到把所有字符全部交换完毕。
示例代码
运行结果:
6、写一个函数,将两个字符串连接。
题目解析及答案:
- 利用一个临时数组,空间要保证能够容纳两个字符串,先把第一个字符串进行拷贝到临时数组,第二个字符串在临时数组的尾部接着链接,最后记得加上字符串的结束标记\0即可
代码示例:
运行结果:
7、写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出。
题目解析:
- 该题的重点在于元音字母的判断,通过或条件,凡是元音字母都进行拷贝
代码示例:
运行结果:
8、写一个函数,输人一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输人1990,应输出“1 9 9 0”。
题目解析:
对字符串进行遍历输出,没输出一个字符,后面就跟着输出一个空格,关键点在于如果输出的是最后一个字符,则不能在输出字符,所以要对是否是最后一个字符的输出进行判断。
代码示例:
运行结果:
9、编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输人字符串以及输出上述的结果。
题目解析:
- 该题的关键在于要能够写出各种字符统计的条件
代码示例:
运行结果:
10、写一个函数,输人一行字符,将此字符串中最长的单词输出。
题目解析及答案:
- 单词以空格进行分隔,因此寻找空格出现的位置即为关键,每次从单词的起始到空格出现的位置即为一个单词,此时计算单词的长度,如果比当前最大的还长,就进行跟新最长单词信息,当整个字符串遍历完成,word即保存最长字符串。
代码示例:
运行结果:
11、写一个函数,用“起泡法”对输人的10个字符按由小到大顺序排列。
题目解析及答案:
- 该题主要是对冒泡排序的理解,外层循环控制排序的趟数,内层循环主要是进行每一趟排序的比较,如果前面的字符大于后面的字符,就进行交换,每做一趟排序,就把一个最大字符排在最后,以及每做一趟排序就需要少比较一个字符。
代码示例:
运行结果:
12、用牛顿迭代法求根。方程为,系数a,b,c,d的值依次为1,2,3,4,由主函数输人。求x在1附近的一个实根。求出根后由主函数输出。
题目解析及答案:
- 此题的难点并不是编程,主要是要理解数学公式的求解方法,理解之后代码的实现并不困难。
代码示例:
运行结果:
13.用递归方法求n阶勒让德多项式的值,递归公式为
题目解析及答案:
- 递归函数的设计,有一个点非常重要,那就是必须要有返回条件,,此题中的返回条件即为n0和n1时,因为当n为这两值时,程序直接返回相应的值,只有n>=1时,才进行递归运算。
代码示例:
运行结果:
14、输人10个学生5门课的成绩,分别用函数实现下列功能:
①计算每个学生的平均分;
②计算每门课的平均分;
③找出所有50个分数中最高的分数所对应的学生和课程;
④计算平均分方差:
其中,x;为某一学生的平均分。
题目解析及答案:
- 此题的关键是如何存储某个学生对应某门课程的分数,这里利用了一个二维数组score,其中score[i] [j]就代表了第i个学生的第j门课程的分数,只要能够理解这个存储方式,其余的计算就是比较容易理解和实现的。
代码示例:
运行结果:
15、写几个函数:
- ①输人10个职工的姓名和职工号;
②按职工号由小到大顺序排序,姓名顺序也随之调整;
③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。
题目解析及答案:
利用二分查找的关键在于数据一定要先有序,所以在查找前我们需要对数据进行排序。
代码示例:
运行结果:
16、写一个函数,输人一个十六进制数,输出相应的十进制数。
题目解析及答案:
- 转换的过程需要乘的基数为16,其次注意十六进制中的a~f的字母转换,并且无论大小写都要能够转换。
代码示例:
运行结果:
17、用递归法将一个整数n转换成字符串。例如,输人483,应输出字符串”483”。n的位数不确定,可以是任意位数的整数。
题目解析及答案:
- 递归法求解主要要有结束条件,此题为n/10 == 0时就直接输出,其次本题还要考虑如果整数位负数的情形,此时需要输出一个字符串的负号。
运行结果:
18、给出年、月、日,计算该日是该年的第几天。
题目解析:
- 此题采用枚举法进行每月天数的累加,其中关键点注意需要判断年份是否为闰年,如果是还需要多累加1天。
代码示例:
运行结果:
C语言程序设计第五版谭浩强 第七章答案
更多C语言程序设计谭浩强第五版课后答案