教你如何用结构体指针玩转成绩
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(stru艘早祓胂ct 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、运行程序