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上运行,发现不可以,就选择均错误。

posted @ 2017-12-24 17:24  君甚秀  阅读(969)  评论(4编辑  收藏  举报