一、PTA实验作业
题目1:6-1 计算两个复数之积
1. 本题PTA提交列表
2. 设计思路
struct complex{
int real;
int imag;
};//该结构体表示复数的实部和虚部
struct complex multiply(struct complex x, struct complex y)//定义函数计算复数间的乘法
定义struct complex变量result表示函数的返回值
result.real=x.real*y.real-x.imag*y.imag计算result的实部
result.imag=x.real*y.imag+x.imag*y.real计算result的虚部
返回result
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
原本想直接return表达式但没办法同时返回虚部和实部,于是设置stuct complex变量result并返回
题目2:7-1 计算职工工资
1. 本题PTA提交列表
2. 设计思路
struct staff{
char n[10];
float j_money;
float f_money;
float z_money;
float s_money;
};//该结构体表示员工姓名,基本工资,浮动工资,支出和实发工资
定义struct staff 变量p[999]存放员工信息,定义变量N表示输入员工信息的个数,变量i表示循环次数
输入N
for i=0 to i=N-1
输入 员工的姓名,基本工资,浮动工资,支出
end for
for i=0 to i=N-1
计算员工实发工资=基本工资+浮动工资-支出
end for
for i=0 to i=N-1
输出员工姓名 实发工资
end for
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明。
一开始设置变量p数组长度为50但是提示不够大,于是设为999
题目3:7-2 时间换算
1. 本题PTA提交列表
2. 设计思路
struct time{
int h;
int m;
int s;
}; //该结构体表示时间的小时,分钟,秒
设置struct time 变量p
设置变量n,k,l表示n秒后经过几分钟,几小时
输入起始时间
输入n秒
IF 起始秒+n秒<60 则秒=起始秒+n
否则 k=(起始秒+n秒)/60 , 秒=(起始秒+n秒)%60 //表示超过几分钟
IF 起始分钟+k<60 则分钟=起始分钟+k
否则 l=(起始分钟+k)/60 ,分钟=(起始分钟+k)%60
IF 起始小时+l<24 则小时=起始小时+l
否则 小时=(起始小时+l)%24
end IF
输出新的时间
4.本题调试过程碰到问题及PTA提交列表情况说明。
不是很理解这道题和结构体之间的关系
二、截图本周题目集的PTA最后排名
三、阅读代码
1-如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。
arr 是一个指针数组,它包含了 3 个元素,每个元素都是一个指针。parr 是指向数组 arr 的指针。启示了我们数组里也可以存放地址,然后设置成指针数组,但parr的定义形式应该理解为int (parr),括号中的表示 parr 是一个指针,括号外面的int 表示 parr 指向的数据的类型。arr 第一个元素的类型为 int ,所以在定义 parr 时要加两个 。
2-输入一个结构体类型变量的成员,并输出。
程序使用了嵌套结构简洁地表示出学生信息,用student->的方式指向比(*student).省略两个字符更加简洁。通过C提供的函数malloc()来为指针分配安全的地址。函数sizeof()返回值是计算给定数据类型所占内存的字节数。
四、本周学习总结
1.总结本周学习内容。
结构体、共用体、枚举这种构造数据类型特点。
结构体和数组一样都是构造型数据类型,和数组不同的是,结构体可以处理不同类型的数据。共用体是一种多变量共享存储空间的构造类型,它允许几种不同的变量共用同一存储空间。
共用体和结构体的区别:
1.结构体每一位成员都用来表示一种具体事务的属性,共用体成员可以表示多种属性(同一存储空间可以存储不同类型的数据)。 2.结构体总空间大小,等于各成员总长度,共用体空间等于最大成员占据的空间。 3.共用体不能赋初值。 4.共用体变量中的值是最后一次存放的成员的值如 a.i = 1; a.ch = ‘a‘; a.f = 1.5; 完成以上三个赋值语句后共用体边量的值是 1.5而 a.i=1 和 a.ch=‘a‘已无意义 共用体变量不能初始化例 union data { int i; char ch; float f; }a={1,‘a‘, 1.5} 错误!!!
共用体的定义形式
union 共用体名
成员列表
变量列表递归函数原理
递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。
递归通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
(1)边界条件:确定递归到何时终止,也称为递归出口。
(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果
在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。
递归函数的内部执行过程
一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:
(1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;
(2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
(3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。
2.罗列本周一些错题。