教你如何用结构体指针玩转成绩
1、struct student* initstuscores(int len)
{
struct student
{
int score;
char *name;
};

2、int main()
{
int len = 0;
printf("请输入总人数:\n");
scanf("%d",&len);//scanf为什么要加&取地址,因为不加的话,它只是将0改了而已,没意义,加了之后能从地址那里直接改掉零

3、struct student*min = NULL;
struct student*max = NULL;
struct student *pstus = initstuscores(len);
printmes(pstus, len);
min = findminstu(pstus,len);
max = findmaxstu(pstus,len);

4、printf("max:%s,%d\nmin:%s,%d\ngetaverage=%f\n",max->name,max->score,min->name,min->score,
getaverage(pstus,len));
if(findsomeoneforname(pstus,len,"zhangsan")==1){
printf("恭喜,找到了\n");
}else{
printf("没有此人\n");
}

5、int i;
struct student *p = (struct student *)malloc(len*sizeof(struct student));//在堆上开辟空间,函数结束调用也不会释放
for(i=0;i<len;i++){
printf("请输入名:\n");
p->name = (char *)malloc(128);
scanf("%s",p->name);
printf("请输入分数:\n");
scanf("%d",&(p->score));
p++;
}
return p-len;
}

6、void printmes(struct student *p, int len)
{
int i;
for(i=0;i<len;i++){
printf("名字:%s,分数:%d\n",p->name,p->score);
p++;
}
}

7、struct student* findmaxstu(struct student *p, int len)
{
int i;
struct student*max;
max = p;
for(i=0;i<len;i++){
if(max->score < p->score){
max = p;
}
p++;
}
return max;
}
struct student* findminstu(struct student *p, int len)
{
int i;
struct student*min;
min = p;
for(i=0;i<len;i++){
if(min->score > p->score){
min = p;
}
p++;
}
return min;
}

8、int findsomeoneforname(struct student *p,int len,char *name)
{
int i;
for(i=0;i<len;i++){
if(strcmp(name,p->name)==0){
return 1;
}
p++;
}
return -1;
}
float getaverage(struct student *p, int len)
{
int i;
int total = 0;
for(i=0;i<len;i++){
total += p->score;
p++;
}
return (float)total/len;
}

9、运行程序
