N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。
注意: 部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
给定源程序:
#include
#include
#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 { q=(STREC*)malloc(sizeof(STREC)); q->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); NONO(); } 解题思路: 本题是考察如何从链表中求出学生的最高分。 我们给出的程序是利用while循环语句以及临时结构指针p变量来求出最高分。 1. 将链表中的第1个值赋给变量max。 2. 将链表指针p的初始位置指向h的next指针(h->next)。 3. 判断p指针是否结束,如果结束,则返回max,否则做下一步。 4. 判断max是否小于p->s,如果小于,则max取p->s,否则不替换。 5. 取p->next赋值给p(取下一结点位置给p),转3继续。 参考答案: double fun( STREC *h ) { double max=h->s; STREC *p; p=h->next; while(p) { if(p->s>max ) max=p->s; p=p->next; } return max; } STREC * creat( double *s) { STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC));p->s=0; while(i { q=(STREC*)malloc(sizeof(STREC)); q->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"); }
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |