七天学会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语言的依据哦,请大家期待下一个专栏~

相关推荐
心仪久了会沦陷37 分钟前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方41 分钟前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
悠仁さん2 小时前
【C++】哈希表
c++·算法·散列表
地平线开发者2 小时前
点云算法整理与常用计算模块:从数据到模型,再到工程与量化
算法·自动驾驶
Severus_black4 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
噢,我明白了4 小时前
JAVA中的一些基础应用知识点
java·开发语言
武子康4 小时前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
时间的拾荒人5 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
秋天的怀念_David5 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
敲上瘾5 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3