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

相关推荐
一点媛艺43 分钟前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风1 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生2 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功2 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
pianmian12 小时前
python数据结构基础(7)
数据结构·算法
闲晨2 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程2 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
UestcXiye3 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
Chrikk3 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*3 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go