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=0;return h; /*返回链表的首地址* / } outlist (STREC *h) {STREC *p;p=h->next;printf("head");do {printf("->%2.0f ",p->s);p=p->next;} /*输出各分数* /while (p!=0);printf("\n\n "); } 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(max<h->s) max=h->s; h=h->next; } return max; } 在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符“->”。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。