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.罗列本周一些错题

这一题第二空我做错了,没有注意到函数返回值为指针类型,所以函数应定义为指针类型的。

posted @ 2017-12-21 17:21  久念  阅读(538)  评论(5编辑  收藏  举报