结构体的应用

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值