活动设计题   N名学生的成绩已在主函数中放入一个带有头结点的链表结构中,h指向链表的头结点。请编写函数fun,其功能是:找出学生的最高分,并由函数值返回。
    注意:部分源程序给出如下。
    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
    试题程序:
    #include <stdio.h>
    #include <stdlib.h>
    #define N 8
    struct slist
    {
    double s;
    struct slist *next;
    };
    typedef struct slist STREC;
    double fun(STREC *h)
    {
    }
    STREC*creat(double *s)
    {
    STREC*h,*p,*q;
    int i=0;
    h=p=(STREC*)malloc(sizeof(STREC));
    p->s=0;
    while(i<N)
    /*产生8个结点的链表,各分数存入链表中*/
    {
    q=(STREC*)malloc(sizeof(STREC));
    p->s=s[i];i++;p->next=q;
    p=q;
    }
    p->next=NULL;
    return h;/*返回链表的首地址*/
    }
    outlist(STREC*h)
    {
    STREC *p;
    p=h;
    printf('head');
    do
    {
    printf('->%2.0f',p->s);
    p=p->next;
    }/*输出各分数*/
    while(p->next!=NULL);
    printf('\n\n');
    }
    void main()
    {
    double s[N]={85,76,69,85,91,72,64,87}, max;
    STREC *h;
    h=creat(s);
    outlist(h);
    max=fun(h);
    printf('max=%6.1f\n ',max);
    }
 
【正确答案】double fun(STREC *h) { double max=h->s; while(h!=NULL) /*通过循环找到最高分数*/ {if(maxs) max=h->s; h=h->next; } return max; }
【答案解析】本题使用循环语句遍历链表中的每个结点,用判断语句比较结点数据的域大小。注意,h是一个指向结构体类型的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符'->'。