C语言博客作业--结构体
一、PTA实验作业
题目1:计算两个复数之积
1. 本题PTA提交列表
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.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题比较简单,思路清晰,一遍就过,无调试问题。
题目2:计算职工工资
1. 本题PTA提交列表
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.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
本题比较简单,思路清晰,一遍就过,无调试问题。
题目3:通讯录的录入与显示
1. 本题PTA提交列表
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.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
第一次提交时显示答案错误,输出时出现错误,有多余的东西输出了,仔细分析了一会儿,发现性别的数组长度设小了,结束符没地方放,导致错误;再次提交,发现只对了一个测试点,还有两个测试点没有通过,通过随机输入一些例子发现日期没有前导0,改了之后发现还是错误,后来猜测可能是编号要限制一个范围,不能小于0,这一点我在看题时有想过,可后来就忽略了,改了之后果然答案正确了。
二、截图本周题目集的PTA最后排名
三、阅读代码
1.字符串处理函数
代码中写了一个交换函数,两个计算长度函数,一个复制函数;这几个代码虽然简单,但是有它的巧妙之处,其中计算长度的代码分别用了数组和指针来做,用指针来控制循环,非常简洁明了,效率也比用数组的高;而且复制函数一边循环一遍复制,只用了一行就解决了,非常巧妙,受益匪浅。
2.投票票数计算
运用了结构体来计算每个人的票数,运用结构体能够更有条理的处理一些有很多成员的问题,如果没有运用结构体来解决,就要定义很多的变量来存放这一些数据,导致代码可读性降低,写起来也更麻烦。
四、本周学习总结
1.总结本周学习内容
1.结构体、共用体、枚举这种构造数据类型特点
结构体
- 结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型。结构体可以在一个结构中声明不同的数据类型,相同结构的结构体变量是可以相互赋值的
共用体
- 1.同一段内存可以存放几种不同类型的成员,但是每一瞬间,只能存放一种,其他成员都不起作用。
- 2.共用体变量中起作用的成员是最后一次存放的成员。
- 3.共用体变量的地址和其成员地址都是同一地址,&a, &a.i都一样。
- 4.不能对共用体变量名赋值,不能引用共用体变量名来得到一个值,不能在定义共用体变量时对它进行初始化。
- 5.不能将共用体变量作为函数参数,不能使函数返回共用体变量。但可以使用指向共用体变量的指针。
- 6.共用体空间等于最大成员占据的空间
枚举
- 1.所谓"枚举"是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
- 2.在C语言中,枚举元素按常量处理,所以不能赋值。
- 3.在定义时,可以改变枚举元素的值。
2.递归函数原理
一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:
- 1.运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;
- 2.每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;
- 3.每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。
2.罗列本周一些错题
这一题第二空我做错了,没有注意到函数返回值为指针类型,所以函数应定义为指针类型的。