结构体和链表作业
题目1:7-2 通讯录排序:输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
1. 本题PTA提交列表
2. 设计思路
题目要求按照年龄从大到小的顺序依次输出,于是我只要用冒泡法把结构体变量从大到小排列就可以了。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)答案错误:认真检查了一遍,发现是冒泡法排序那块出现了错误,j应该从0开始循环,才能遍历。此时i<n与i<n-1得到的结果一样,所以可以少一次循环。
4.代码截图。
题目二:7-4 通讯录的录入与显示:通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
1.本题PTA提交列表
2. 设计思路
因为要输出查询的通话记录,所以用数组会比较方便,当得到要查询的编号为a时,直接输出s[a]中的所有成员即可。当然需要判断此时a是否在通话记录中。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)答案错误:观察报错点为最长字符串和最小N,因为最大N的结果是正确的,所以猜想错误点在于最长字符串,那么就有很大的可能性为定义的字符串的范围太小,导致数据不够存放。是的,把字符串的位数增大后就正确了。
4.代码截图。
题目三:7-5 复数四则运算:本题要求编写程序,计算2个复数的和、差、积、商。
1.本题PTA提交列表
2. 设计思路
因为涉及到四则计算,所以用子函数更加方便。先用sum1记录两个复数之和的实部,sum2记录两个复数之和的虚部;再用子函数FACT(s.a1,s.b1,s.a2,s.b2)判断输出等式 ,用子函数fact(sum1,sum2)判断输出结果。差,积,商也是如此。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)答案错误:当复数的虚部为负数时,输出就会在负号前多一个+,所以应该用if语句进行判断输出。
4.代码截图。
二、同学代码结对互评
1.互评同学:陈冰艳
2.我的代码、互评同学代码截图
陈冰艳同学的代码:
我的代码:
3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:陈冰艳同学用一个for循环分别计算出和,差,积,商,a为结果的实部,b为结果的虚部,调用子函数f(a)进行四舍五入,然后判断输出。而我是先用sum1记录两个复数之和的实部,sum2记录两个复数之和的虚部;再用子函数FACT(s.a1,s.b1,s.a2,s.b2)判断输出等式 ,用子函数fact(sum1,sum2)判断输出结果。差,积,商也是如此。
各自优势:陈冰艳同学代码的优势很明显,条理清晰,语言简洁明了。
我更喜欢陈冰艳同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.我学会了简单的结构类型,可以解决部分相关题目。
2.本周的内容,你还不会什么?
结构体的插入,删除,增添。
3.结构体考试总结
(1).哪题做错了,怎么改?
7-5:子函数fact的正确判断输出是通过不断的调试得到的,如果条例一开始就很清晰就不会出现这种错误了。
在格式上仍然需要花很多时间去修改。多注意输出结果后面是否有空格,换行什么的。
(2).考试结果满意么,怎么改进?
考试结果感觉还行,但编译代码的条理性,语言的表述方面仍需要很大的提高。
【二】链表
题目1:7-11 单向链表3:编程实现:输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:输入一个正整数 n(0<n<=9)和一组(n个)升序的整数,建立单向链表,再输入一个整数 x,把 x 插入到这组数据中,使该组数据仍然有序。
1. 本题PTA提交列表
2. 设计思路
主函数中输入repeat,做repeat次循环。每次循环都先输入该次循环数据的个数n,然后把这n个数据存储在链表中,最后输入待插入整数x,调用子函数fact(head,n,x)。子函数fact(head,n,x)分为三种情况:一,x<=链表的第一个数据,即头插法;二,x比链表里的所有数据都大,即尾插法;三,x位于链表中。分别有不同的处理方法。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)格式错误:题目要求的输出格式是两个数据间有一个空格,行末不要空格。而我的输出是每个数据后面都带了一个空格。
4.代码截图。
题目二:7-12 单向链表4:定义单向链表:输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序并输出。
1.本题PTA提交列表
2. 设计思路
在主函数中每记录一次数据就用一次头插法,这里的for循环以-1为标志结束,最后就变成倒序输入了,然后在输出时注意格式问题即可。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)格式错误:与上题错误点一样。行末不能加空格。
4.代码截图。
题目三:7-13 单向链表5:定义单向链表struct Node并实现:输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,再输入一个成绩值,将成绩小于该值的学生信息删除,并将成绩大于等于该值的学生信息输出。
1.本题PTA提交列表
2. 设计思路
因为p->num=0是结束的标志,所以让动态分配后的初始化为-1。第一个for循环用于输入所有数据;第二个for循环用于删除分数比grade低的同学的信息,分为两部分:一,被删除点位于头结点,二,被删除点不是头结点;第三个for循环用于输出已删除后的链表。
3.本题调试过程碰到问题及PTA提交列表情况说明。
(1)答案错误:在第二个for循环中出现了逻辑上的错误,不能正确把握链表删除结点的操作。之后经过不断调试,还是正确了。
4.代码截图。
二、同学代码结对互评
1.互评同学:陈冰艳
2.我的代码、互评同学代码截图
陈冰艳同学的代码:
我的代码:
3.我和陈冰艳同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?
不同在于:陈冰艳同学的代码在删除特定结点的条件语句分成了两部分,一为被删除结点为头节点,二为被删除点不是头结点。最主要的代码差异在于删除特定结点这一部分,陈冰艳同学的语言更加标准,且运用了多个子函数,函数名也有实际意义。而我直接用判断语句输出结果,并没有按照题目要求删除结点(这样很不好!)。
各自优势:陈冰艳同学完全按照题目的要求编译代码,且代码语言简洁明了。而若是题目不要求删除特定节点,我的代码会更加简短。
我更喜欢陈冰艳同学的代码。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.我学会了简单的链表,可以解决部分链表题目,例如:逆序输出数字。
2.本周的内容,你还不会什么?
删除结点对我来说难度还是不小。例如7-10,7-13.
3.链表考试总结
(1).哪题做错了,怎么改?
7-10:题目要求先将已有数据某一部分删除后输出另一部分,可是在删除时遇到了未知原因的阻力,导致答案错误,而直接输出题目要求的那部分是正确的,但总感觉没完成作业。
(2).考试结果满意么,怎么改进?
考试结果感觉还可以,但是考试的过程并不理想,代码打出来很简单,但是总要经过一番不断的调试才能达到正确。加深自己对链表的理解,深入学习链表知识点。