当前位置:首页 > 全国计算机等级考试二级C语言资料(机试) - 图文
int s; } STREC;
void fun( STREC a[] ) { }
main()
{ STREC s[N]={{\ {\ {\ {\ int i;FILE *out ; fun( s );
printf(\ for(i=0;i { if( (i)%4==0 )printf(\ printf(\ } printf(\ out = fopen(\ for(i=0;i { if( (i)%4==0 && i) fprintf(out, \ fprintf(out, \ } fprintf(out,\ fclose(out) ; } 【参考答案】 int fun (STREC a[]) { int i,j; STREC t; for(i=0;i { t=a[i]; /*按分数的高低排列学生的记录,高分在前*/ a[i]=a[j]; a[j]=t; } } ? 题型三:链表 3、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成绩是:85,76,69,85,91,72,64,87, 则平均分应当是:78.625。 #include 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; } 共 30 页 outlist( STREC *h) { STREC *p; p=h->next; printf(\ do /*该循环顺序访问各节点数据域的值,输出各成绩*/ { printf(\p=p->next; } while(p!=0); printf(\} main() { double s[N]={85,76,69,85,91,72,64,87},ave; void STREC *h; h=creat( s ); outlist(h); ave=fun( h ); printf(\} 【参考答案】 double fun(STREC *h) { double av=0.0; STREC *p=h->next; /*p直接指向\头节点\的下一个节点,即第一个成绩*/ while(p!=NULL) {av=av+p->s; /*求总分数*/ p=p->next; } return av/N; /*返回平均值*/ } 【解题思路】(1)本题是考查链表问题,所以,一定要弄清表示初始指针变量p指向下一个\节点\的方法及表示结束的判断。 (2)因为\头结点\中没有数值,所以程序中让p直接指向\头节点\的下一个节点,使用语句STREC *p=h->next,当然也可将p一开始指向\头节点\,即STREC *p=h, 第 30 页 然后再p=p->next。 共 30 页
共分享92篇相关文档