C语言博客作业--结构体

一、PTA实验作业(5分)

题目1:按等级统计学生成绩

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

struct student
{ char  num[10];
  int  year,month,day ;
};//该结构体表示人员的编号、出生年月日
传入学生信息和要查找的编号
int  i控制循环,flag=1判断是否找到人员
for i=0 to i<8
           if(用strcmp对比std[i]编号和num是否相同?)   flag=0   找到返回该人员信息
如果没找到字符串 返回空串
end for

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

4.本题调试过程碰到问题及PTA提交列表情况说明。

这题思路比较清晰,主要是刚开始练习结构体用的不太熟练,在编译器的提示下解决的,用‘.’的话不能直接std.num,需要写成(*(std)).num

题目2:时间换算

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

struct time{
	int hh,mm,ss;
};//该结构体表示时间的小时,分钟,秒
int t表示经过时间,分钟minute=0,小时hour=0;
定义结构体times
输入小时数,分钟数,秒数
计算新秒数minute
    将新秒数转化为新的小时分钟秒数
               秒数满60分钟数进一
               分钟数满60小时数进一
              小时数对24进行取余
输出新的小时,分钟,秒数

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

4.本题调试过程碰到问题及PTA提交列表情况说明。

部分正确:if判断的时候是逢60进一位,我条件写成>60漏了 =,导致一直部分正确,一步步调试发现了漏洞

题目3:通讯录的录入与显示

1. 本题PTA提交列表(要提交列表,不是结果)

2. 设计思路(伪代码或流程图)

struct number{
	char name[11],sex,phone[17],mophone[17],birthday[17];
};//该结构体表示人员的名字,性别,固定电话,移动电话,出生日期
int n表示录入数据个数,i,j控制循环flag=0判断是否找到
输入录入数据个数n
定义结构体数组a[n]
for i=0 to i<n 
    输入n个学生的数据
int k表示查询数据个数
输入查询数据个数k
int b[k]存放输入的查询编号
for i=0 to i<k
     输入查询的编号
for i=0 to i<k
   for j=0 to j<n
       如果找到了输出该人员信息
       flag=1
  如果没找到
     输出“Not Found”
  重新flag=0
end for

3.代码截图(注意,截图,截图,截图。不要粘贴博客上。不用用···语法去渲染)

4.本题调试过程碰到问题及PTA提交列表情况说明。

答案错误:一开始年月日那边用的%d/%d/%d/%d输入,发下只有一位的无法输成01这样的形式,后来直接把年月日直接改成字符串输入输出就好了,把出生年月看成一个整体。

二、截图本周题目集的PTA最后排名。(2分)

三、阅读代码(2分)

  • 题目1:输入一个用空格分隔的字符串,通过程序计算出最长的那段字符串占多少位。(如输入 1234 12345 123 12,最后得出5)

    优点:思路清晰,代码简洁,定义两个变量max和temp存放字符串长度,用空格做每个字符串结束的标志,temp存放遍历的每个字符串长度,通过和最长字符串max比较,得出结果。

  • 题目2:输入一段字符串,无论是否有重复元素出现,都只打印一次出现过的大写字母和小写字母,且按字母表顺序打印。(如输入AaAa!<-11->!zZzZ, 打印A Z a z)

    优点:方法十分巧妙,先对要打印的temp数组进行初始化为0,再通过调用函数对要打印的字母赋值,用到了将字母字符和A的差值存为temp的下标的方法实现按字母表顺序打印,最后通过判断数组是否为0实现输出,如果没有看过这题一般是不会想到这种做法,相比之前我做的同类型题的代码,这样写十分简洁,值得学习。

四、本周学习总结(1分)

1.总结本周学习内容。

结构体、共用体、枚举这种构造数据类型特点:

  • 结构体:构体和数组一样都是构造型数据类型,和数组不同的是,结构体可以处理不同类型的数据,结构体里还可以有结构体类型、共用体的类型的数据。
struct a{
    类项名 结构成员
    类项名 结构成员
};
struct 结构名{
    类型名 结构成员1
    类项名 结构成员2
   struct a 结构成员3 
  }结构体变量名表;
  • 共用体:共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间,共用体空间等于最大成员占据的空间且共用体不能赋初值。
 struct 结构名{
    类型名 结构成员1
    类项名 结构成员2
   union 类项名{
                类项名 结构成员3;
                类项名 结构成员4;
                类项名 结构成员5;
                } 共用体变量名表;
  }结构体变量名表;
  • 枚举:枚举是C语言中一种基本数据类型,可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如可以用枚举来表示星期,季节,月份等。
    例子:
   enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
     };

自动推算TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7

结构体复习

(1)struct和它后面的结构名一起组成一个新的数据类型名;定义成struct{}xxx;的形式时,xxx为结构体变量名表,可简化结构体名,方便书写。

(2)结构的嵌套定义:先定义成员的结构类型再定义主结构类型

(3)结构变量成员的引用

i 结构名.结构成员名 如 s1.sum
ii 嵌套结构成员引用类似 如 struct nest_student nest_s1
规则:从左到右 从外到内

(4)结构变量的整体赋值
允许将一个结构变量的值直接赋给另一个结构变量,但是必须是相同结构类型变量

(5)结构指针(重点)

i 访问结构成员 i 用p访问,例如(p.sum)
ii 用指向运算符->

递归函数原理

  • 递归关键是归纳出递归出口和递归式子。

  • 工作原理为:
    (1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址。
    (2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
    (3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行

2.罗列本周一些错题。

  • 错了以后知道了struct本身就是一种类型,写的时候就翻书对照,也不知道该填什么类型。
  • 返回值应该为7432,老师上课讲评后才知道递归返回的顺序应从递归出口开始返回,所以输出的值不变。
  • 没注意到D选项数组越界
posted @ 2017-12-24 18:43  evfun  阅读(409)  评论(1编辑  收藏  举报