C语言结构体

结构体的概念

结构体:是由一系列具有相同类型或不同类型的数据构成的数据集合(是一种数据类型

结构体的定义
关键字:struct

定义语法:strut 结构体名
{
成员列表
};

访问成员的规则

1、普通变量通过“.”来访问成员,例如Tom.num
2、结构体指针变量通过“->”访问成员,例如p->id

结构体变量的定义,三种方法

1、先声明类型,再定义变量

//声明结构体
struct student{
    int num;
    int c_score;
    int ps_score;
    float avg;
};
int main()
{
    int c=0;
    //struct student是类型名,Tom是变量名
    struct student Tom={10,98,90,95.5};//定义变量
    c=50;
    Tom.num=12;
    Tom.c_score=95;
    Tom.ps_score=92;
    Tom.avg=96.5;
    printf("序号:%d\n",Tom.num);
    printf("C语言成绩:%d\n",Tom.c_score);
    printf("PS成绩:%d\n",Tom.ps_score);
    printf("平均分:%f\n",Tom.avg);
    return 0;
}

2、声明结构体的同时,定义变量

//声明结构体
struct student{
    int num;
    int c_score;
    int ps_score;
    float avg;
}Tom;//Tom是结构体变量

3、省略结构体名,直接定义结构体变量

//声明结构体
struct {
    int num;
    int c_score;
    int ps_score;
    float avg;
}Tom;//Tom是结构体变量

typedef的使用

typedef 已有的类型 别名
例如,typedef int TYPE
TYPE与int等价,如TYPE a=int a

typedef的使用
定义一个结构体,包含学生的信息(序号、三门课成绩、平均分),
从键盘输入学生的信息,计算平均分

#include <stdio.h>
#include <stdlib.h>
typedef int TYPE;
#define SIZE 3
typedef struct student{
    int num;
    int score[SIZE];
    float avg;
}STU;//STU是结构体struct student的别名
int main()
{
    STU Tom;//相当于struct student Tom;
    Tom.avg=0;
    printf("请输入序号:");
    scanf("%d",&Tom.num);
    for(int i=0;i<SIZE;i++)
    {
        printf("请输入学生第%d门的成绩:",i+1);
        scanf("%d",&Tom.score[i]);
        Tom.avg+=Tom.score[i];
    }
    Tom.avg=Tom.avg/SIZE ;//求平均分
    printf("我的序号是:%d\n",Tom.num);
    for(int i=0;i<3;i++)
    {
        printf("第%d门的成绩是:%d\n",i+1,Tom.score[i]);
    }
    printf("平均分为:%f\n",Tom.avg);
    return 0;
}

结构体数组的定义

1、先声明,后定义 ,语法:struct 结构体名 数组名【数组长度】:
struct 结构体名
{
成员变量
};
在这里插入图片描述

结构体数组的使用
有n个学生的信息,包括学号、成绩,找出成绩的最高的学生,并输出该学生的信息

#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct student{
    int num;
    int score;
}STU;
int main()
{
    STU class3[N]={{10,90},{14,87},{12,96}};
    //存放最高分所在的结构体数组元素下标
    int max=0;
    for(int i=0;i<N;i++)
    {
        if(class3[i].score>class3[max].score)
            max=i;
    }
    printf("成绩最高的学生:\n");
    printf("序号是:%d\n",class3[max].num);
    printf("序号是:%d\n",class3[max].score);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值