高级语言程序设计课程第四次个人作业
高级语言程序设计课程第四次个人作业
-
这个作业属于哪个课程:
https://edu.cnblogs.com/campus/fzu/2024C -
这个作业要求在哪里:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293
-
学号:102400108
-
姓名:王馨怡
作业内容: -
- 编写并运行书本第6章6.16编程练习题目中的第1,5,7,8,9,10,12,13,15,16,18题。
-
- 编写并运行书本第7章7.12编程练习题目中的第1,2,4~11题。
一、编写并运行书本第6章6.16编程练习题目中的第1,5,7,8,9,10,12,13,15,16,18题。
6.16.1
题目:编写一个程序,创建一个包含26个元素的数组,并在其中储存26个小写字母,然后打印所有内容。
问题:无
解决:无
6.16.5
题目:编写一个程序,提示用户输入大写字母。使用嵌套循环以下面的金字塔的格式打印字母:
-----A
----ABA
---ABCBA
-ABCDCBA
ABCDEDCBA
打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是在用户输入E后的打印结果。
问题:1.每行空格漏了一个
2.逆序打印时,每行多打了一个字母
解决:1.将 i<n-p-1 改为正确的 i<n-p
2.将 m=65+p 改为 m=65+p-1
6.16.7
题目:编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词。提示:strlen()函数(第4章介绍过)可用于计算数组最后一个字符的下标。
问题:使用strlen函数,逆序打印时,乱码了
解决:发现初始化 i=strlen(a) 数组多算了一个-->改为 i=strlen(a)-1 结果正确
6.16.8
题目:编写一个程序,要求用户输入两个浮点数,并打印两数之差除以两数乘积的结果。在用户输入非数字之前,程序应循环处理用户输入的每对值。
问题:无
解决:无
6.16.9
题目:修改练习8,使用一个函数返回计算的结果。
问题:无
解决:无
6.16.10
题目:编写一个程序,要求用户输入一个上限整数和一个下限整数,计算从上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数小于下限整数为止。程序的运行示例如下:
Enter lower and upper integer limits: 5 9
The sums of the squares from 25 to 81 is 255
Enter next set of limits: 3 25
The sums of the squares from 9 to 625 is 5520
Enter next set of limits: 5 5
Done
问题:发现无论怎么输入,第二个答案的值总是错误的。
解决:调试代码,发现sum未重置=0,所以输第二个答案时,sum=第一个的sum+第二个的sum-->在每次重置sum=0,问题解决。
6.16.12
题目:考虑下面两个无限序列:
1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + …
1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + …
编写一个程序计算这两个无限序列的总和,直到到达某次数。提示:奇数个-1 相乘得-1,偶数个-1相乘得1。让用户交互地输入指定的次数,当用户输入0或负值时结束输入。查看运行100项、1000项、10000项后的总和,是否发现每个序列都收敛于某值?
问题:发现输入的时候二者都不收敛。
解决:结果是自己的sum1、sum2都又又又没有初始化!!!-->每次都初始化sum1、sum2,问题解决。
6.16.13
题目:编写一个程序,创建一个包含8个元素的int类型数组,分别把数组元素设置为2的前8次幂。使用for循环设置数组元素的值,使用do while循环显示数组元素的值。
问题:新的a[i]中,总是只有a[0]是正确的,其他都错误
解决:又是老问题,n没有重置为1,所以答案才会错误-->在每次重置n=1,问题解决。
6.16.15
题目:编写一个程序,读取一行输入,然后把输入的内容倒序打印出来。可以把输入储存在char类型的数组中,假设每行字符不超过255。回忆一下,根据%c转换说明,scanf()函数一次只能从输入中读取一个字符,而且在用户按下Enter键时scanf()函数会生成一个换行字符(\n)。
问题:运行正常,但编译框发出警告
解决:发现用了strlen函数,但忘记加 <string.h> 的头文件了!-->添加头文件后,不再发出警告,问题解决。
6.16.16
题目:Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相当于原始投资的10%)。Deirdre以 5%的复合利息投资了 100 美元(也就是说,利息是当前余额的 5%,包含之前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并显示那时两人的投资额。
问题:无
解决:无
6.16.18
题目:Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少了N个朋友,剩下的朋友数量翻倍。编写一个程序,计算并显示Rabnud博士每周的朋友数量。该程序一直运行,直到超过邓巴数(Dunbar’s number)。邓巴数是粗略估算一个人在社交圈中有稳定关系的成员的最大值,该值大约是150。
问题:无
解决:无
二、编写并运行书本第7章7.12编程练习题目中的第1,2,4~11题。
7.12.1
题目:编写一个程序读取输入,读到#字符为止,然后报告读取的空格数、换行符数和所有其他字符的数量。
问题:无论怎么输入,答案第二、三个的值都为0
解决:发现一个低级错误!!写的是ch= 而非ch== -->改正为ch== 结果正确。
7.12.2
题目:编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。每行打印8个“字符-ASCII码”组合。
建议:使用字符计数和球磨运算符(%)在每8个循环周期时打印一个换行符。
问题:无
解决:无
7.12.4
题目:使用if else语句编写一个程序读取输入。读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
问题:不理解“用两个感叹号替换原来的感叹号”的意思,导致不会写
解决:询问同学,他们认为是当ch==‘!’时,ch=‘!’。
7.12.5
题目:使用switch重写练习4。
问题:无
解决:无
7.12.6
题目:编写程序读取输入,读到#停止,报告ei出现的次数。用“Receive your eieio award”的输入来测试。
问题:一开始写,本来想构建两个字符数组,分别存储第奇数个和第偶数个字符。后来发现行不通,因为‘e’不一定在奇数位,‘i’也不一定在偶数位。
解决:所以,我构建了一个足够大的字符数组,并逐个判断前一个字符和后一个字符的关系,计算次数。
7.12.7
题目:编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。
1.基本工资 = 10美元/小时。2.加班(超过40小时)= 1.5倍时间。3.税率:前300美金为15%,续150美元为20%,余下的为25%。
问题:无
解决:无
7.12.8
题目:使用switch完成工资等级选择。如果选择1~4其中的一个数字,程序应该询问用户工作的小时数。程序要通过循环运行,除非用户输入5。
问题:无
解决:无
7.12.9
题目:编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。
问题:无
解决:无
7.12.10
题目:988年的美国联邦税收计划是近代最简单的税收方案,它分为4个类别,每个类别有两个等级。下面是该税收计划的摘要(美元数为应征税的收入):
类别 税金
单身 17850美元按15%计,超出部分按28%计
户主 23900美元按15%计,超出部分按28%计
已婚,共有 29750美元按15%计,超出部分按28%计
已婚,离异 14875美元按15%计,超出部分按28%计
例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15×17850
+0.28×(2000-17850)美元,编写一个程序,让用户指定缴纳税余的种类和应纳税收入,然后计算税金。程序应通过循环让用户可以多次输入
问题:无
解决:无
7.12.11
题目:ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为1.09美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的运费和包装费,超过20磅的订单在14美元的基础上每续重Ⅰ磅增加0.5美元。编写一个程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜。然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。
问题:发现除了输入‘q’,无论怎么输入,都会输出“请输入字符a,b,c,q: ”
解决:发现在while循环的条件中,我竟然括号位置错掉了(让我好找,我以为是程序设计的问题),把((ch=getchar()!='q'))改为正确的((ch=getchar())!='q')答案终于正确了。
- 总结思考:
1.首先,依旧是重置(初始化)某个变量的问题,若不初始化,则结果很难正确。一定一定要记得初始化变量!!
2.其实在写if-else 的时候,我很容易写错 == ,从而使程序错误,这也是个亟待改正的问题。
3.在写题的时候,我发现我还是容易犯低级错误,如括号阔错位置、==写成=,初始化问题(出现三次了!!!)......这些都需要极度重视和解决
4.在书本上看到的知识,运用错误。如把islower()当成了映射函数使用(其实tolower()才是映射函数)。所以,还是需要加强对书本的消化和理解。
5.for循环的嵌套使用还是不够熟练,还需加强对基础题的练习。