C语言博客作业--结构体
2017-12-21 17:21
423 查看
一、PTA实验作业
题目1:计算两个复数之积
1. 本题PTA提交列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/c2c1397388654f96a7b55652eb242355.png)
2. 设计思路
struct complex{ int real; int imag; };//该结构体表示复数的实部和虚部 定义函数multiply 定义结构变量product product.real=x.real*y.real-x.imag*y.imag; product.imag=x.real*y.imag+y.real*x.imag;//根据运算法则计算实部与虚部 返回结果
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/b44dc57d647c2c3ac4a09ee6cdfc32dc.png)
4.本题调试过程碰到问题及PTA提交列表情况说明
本题比较简单,思路清晰,一遍就过,无调试问题。题目2:计算职工工资
1. 本题PTA提交列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/9be8389be85d3ddf151f7f734ebb0f8a.png)
2. 设计思路
struct clerk{ char name[10]; float base,flot,expend,fact; };//该结构体表示职员姓名、基本工资、浮动工资,支出和实发工资 定义变量i,n 输入n 定义结构数组num for i=0 to n-1 输入职员的姓名、基本工资、浮动工资,支出 for i=0 to n-1 计算实发工资 输出职员的姓名和实发工资
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/ac54566a3ca14cc40c52a8ae2c68a9fc.png)
4.本题调试过程碰到问题及PTA提交列表情况说明
本题比较简单,思路清晰,一遍就过,无调试问题。题目3:通讯录的录入与显示
1. 本题PTA提交列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/adb5a82a2ed0a2205f19cbb56fbd4347.png)
2. 设计思路
struct phone{ char name[10]; int year,month,day; char sex[2],number1[20],number2[20]; };//该结构体表示朋友的姓名、出生日期、性别、固定电话号码、移动电话号码 定义变量i,n,k,number 输入n 定义结构数组num for i=0 to n-1 输入姓名、出生日期、性别、固定电话号码、移动电话号码 输入k for i=1 to k 输入要查询的编号number 如果number<n&&number>=0 输出编号所对应的记录 否则输出Not Found
3.代码截图
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/7d3c3b06b18a326b4e9e8ebf6929332c.png)
4.本题调试过程碰到问题及PTA提交列表情况说明
第一次提交时显示答案错误,输出时出现错误,有多余的东西输出了,仔细分析了一会儿,发现性别的数组长度设小了,结束符没地方放,导致错误;再次提交,发现只对了一个测试点,还有两个测试点没有通过,通过随机输入一些例子发现日期没有前导0,改了之后发现还是错误,后来猜测可能是编号要限制一个范围,不能小于0,这一点我在看题时有想过,可后来就忽略了,改了之后果然答案正确了。二、截图本周题目集的PTA最后排名
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/c2e50ffc26b8b4641c4b04fbbaf17d7f.png)
三、阅读代码
1.字符串处理函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/2a6cdae4e2a2b610288888ebfc7a43a9.png)
代码中写了一个交换函数,两个计算长度函数,一个复制函数;这几个代码虽然简单,但是有它的巧妙之处,其中计算长度的代码分别用了数组和指针来做,用指针来控制循环,非常简洁明了,效率也比用数组的高;而且复制函数一边循环一遍复制,只用了一行就解决了,非常巧妙,受益匪浅。
2.投票票数计算
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/93142a60d1cf8901260022c098923ff6.png)
运用了结构体来计算每个人的票数,运用结构体能够更有条理的处理一些有很多成员的问题,如果没有运用结构体来解决,就要定义很多的变量来存放这一些数据,导致代码可读性降低,写起来也更麻烦。
四、本周学习总结
1.总结本周学习内容
1.结构体、共用体、枚举这种构造数据类型特点
结构体
结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型。结构体可以在一个结构中声明不同的数据类型,相同结构的结构体变量是可以相互赋值的共用体
1.同一段内存可以存放几种不同类型的成员,但是每一瞬间,只能存放一种,其他成员都不起作用。2.共用体变量中起作用的成员是最后一次存放的成员。
3.共用体变量的地址和其成员地址都是同一地址,&a, &a.i都一样。
4.不能对共用体变量名赋值,不能引用共用体变量名来得到一个值,不能在定义共用体变量时对它进行初始化。
5.不能将共用体变量作为函数参数,不能使函数返回共用体变量。但可以使用指向共用体变量的指针。
6.共用体空间等于最大成员占据的空间
枚举
1.所谓"枚举"是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。2.在C语言中,枚举元素按常量处理,所以不能赋值。
3.在定义时,可以改变枚举元素的值。
2.递归函数原理
一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:
1.运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;2.每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
3.每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。
2.罗列本周一些错题
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/25/1b1ecd722422124eb28c03c579829ba8.png)
这一题第二空我做错了,没有注意到函数返回值为指针类型,所以函数应定义为指针类型的。
相关文章推荐