一、PTA实验作业

题目1:结构体数组按总分排序

1. 本题PTA提交列表

2. 设计思路

void calc   //函数calc求出p指针所指的结构体数组中 n 名学生各自的总分
{
   定义循环变量i;
   for  i=0  to  i<n   
   	总分sum=三门课之和;
   end  for
}
void sort  // 函数sort对p指针所指的结构体数组的学生数据按总分降序排序
{   
  定义循环变量i,j;
  定义结构变量max,temp;
  for  i=0 to i<n-1 
     先把最大组设为第i组;
     for  j=i+1  to j<5 
	  如果第j组的总分大于最大组的总分
           利用temp交换,保留总分最大的组;     
     end for
     第i组换为最大组;
  end  for
}

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 一开始不知道作为中间交换的temp也要设成结构变量,提示编译错误后,试着换一个定义,然后就好啦。改正了一些编译错误后,一开始输出一直都是最大的那个五号,是排序法掌握的不够熟练,导致找到最大值后就结束程序了;
  • 改正后,输出结果如下:最后一个比较出现错误,可能是循环条件有问题;但是调试不出什么,后来想起来上一次自己犯的错误,转换的时候没有加上大括号!!!一步一步执行所以调试不容易发现这个地方有错,,,

题目2:计算职工工资

1. 本题PTA提交列表

2. 设计思路

struct 
{ 
  char name[20];
  float jbgz;
  float fdgz;
  float zc;
}fact[10000];//该结构体表示职员的信息,包括姓名、基本工资、浮动工资和支出
主函数
{ 
  定义循环变量 i;职员人数N;
  输入N;
  for  i=0  to i<N 
     输入职员信息:姓名、基本工资、浮动工资和支出 ;
  end for
  for  i=0  to i<N 
      输出职员的姓名,实发工资( 基本工资加浮动工资减支出 );
  end for

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 由于没有给出职员的人数,所以一开始只给了十个但是显示段错误,我以为是名字的长度不够,但是并不是;看了同学的代码以后发现可能是职员人数的问题,可以先输入N再定义结构体,试了一下确实可以,但是我觉得先定义结构体代码看起来会比较整洁,所以试了一百个,还是不够,我就直接改成了一万个就可以了。

题目3:通讯录的录入与显示

1. 本题PTA提交列表


2. 设计思路

struct  person
{ 
  int number;
  char name[100];
  char birth[100];
  char gender;
  char line[100];
  char phone[100];
}p[100];//该结构体表示联系人的编号、姓名、出生日期、性别、固定电话号码、移动电话号码
主函数
{
   定义输入联系人的人数为N,查询的人数为K,num,循环变量i,j,flag;
   输入N;
   for  i=0   to  i<N 
     编号=i,输入  联系人的编号、姓名、出生日期、性别、固定电话号码、移动电话号码;
   end for
   输入K;
   定义数组a[K];
   for   i=0  to  i<K
     输入a[i];
   for  i=0  to  i<K 
     flag=0;
     for  j=0  to  j<N
         if(找到编号)   输出联系人的姓名、 固定电话号码、移动电话号码、性别、出生日期,flag=1;
     end  for
     if(flag等于0)  输出"Not Found"
  end  for
}

3.代码截图

4.本题调试过程碰到问题及PTA提交列表情况说明。

  • 输入实例一开始总是输出p[0]和p[1],通过调试发现输出里面一开始输出p[i],后来改成嵌套循环后应该输出的是p[j],所以导致答案错误;改正后输出正确,但是不能输出没有找到的情况,猜测是flag出现问题;


  • 判断一次找到后flag的值就变成1了,这个样子没有办法每次都判断是否找到,所以把flag=0放到外层循环就可以进行正确判断了;

二、截图本周题目集的PTA最后排名。

三、阅读代码

1. 输入10个同学的姓名、数学成绩、英语成绩和物理成绩,确定总分最高的同学,并打印其姓名及其三门课程的成绩。


做了本周作业不会觉得这道题很麻烦,但是该示例的解题过程引入了结构体指针(定义的变量名有点长),这是我写作业的时候没有用到的(因为不太熟悉所以不敢用)。

2.结构体嵌套示例:



本来想用一个嵌套结构体写一道作业,但是没有写出来,所以看了看这段代码,稍微理解了一点嵌套。

四、本周学习总结

1.自己总结本周学习内容。

结构体(数据结构丰富 ,型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等都可以包含在结构体内)

结构体
struct 结构体类型名
{
  类型1 成员1;
  类型2 成员2;
  ......
  类型n 成员n;
}变量列表;

//如果要声明变量结构,可以在结构定义时,在结束的分号之前加上这些变量的名字,也可以在定义结构之后使用struct 结构名 变量列表;语句声明结构变量。
//只有相同结构类型的变量之间才可以直接整体赋值!(不能在结构体内部直接给成员赋值)
//嵌套定义的结构变量中,每个成员按从左到右,从外到内的方式引用。

共用体

union 共用体名{
  成员列表
}变量列表;
//值为最后一次存放的成员的值
//长度等于最长成员的长度

递归

递归出口
递归式子

2.罗列本周一些错题。

  • 结构体的嵌套不会定义,没有理解它的意义,所以写错了;

  • 结构体中有些是数字有些是字符,输入的时候特别容易出现错误;比如PTA最后一题,把生日定义成整型,再嵌套一个年月日结构体,但是输入输出的过程一直都出现问题,后来改成字符型了。后来通过本周的阅读代码对嵌套结构体有所了解。

  • 还是不太能理解结构体的数组范围要如何取,比如作业中有些题目给出名字长度不超过多少即可,那么数组长度定义成超过不就好了,为什么有的不能全部正确,非要很大才可以通过。

posted on 2017-12-24 22:32  EVOLYM  阅读(369)  评论(0编辑  收藏  举报