14.12 设有以下结构类型说明:struct stud{char num[5],name[10];···};请编写:
(1)函数readrec:把30名学生的学号、姓名、西乡成绩以及平均分放在一个结构体数组中,学生的学号、姓名和西乡成绩由键盘输入,然后计算出平均分放在结构体对应的域中。 (2)函数writerec:输出30名学生的记录。 (3)main函数调用readrec函数和writerec函数,实现全部程序功能(注:不允许使用外部变量,函数之间的数据全部使用参数传递)。
#include<stdio.h>
#include<stdlib.h>
#define N 30
void readrec(struct stud *);
void writerec(struct stud *);
struct stud
{ char num[5],name[10];
int s[4];
double ave;
};
void readrec(struct stud *p)
{ int i,j;
for(i=0;i<N;i++)
{ p[i].ave=0;
printf("请输入学生的学号、姓名:");scanf("%s %s",p[i].num,p[i].name);
printf("请输入学生的四项成绩:");
for(j=0;j<4;j++){scanf("%3d",&p[i].s[j]);p[i].ave+=p[i].s[j]/4.0;}
}
}
void writerec(struct stud *p)
{ int i,j;
for(i=0;i<N;i++)
{ printf("学生的学号、姓名为:%s %s\n",p[i].num,p[i].name);
printf("学生的四项成绩:");
for(j=0;j<4;j++)printf("%3d",p[i].s[j]);
printf("\n平均分:%lf\n",p[i].ave);
}
}
main()
{ struct stud p[N];
readrec(p);
writerec(p);
}
14.13 已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整形。请分别编写函数,在链表中查找数据域最大的结点:
(1)由函数值返回找到最大值。 (2)由函数值返回最大值所在结点的地址值。
#include<stdio.h>
#include<stdlib.h>
struct slist
{ int data;
struct slist *next;
};
typedef struct slist SLIST;
SLIST *creatslist()
{ int c;
SLIST *h,*s,*r;
h=(SLIST *)malloc(sizeof(SLIST));
r=h;
scanf("%d",&c);
while(c!=-1)
{ s=(SLIST *)malloc(sizeof(SLIST));
s->data=c;
r->next=s;
r=s;
scanf("%d",&c);
}
r->next='\0';
return h;
}
int maxaval(SLIST *head)
{ SLIST *p,*pmax;int m;
p=head->next;
m=p->data;pmax=p;
for(p=p->next;p;p=p->next)
{ if(m<p->data){m=p->data;pmax=p;}
}
return m;
}
SLIST *maxadd(SLIST *head)
{ SLIST *p,*pmax;int m;
p=head->next;
m=p->data;pmax=p;
for(p=p->next;p;p=p->next)
{ if(m<p->data){m=p->data;pmax=p;}
}
return pmax;
}
main()
{ SLIST *head,*pmax;int m;
head=creatslist();
m=maxaval(head);
printf("m=%d",m);
pmax=maxadd(head);
printf("pmax=%d\n",pmax);
}
|