问答题 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以存放学生的最高分,将其初始化为第一个学生的成绩,依次与其后的学生成绩比较。最后,将得到的最高分返回给主函数。