第八章
以下叙述中正确的是()
若有以下语句
typedefstruct S
{int g; char h;}T;
可用T定义结构体变量
T是struct S类型的变量
可用S定义结构体变量
S是struct类型的变量
当定义一个结构体变量时,系统分配给它的内存是( )。
结构体中最后一个成员所需内存量
成员中占内存量最大的容量
结构体中第一个成员所需内存量
各成员所需内存量的总和
若有以下定义:
struct link
{
int data;
struct link *next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向 c。
则能把c插入到a和b之间形成新的链表的语句是( ) A.p->next=&c;q->next=p->next;
p.next=q;q.next=p.next;
p->next=q; q->next=&b;
a.next=c; c.next=b;
/*N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。 请编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语 句。
试题程序:*/
#include
#include
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun(STREC *h)
{
/***********Begin***************/
/***********End**************/
}
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("->%4.1f ",p->s);
p=p->next; /*输出各成绩*/
}
while(p!=NULL);
printf("\n\n");
}
void main()
{
FILE *wf;
double s[N]={85,76,69,85,91,72,64,87},ave;
STREC *h;
h=creat(s);
outlist(h);
ave=fun(h);
printf("ave=%6.3f\n ",ave);
/******************************/
wf=fopen("debug\\out25.dat","w");
fprintf(wf,"%6.3f\n",ave);
fclose(wf);
/*****************************/
}
【参考代码】
double av=0.0;
STREC *p=h->next;
/*p直接指向"头节点"的下一个节点,即第一个成绩*/
while(p!=NULL)
{av=av+p->s; /*求总分数*/
p=p->next;
}
return av/N; /*返回平均值*/
/*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写 函数fun,该函数的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n 传回,平均分通过函数值返回。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干 语句。
试题程序: */
#include
# define N 12
typedef struct
{ char num[10];
double s;
} STREC;
double fun (STREC *a,STREC *b, int *n)
{
/*************Begin************/
/*************End*************/
}
void main()
{
FILE *wf;
STREC s