1.如何定义一个结构体:
#include<stdio.h>
struct student
{
int chengji;
char name[128];
};
int main()
{
struct student stu={98,"yl"};
printf("%s:%d\n",stu.name,stu.chengji);
return 0;
}
结果:
yl:98
2.结构体指针。
结构图指针要注意用-》 还要注意野指针。注意是否有空间。否则会造成段错误。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct student
{
int chengji;
char *name; //注意要开辟空间
};
int main()
{
struct student *stu; //注意要开辟空间。
stu=(struct student *)malloc(sizeof(struct student));
memset(stu,'\0',sizeof(struct student));
stu->name=(char *)malloc(sizeof(char));
memset(stu->name,'\0',sizeof(char)); //初始化
stu->chengji=98;
strcpy(stu->name,"yl");
printf("%s:%d\n",stu->name,stu->chengji);
return 0;
}
结果:
yl:98
结构体指针成绩案例:
#include<stdio.h>
#include<stdlib.h>
struct student
{
char *name;
int chengji;
};
struct student* inputStudent(int len)
{
int i;
struct student *stu;
stu=(struct student *)malloc(len*sizeof(struct student));
for(i=0;i<len;i++){
stu->name=(char *)malloc(sizeof(char));
printf("please input %d ge student name!\n",i+1);
scanf("%s",stu->name);
printf("please input %d ge student chengji\n",i+1);
scanf("%d",&stu->chengji);
stu++;
}
return stu-len;
}
void printflink(struct student *stu,int len)
{
int i;
for(i=0;i<len;i++){
printf("di %d student name:%s chengji:%d\n",i+1,stu->name,stu->chengji);
stu++;
}
}
struct student *maxstu(struct student *stu,int len)
{
struct student *max;
int i;
max=stu;
for(i=0;i<len;i++){
if(max->chengji<stu->chengji){
max=stu;
}
stu++;
}
return max;
}
struct student *minstu(struct student *stu,int len)
{
struct student *min;
int i;
min=stu;
for(i=0;i<len;i++){
if(min->chengji>stu->chengji){
min=stu;
}
stu++;
}
return min;
}
int getaver(struct student *stu,int len)
{
int i;
int sum=0;
for(i=0;i<len;i++){
sum+=stu->chengji;
stu++;
}
return (float)sum/len;
}
int main()
{
int len;
struct student *max=NULL;
struct student *min=NULL;
printf("please input len\n");
scanf("%d",&len);
struct student *pstu=inputStudent(len);
printflink(pstu,len);
max=maxstu(pstu,len);
printf("max: student name:%s,chengji:%d\n",max->name,max->chengji);
min=minstu(pstu,len);
printf("min: student name:%s,chengji:%d\n",min->name,min->chengji);
float aver=getaver(pstu,len);
printf("aver: %f\n",aver);
}
结果:
please input len
2
please input 1 ge student name!
yl
please input 1 ge student chengji
99
please input 2 ge student name!
ty
please input 2 ge student chengji
89
di 1 student name:yl chengji:99
di 2 student name:ty chengji:89
max: student name:yl,chengji:99
min: student name:ty,chengji:89
aver: 94.000000