2011年计算机二级C语言十套上机题15
3. 编程题 N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。 注意:部分源程序给出如下。 请勿改动主函数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)); 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!=NULL); printf(" "); } main() { double s[N]={56,89,76,95,91,68,75,85}, min; STREC *h; h=creat(s); outlist(h); min=fun(h); printf("min=%6.1f ",min); } 答案及评析: double fun(STREC *h) { double min=h->s; while(h!=NULL) /*通过循环找到最低分数*/ {if(min>h->s) min=h->s; h=h->next; } return min; }【解析】在本题中,h为一个指向结构体的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符"->"。由于是链表,所以要使h逐一往后移动,使用的是h=h->next。 相关资料 |