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