首页 > 其他 > 详细

结构体

时间:2017-12-25 00:16:55      阅读:298      评论:0      收藏:0      [点我收藏+]

6-4 结构体数组按总分排序:

1. 本题PTA提交列表:

技术分享图片

2. 设计思路:

struct student                  
{
int num;
char name[15];
float score[3];
float sum;
};//该结构体表示学生的学号,姓名,成绩和成绩总和
call void calc(struct student *p,int n)//进入函数
int  i,  j
for  i ←0 to n
  (p+i)->sum←0; 
      i++;
for  i←0 to n   i++,p++;
{
  for  j←0 to 3
      p->sum←p->sum+p->score[j] ;
           j++;   
}    
end  for
end
call void sort(struct student *p,int n)//进入函数
int i,k,index;
struct student temp;//定义新的结构体
for i←0 to n-1 , i++
{
  index←i;
  for k←i+1 to n , k++
        if((p+k)->sum>(p+index)->sum)index←k;
    end  for
  temp←*(p+i);
 *(p+i)←*(p+index);
 *(p+index)←temp;
}
  end for
end

3.代码截图:

技术分享图片

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

  • 1.一开始不会使用指针访问结构体,后来看书知道了指针访问结构有多种表示方式,如(*p).num,或p->num,结构数组也有多种表示方式,如p.num[i]或p[i].num[i];
  • 2.另一个错误是把temp=(p+i); (p+i)=(p+index); (p+index)=temp;中的i写成k,后来发现这样写只会让它自己和自己交换,要多注意;

    7-1 计算职工工资

    1. 本题PTA提交列表:

    技术分享图片

    2. 设计思路:

      struct staff{
      char name[10];
      float truth;
      float real;
      float imag;
      float pay;};//定义员工姓名 基本工资 浮动工资 支出
       int n,i;
      struct staff s1[1500];
      输入n;
    for i←0 to n ,i++
       输入员工姓名,浮动工资 ,支出
      end for
    for i←0 to n,i++
       s1[i].truth ←s1[i].real+s1[i].imag-s1[i].pay;//计算基本工资
      end for 
    for i←0 to n,i++
       输出员工姓名和基本工资

    3.代码截图:

    技术分享图片

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

  • 1.起名有问题,一开始把truth命名为true,到DVE上运行发现原来它是库函数;
  • 2.定义结构体后没加分号;
  • 3.在PTA过得去,但在DVE 运行不了,后来发现是因为scanf("%s %f %f %f\n",s1[i].name,&s1[i].real,&s1[i].imag,&s1[i].pay);中的\n影响,在同学建议下把\n删除,将for后加大括号,在scanf后加上getchar(),大括号把getchar()括起来就解决了这一问题;
    技术分享图片

    7-2 时间换算:

    1. 本题PTA提交列表:

    技术分享图片

    2. 设计思路:

    struct time{
      int cloc;
      int minute;
      int second;
    };//定义时,分,秒
    int i,n;
     struct time t1;
    输入时分秒和要加的秒数n
    getchar();//吸收回车符
    if(n!=0){
    for i=1 to n,i自增
    t1.second自增;
    if(t1.second==60)
         t1.minute自增;
         t1.second=t1.second-60;
              if(t1.minute==60)
                  t1.cloc自增;//分钟等于60,时钟加1
                  t1.minute=t1.minute-60;
                       if(t1.cloc==24)
                           t1.cloc=t1.cloc-24;
    }
    输出加法运算过后的时分秒

三、阅读代码:

技术分享图片
这是宵莹6-3题结构体数组中查找指定编号人员的代码,此代码用flag判断是否返回员工的信息,当遇到一个员工的编号和输入的编号不同时,立即读取下一个员工的编号,flag的值也重置为1;直到读取最后一个员工编号仍不符合输入编号时,flag=0,因为题目输入的员工编号已知,可以在编号中找到,所以可以不返回空串的值,若找到编号,则将此员工的信息复制到另一个结构体上,返回那个结构体;
技术分享图片
这是我的6-3代码,我是采取直接用指针指向原来结构体,用strcmp函数比较std->num和num,如果找到则返回std(因为std本身自增),否则令 std->num[0]=0,再返回*std;我的思路和很多同学思路相似,而宵莹的思路比较独特,不是采取调用strcmp直接比较两个字符串,而是用嵌套循环和flag来比较,一遇到不同字符即进入下个字符串判断,flag的值也在相应进行更新,最后来判断返回何值,值得学习!

结构体

原文:http://www.cnblogs.com/guoruiqian/p/8098722.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!