一、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.总结本周学习内容。
- 结构体:
```
- 结构体:
结构体的定义:
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