问答题
1. M名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。请编写函数proc(),它的功能是:找出学生的最高分,由函数值返回。
注意:部分源程序如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填入所编写的若干语句。
试题程序: #include<stdio.h>
#include<stdlib.h>
#define M 8
struct slist
{ double s;
struct slist*next;
};
typedef struct slist STREC;
double proc(STREC*h)
{
}
STREC*creat(double*s)
{
STREC *h,*p,*q;
int i=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i<M)
/产生8个结点的链表,各分数存入链表中
{ q=(STREC*)malloc(sizeof(STREC));
p->s=s[i];i++;p->next=q; p=q;
}
p->next=NULL;
return h;//返回链表的首地址
}
void outlist(STREC*h)
{
STREC *p;
p=h;
printf("head");
do
{
printf("->%2.Of",p->s);p=p->next;}
//输出各分数
while(p->next!=NULL);
printf("\n\n");
}
void main()
{
double stu[M]={60,70,80,90,65,75,85,95},
max;
STREC *h;
h=creat(stu);
outlist(h);
max=proc(h);
printf("max=%6.1f\n",max);
}
【正确答案】double proc(STREC *h)
{
double max=h->s;
while(h!=NULL) //判断其是否为终结点
{
if(max<h->s)max=h->s;//把大的数放到max中
h=h-> next:
}
return max;//最后通过返回值返回给主函数
}
【答案解析】 要找出学生的最高分,就要比较所有学生的成绩。定义一个变量max以存放学生的最高分,将其初始化为第一个学生的成绩,依次与其后的学生成绩比较。最后,将得到的最高分返回给主函数。