高级语言程序设计课程第五次个人作业
**高级语言程序设计课程第五次个人作业**
-
这个作业属于哪个课程:
https://edu.cnblogs.com/campus/fzu/2024C -
这个作业要求在哪里:
https://edu.cnblogs.com/campus/fzu/2024C/homework/13298 -
学号:102400108
-
姓名:王馨怡
作业内容: -
编写并运行书本第8章8.11编程练习题目中的第1~8题。
-
编写并运行书本第9章9.11编程练习题目中的第1~11题。
一、编写并运行书本第8章8.11编程练习题目中的第1~8题。
8.11.1
题目:设计一个程序,统计在读到文件结尾之前读取的字符数。
问题:无
解决:无
8.11.2
题目:编写一个程序,在遇到EOF 之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII 十进制值。注意,在ASCII 序列中,空格字符前面的字符都是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n 或\t 。否则,使用控制字符表示法。例如,ASCII 的1是Ctrl+A,可显示为^A 。注意,A 的ASCII值是Ctrl+A 的值加上64。其他非打印字符也有类似的关系。除每次遇到换行符打印新的一行之外,每行打印10对值。(注意:不同的操作系统其控制字符可能不同。)
问题:不知道控制字符表示法是什么东西,导致不会设计程序
解决:上网搜索,原来就是^+字母。问题解决
8.11.3
题目:编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字母的个数。假设大小写字母数值是连续的。或者使用 ctype.h 库中合适的分类函数更方便。
问题:无
解决:根据提示,确实使用<ctpye.h>库中的函数很方便。
8.11.4
题目:编写一个程序,在遇到 EOF 之前,把输入作为字符流读取。该程序要报告平均每个单词的字母数。不要把空白统计为单词的字母。实际上,标点符号也不应该统计,但是现在暂时不同考虑这么多(如果你比较在意这点,考虑使用ctype.h 系列中的ispunct() 函数)。
问题:会多记录一个单词数
解决:原来最后的回车也算上了,插入一句"cnt-1" 问题解决
8.11.5
题目:修改程序清单8.4的猜数字程序,使用更智能的猜测策略。例如,程序最初猜50,询问用户是猜大了、猜小了还是猜对了。如果猜小了,那么下一次猜测的值应是50 和100 中值,也就是75 。如果这次猜大了,那么下一次猜测的值应是50 和75的中值,等等。使用二分查找 (binary search )策略,如果用户没有欺骗程序,那么程序很快就会猜到正确的答案。
问题:对二分法这一方法,不会设计程序
解决:过了两天,理解了一下,二分法就是如果猜大了,就把max赋给他,猜小了,把min赋给他即可。
8.11.6
题目:修改程序清单8.8中的get_first() 函数,让该函数返回读取的第1个非空白字符,并在一个简单的程序中测试。
问题:无
解决:无
8.11.7
题目:修改第7章的编程练习8,用字符代替数字标记菜单的选项。用q 代替5作为结束输入的标记。
问题:会打印两次“请输入工作时间”
解决:发现\n也被读入,所以才会输入两次。插入一句“如果是\n,则continue”,问题解决。
8.11.8
题目:编写一个程序,显示一个提供加法、减法、乘法、除法的菜单。获得用户选择的选项后,程序提示用户输入两个数字,然后执行用户刚才选择的操作。该程序只接受菜单提供的选项。程序使用float 类型的变量储存用户输入的数字,如果用户输入失败,则允许再次输入。进行除法运算时,如果用户输入0 作为第2个数(除数),程序应提示用户重新输入一个新值。
问题:无
解决:无
二、编写并运行书本第9章9.11编程练习题目中的第1~11题。
9.11.1
题目:设计一个函数min(x, y),返回两个double类型值的较小值。在一个简单的驱动程序中测试该函数。
问题:无
解决:无
9.11.2
题目:设计一个函数chline(ch, i, j),打印指定的字符j行i列。在一个简单的驱动程序中测试该函数
问题:无
解决:无
9.11.3
题目:编写一个函数,接受3个参数:一个字符和两个整数。字符参数是待打印的字符,第1个整数指定一行中打印字符的次数,第2个整数指定打印指定字符的行数。编写一个调用该函数的程序。
问题:无
解决:无
9.11.4
题目:两数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,最后取计算结果的倒数。编写一个函数,接受两个double类型的参数,返回这两个参数的调和平均数。
问题:无
解决:无
9.11.5
题目:编写并测试一个函数larger_of(),该函数把两个double类型变量的值替换为较大的值。例如, larger_of(x, y)会把x和y中较大的值重新赋给两个变量。
问题:无
解决:无
9.11.6
题目:编写并测试一个函数,该函数以3个double变量的地址作为参数,把最小值放入第1个变量,中间值放入第2个变量,最大值放入第3个变量。
问题:发现无论我输入什么,我的中间值永远和b一样(即使b是最大的那个数)。
解决:原来,我一开始并没有定义变量s,而是最后“zhong = a +b + c - max - min”,这个时候a、b都已经被赋予新值max和min,所以b始终等于b。在最开始加上s,问题解决。
9.11.7
题目:编写一个函数,从标准输入中读取字符,直到遇到文件结尾。程序要报告每个字符是否是字母。如果是,还要报告该字母在字母表中的数值位置。例如,c和C在字母表中的位置都是3。合并一个函数,以一个字符作为参数,如果该字符是一个字母则返回一个数值位置,否则返回-1。
问题:无
解决:无
9.11.8
题目:在第六章“C控制语句:循环”的程序清单6.20中,函数power()的功能是返回一个double类型数的某个正整数次幂。现在改进该循环,使其能正确地计算负幂。同时,用该函数实现0的任何次幂为0,并且任何数值的0次幂为1。使用循环的方法编写函数并在一个程序中测试它。
问题:无
解决:无
9.11.9
题目:使用递归函数重写编程练习8.
问题:无
解决:无
9.11.10
题目:为了让程序清单9.8中的to_binary()函数更通用,编写一个to_base_n()。函数接受两个参数,且第二个参数在2~10范围内,然后以第2个参数中指定的进制打印1个参数的数值。例如,to_base_n(129,8)显示的结果201,也就是129的八进制数。在一个完整的程序中测试该函数.
问题:无
解决:但这是我误打误撞写出的递归函数,我甚至自己都还不是很理解......我还得再消化消化
9.11.11
题目:编写并测试Fibonacci()函数,该函数用循环代替递归计算斐波那契数.
问题:无
解决:无
总结思考:
1.对递归函数的使用与编写还不是很清楚,应该是底层逻辑还没明白,再在网上找点资源理解理解。
2.感觉第八章的习题偏难,应该是我对字符串的理解不够到位,需要再翻翻课本。
3.编写字符的重复输入程序是,总是会漏考虑最后的\n,这需要特别注意!!!
4.对指针的概念还不是特别清晰,需要再消化课本。
5.感觉对知识的吸收一直不是很到位,我觉得C primer plus这本书看一遍不够,等我全部看完,我要再看一遍!