七天学会C语言-第七天(结构体)

1.定义结构体

例 1:把一个学生的信息(包括学号、姓名、性别、住址等 4 项信息) 放在一个结构体变量中,然后输出这个学生的信息。

c 复制代码
#include <stdio.h>

struct Student {
    int student_id;
    char name[30];
    char gender;
    char address[60];
};

int main() {
  
    struct Student a = {1, "Houge", 'M', "Hua Guo Shan"};

    printf("学号: %d\n", a.student_id);
    printf("名字: %s\n", a.name);
    printf("性别: %c\n", a.gender);
    printf("住址: %s\n", a.address);

    return 0;
}

运行结果:

例 2:输入两个学生的学号、姓名和成绩,输出成绩较高者的学号、姓名和成绩。若二者相等,则输出两个学生的全部信息。

c 复制代码
#include <stdio.h>

struct student
{
    int xuehao;
    char name[30];
    float chengji;
} a, b;

int main()
{
    printf("请输入第一个学生的学号、姓名和成绩:\n");
    scanf("%d,%s,%f", &a.xuehao, a.name, &a.chengji);
    printf("请输入第二个学生的学号、姓名和成绩:\n");
    scanf("%d,%s,%f", &b.xuehao, b.name, &b.chengji);
    printf("成绩较高者的信息如下:\n");
    
    if (a.chengji > b.chengji)
        printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
    else if (a.chengji < b.chengji)
        printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
    else
    {
        printf("%d\t%s\t%f\n", a.xuehao, a.name, a.chengji);
        printf("%d\t%s\t%f\n", b.xuehao, b.name, b.chengji);
    }

    return 0;
}

运行结果:

2.结构体数组

例 1:有三名学生的 3 项信息:学号、姓名和成绩。请编程按成绩由高到低输出各学生的信息。

c 复制代码
#include <stdio.h>

struct student
{
    int xuehao;
    char name[30];
    float chengji;
} xuesheng[3] = {{001, "HouBoShi", 99}, {002, "ShaPaoZi", 20}, {003, "ShaLeBaJi", 90}};

int main()
{
    struct student linshi;

    int i, j;
    for (i = 0; i < 2; i++)
    {
        for (j = i + 1; j < 3; j++)
        {
            if (xuesheng[j].chengji > xuesheng[i].chengji)
            {
                linshi = xuesheng[i];
                xuesheng[i] = xuesheng[j];
                xuesheng[j] = linshi;
            }
        }
    }

    printf("排序后的各学生信息如下:\n");
    for (i = 0; i < 3; i++)
    {
        printf("%d\t%s\t%f\n", xuesheng[i].xuehao, xuesheng[i].name, xuesheng[i].chengji);
    }

    return 0;
}

运行结果:

3.使用结构体变量与指针变量

例 1:键盘输入五名学生的信息(包括学号、姓名和 2 门课程的成绩),并输出平均分最高的学生的信息。

c 复制代码
#include <stdio.h>

struct student
{
    int xuehao;
    char name[30];
    float fen1;
    float fen2;
} sheng[5];

int main()
{
    struct student max(struct student a[]);
    struct student xueba;
    int i;

    for (i = 0; i <= 4; i++)
    {
        printf("请输入第%d 名学生的学号、姓名和 2 门成绩:\n", i + 1);
        scanf("%d,%s,%f,%f", &sheng[i].xuehao, sheng[i].name, &sheng[i].fen1, &sheng[i].fen2);
    }

    xueba = max(sheng);

    printf("平均分最高的学生的信息如下:\n");
    printf("学号:%d\n 姓名:%s\n2 门成绩:%f,%f\n", xueba.xuehao, xueba.name, xueba.fen1, xueba.fen2);

    return 0;
}

struct student max(struct student a[])
{
    float pingjunfen[5];
    int i, zuigao;

    for (i = 0; i <= 4; i++)
    {
        pingjunfen[i] = (a[i].fen1 + a[i].fen2) / 2;
    }

    for (zuigao = 0, i = 1; i <= 4; i++)
    {
        if (pingjunfen[zuigao] < pingjunfen[i])
        {
            zuigao = i;
        }
    }

    return (a[zuigao]);
}

运行结果:

4.结构体变量做函数参数

例 1:把一个学生的信息(包括学号、姓名、性别 3 项信息)放在一个结构体变量中,然后输出这个学生的信息。

c 复制代码
#include <stdio.h>

struct student
{
    int xuehao;
    char name[30];
    char xingbie;
} a = {001, "Houge", 'M'};

int main()
{
    struct student *p;
    p = &a;

    printf("学号:%d\n 姓名:%s\n 性别:%c\n", p->xuehao, p->name, p->xingbie);
    return 0;
}

运行结果:

例 2:有三名学生的 3 项信息:学号、姓名和成绩。请编程按成绩由高到低输出各学生的信息。

c 复制代码
#include <stdio.h>

struct student
{
    int xuehao;
    char name[30];
    float chengji;
} xuesheng[3] = {{001, "HouBoShi", 99}, {002, "ShaPaoZi", 20}, {003, "ShaLeBaJi", 90}};

int main()
{
    struct student linshi, *p;
    p = &xuesheng[0];
    int i, j;
    for (i = 0; i < 2; i++)
    {
        for (j = i + 1; j < 3; j++)
        {
            if ((*(p + j)).chengji > (*(p + i)).chengji)
            {
                linshi = *(p + i);
                *(p + i) = *(p + j);
                *(p + j) = linshi;
            }
        }
    }

    printf("排序后的各学生信息如下:\n");
    for (i = 0; i < 3; i++)
    {
        printf("%d\t%s\t%f\n", (*(p + i)).xuehao, (*(p + i)).name, (*(p + i)).chengji);
    }
    return 0;
}

运行结果:

七天完结,本专栏只是根据所学进行整合,可不能作为学会C语言的依据哦,请大家期待下一个专栏~

相关推荐
微学AI1 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管1 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
月疯1 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡1 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯2 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang2 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
韭菜炒鸡肝天2 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9852 小时前
高进度算法模板速记(待完善)
java·前端·算法
小羊先生car2 小时前
RTOS-F429-HAL-绝对延时和相对延时(2026/7/31)
c语言·rtos
Aaron - Wistron3 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#