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

一、PTA实验作业(5分)

题目1: 结构体数组按总分排序

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

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

void calc(struct student *p,int n);  累加总分函数
定义变量i作为循环变量
 for i=0 to n-1
p[i].sum=0; 将数组都赋予初值0
for j=0 to 2
	p[i].sum= p[i].sum+ p[i].score[j]; 将3个学科的分数加到总分上
end for

void sort(struct student *p,int n); 按总分从大到小排名
定义一个结构变量struct student	m;
定义i,j作为循环变量
for i=0 to n-1         用选择排序法,找最大值先排列
for j = i+1  to n-1 
遍历sum数组找出最大分p[i].sum<p[j].sum 如果找到就将两变量的所有内容互换
end for

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

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

  • 由于没有将同属于一个步骤的内容用括号括起来导致出错

题目2:时间换算

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

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

struct time {
	int hour;
	int min;
	int sec;
}; //该结构体表示时间的小时,分钟,秒
定义结构数组存放数据 struct time t[200]; 定义较大以免超范围
定义两个字符变量来输入两个:号char ch,op;
输入数据后进行判断 小时,分钟及秒加上n秒后有没有大于等于60 有就用时间进位
还有最后判断小时是否为24,是则归为0;
最后输出

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

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

  • 由于没有加上:号的输入,而直接输入数字,导致答案错误

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

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

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

struct address{
	char name[100];
	char birthday[100];
	char sex[100];
	char number[100];
	char teleph[100];
};  //定义结构储存姓名,生日,性别,号码 ,固话 
定义结构数组 struct address p[1000];
for i=0 to n-1
进行通讯录的录入
end for
输入要查找的个数 k
for i=0 to k-1 
输入要查找的编号x 判断x是否在范围内
是则输出下标为x的结构数组所有内容
否则输出  no found

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

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

最后判断x是否属于范围内少了x>=0这个范围导致部分正确

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

三、阅读代码(2分)

冒泡法用指针来实现,不用返回值,直接对数组内的值进行交换

可以用递归的方法进行数字的逆序输出

四、本周学习总结

1.总结本周学习内容。

    1. 结构体:
 - 结构体的定义:
struct student  //结构体类型的说明与定义分开。 声明
{
int age;   /*年龄*/
float score;  /*分数*/
char sex;     /*性别*/
};

 - 结构类型变量的储存布局按其类型定义中成员的先后顺序排列,先定义的排在前面。
 - 结构数组的元素成员引用通过' . ' 号来指定 ,还可以用   -> 号来访问指针指向的结构成员 如p ->num = 333(p为地址)
 - 在用指针访问结构成员时(*p).num = 333 中()是不可少的。
  • 2.共用体
 - 1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。

 - 2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。

 - 3.共用体变量的地址和它的各成员的地址都是同一地址。

 - 4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

 - 5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
 - 它的定义格式为:
        union 共用体名{
            成员列表
            };
    共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内    存,修改一个成员会影响其余所有成员。

    结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

    共用体也是一种自定义类型,可以通过它来创建变量,例如:
        union data{
            int n;
            char ch;
            double f;
        };
            union data a, b, c;
上面是先定义共用体,再创建变量,也可以在定义共用体的同时创建变量:
        union data{
        int n;
        char ch;
        double f;
        } a, b, c;
    如果不再定义新的变量,也可以将共用体的名字省略:
    union{
        int n;
        char ch;
        double f;
    } a, b, c;

  • 3枚举.
枚举类型的定义形式为:
    enum typeName{ valueName1, valueName2, valueName3, ...... };
    enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途;typeName是枚举类型的名字;                        
    valueName1, valueName2, valueName3, ......是每个值对应的名字的列表。注意最后的;不能少。

例如,列出一个星期有几天:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。

我们也可以给每个名字都指定一个值:
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
更为简单的方法是只给第一个名字指定值:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
这样枚举值就从 1 开始递增,跟上面的写法是等效的。

枚举是一种类型,通过它可以定义枚举变量:
enum week a, b, c;
也可以在定义枚举类型的同时定义变量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
有了枚举变量,就可以把列表中的值赋给它:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
或者:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat

2.罗列本周一些错题。


以为当n为负数的时候再进行递归就会发生错误导致选了d,后来老师上课讲解了才知道

没有理解透彻递归,导致错误

先进行除10 在进行递归,最后输出的是n%10 的值使这递归不能逆序输出,而还是输出7534

posted @ 2017-12-24 21:45  Hughgk  阅读(543)  评论(1编辑  收藏  举报