C语言博客作业--结构体
2017-12-24 17:24
519 查看
一、PTA实验作业
题目1:6-4 结构体数组按总分排序
1. 本题PTA提交列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/e77541e5dfc5d2f4763c983b3ad4a354.png)
2. 设计思路
* void calc(struct student *p,int n) //传结构体地址和数组的长度,功能是求和 * 定义变量i用于循环 * for i=0至n-1 p[i].sum =p[i].score[0]+p[i].score[1]+p[i].score[2] //求和 end * void sort(struct student *p,int n) //功能是将成绩总和从高到低对这组数据进行排序 * struct student x * 定义变量 i,j,temp,t;//ij用于循环 * emp等于(p+i)->sum; //给temp赋值 * for j从i+1;j至n-1; //选择排序法 if((p+j)->sum大于temp){ temp等于(p+j)->sum; t=j; end * *(p+i)赋值给x *(p+t)赋值给*(p+i) x赋值给*(p+t)
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/2e53796282bc97ccce337a1d795f82dc.png)
4.本题调试过程碰到问题及PTA提交列表情况说明。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/18be8edda96bb2de1f4186016682627e.png)
这道题没有问题,一开始用上面的将结构体交换,后来复习了老师的ppt,发现交换结构体只要中间有一个过渡的结构体就可以了,
汗颜,知识存在缺漏。
题目2:7-2 时间换算
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/a4173979b58055d90d65329716fe4ad9.png)
2. 设计思路
* struct time //设置时间的信息 { int hour,minute,second; int n; };//该结构体表示时间,和增加的时间 * 定义变量ij用于循环,sum用于总秒,数组a[4]用于存放增加后的时分秒 还有struct time times * 输入时分秒,还有n * sum=times.n+times.hour*3600+times.minute*60+times.second; //总秒 * do{ x[++i]等于sum%60; //求时分秒 sum等于sum/60; }直到sum对于0 * for i从2开始直到为0 如果i对于2 那么a[i]>24 ,则a[i]/=24 如果a[i]x小于10,则在%d前加上0 否则直接输出按%d输出
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/11eedaccbd0937a95fc5a54e002dee43.png)
4.本题调试过程碰到问题及PTA提交列表情况说明。
这道题没有问题题目3:7-6 通讯录的录入与显示
1. 本题PTA提交列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/43e566030d0b0d6b30573a7fdd3549f9.png)
2. 设计思路
* struct information{ char name[11]; char born[11]; char sex[2]; char number1[19]; char number2[19]; };//朋友的姓名、出生日期、性别、固定电话号码、移动电话号码 * 定义变量ij用于循环,n,k,t * 输出n,定义数组结构体a * for i从0开始至n-1 scanf("%s%s%s%s%s",a[i].name,a[i].born,a[i].sex,a[i].number1,a[i].number2); //输值 * 输出k * 定义数组b[k] * for i从0开始至k-1 输入b[k] end * for i从0至k-1 * 如果b[k]大于等于0且小于等于n-1 t等于b[k] printf("%s %s %s %s %s\n",a[t].name,a[t].number1,a[t].number2,a[t].sex,a[t].born); //输出 * 否则输出 Not Found end
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/11d710b35a58ef23a901a2e359380e75.png)
4.本题调试过程碰到问题及PTA提交列表情况说明。
其实这道题刚开始我的思路中出生日期没有用字符型,后来做到一半发现写不下去了,才转换思路全部用字符型来做。![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/74079e324b7abf85c6304bc43b726fda.png)
这个是由于数组sex只定义一个造成的,没有调试,调试不下去。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/d2620377dabab4a295bb13e5cc358bbb.png)
这个问题是我一开始定义的字符数组太小造成的。
二、截图本周题目集的PTA最后排名。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/db14d26456f30eb53c3cb6f93bcccfec.png)
三、阅读代码
5-5 时间换算
以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。输入格式:输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n(<60)。
输出格式:输出在一行中给出hh:mm:ss格式的结果时间。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/129d03c64118ec3c93c114f60f891dcc.png)
这个代码跟我的思路差不多,都是对时间进行时分秒存储到数组中,然后用一个函数返回。
7-6 通讯录的录入与显示
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。输入格式:输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15 位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/0ae8fb99953b02019960fa601269d33d.png)
这篇代码我选择它是因为我在前面提到过我曾经用定义日期用int,做不出来,这个代码关于输出日期采用%04d/%02d/%02d,让我对%md理解了更深。
四、本周学习总结
1.总结本周学习内容。
结构体、共用体、枚举这种构造数据类型特点。
结构体可以有结构体类型、共用体的类型的数据。结构体每一位成员都用来表示一种具体事务的属性,可以赋初值。共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。(同一存储空间可以存储不同类型的数据)。
它不可以赋初值,空间等于最大成员占据的空间。
枚举类型是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中。
它和结构体、共用体的区别在于,枚举元素是常量,只能在定义阶段赋值。
递归函数原理
百度一下资料,可能不是很全面,所谓递归函数,就是不断调用自身。每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈。有一个边界条件,他就不调用了
然后想弹簧一样把储存的值释放出去 。
2.罗列本周一些错题
![](https://oscdn.geek-share.com/Uploads/Images/Content/201712/e7ce4432798a527dd8a6c6d39a63f0c1.png)
这道题原本答案是15,后来想调试看看函数怎么走,去在dev上运行,发现不可以,就选择均错误。