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的值也在相应进行更新,最后来判断返回何值,值得学习!