C 语言基础教程(我的C之旅开始了)[五]

下面详细讲解“C语言基础教程(我的C之旅开始了)[五]”的完整攻略。

标题

C 语言基础教程(我的 C 之旅开始了)[五]

概述

本次教程主要涵盖C语言中的结构体和联合体。在学习本篇教程前,需要先掌握C语言中的变量、循环、条件语句、指针等基础知识。

结构体

结构体是 C 语言中自定义的一种数据类型,通过结构体可以将多个不同类型的变量组合成一个整体,方便统一管理和使用。结构体定义的方式如下:

struct [结构体名]
{
    [成员变量1类型] [成员变量1名];
    [成员变量2类型] [成员变量2名];
    ...
    [成员变量n类型] [成员变量n名];
};

其中,[成员变量]可以是其他任意合法的数据类型,例如 int、char、float等。下面是一个结构体的示例:

struct student
{
    int id;
    char name[20];
    int age;
    float score;
};

结构体的使用

定义结构体之后,可以通过以下方式声明结构体变量:

struct student stu1;
struct student stu2 = {1, "张三", 18, 89.5};
struct student stu3 = {.name = "李四", .score = 77.5};

通过点运算符可以访问结构体的成员变量,例如:

stu1.id = 1;
strcpy(stu1.name, "张三");
stu1.age = 18;
stu1.score = 89.5;

结构体还可以作为函数的形参和返回值,例如:

struct student getStudent(int id, char name[], int age, float score)
{
    struct student stu;
    stu.id = id;
    strcpy(stu.name, name);
    stu.age = age;
    stu.score = score;
    return stu;
}

联合体

联合体是一种特殊的结构体,它所有成员都是从同一块内存中分配的,因此联合体只能存储其中任意一个成员。联合体定义的方式如下:

union [联合体名]
{
    [成员变量1类型] [成员变量1名];
    [成员变量2类型] [成员变量2名];
    ...
    [成员变量n类型] [成员变量n名];
}

下面是一个联合体的示例:

union number
{
    int i;
    float f;
};

可以通过以下方式声明联合体变量并访问:

union number n;
n.i = 10;
printf("%d\n", n.i);
n.f = 3.14;
printf("%f\n", n.f);
printf("%d\n", n.i);

这段代码中,先将 n.i 赋值为 10,然后将 n.f 赋值为 3.14。由于 n 的内存空间只有 4 个字节,所以在将 n.f 的值赋给 n.i 时,n.i 的值会发生改变。

示例说明

示例 1

假设需要设计一个学生成绩管理系统,每个学生有学号、姓名、年龄和成绩四个属性。定义一个结构体,然后通过动态内存分配的方式创建一个包含 3 个学生信息的数组,然后输出这个数组中每个学生的信息和总成绩。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    int id;
    char name[20];
    int age;
    float score;
};

int main()
{
    struct student *stuArr;
    int i, n = 3;
    float sum = 0;
    stuArr = (struct student *)malloc(sizeof(struct student) * n);
    for (i = 0; i < n; i++)
    {
        printf("请输入第 %d 个学生的学号、姓名、年龄和成绩:", i + 1);
        scanf("%d %s %d %f", &stuArr[i].id, stuArr[i].name, &stuArr[i].age, &stuArr[i].score);
        sum += stuArr[i].score;
    }
    for (i = 0; i < n; i++)
    {
        printf("第 %d 个学生的信息:\n", i + 1);
        printf("学号:%d\n", stuArr[i].id);
        printf("姓名:%s\n", stuArr[i].name);
        printf("年龄:%d\n", stuArr[i].age);
        printf("成绩:%0.2f\n", stuArr[i].score);
    }
    printf("总成绩:%0.2f\n", sum);
    free(stuArr);
    return 0;
}

运行结果:

请输入第 1 个学生的学号、姓名、年龄和成绩:1001 张三 18 89.5
请输入第 2 个学生的学号、姓名、年龄和成绩:1002 李四 19 77.5
请输入第 3 个学生的学号、姓名、年龄和成绩:1003 王五 20 94.0
第 1 个学生的信息:
学号:1001
姓名:张三
年龄:18
成绩:89.50
第 2 个学生的信息:
学号:1002
姓名:李四
年龄:19
成绩:77.50
第 3 个学生的信息:
学号:1003
姓名:王五
年龄:20
成绩:94.00
总成绩:261.00

示例 2

假设需要设计一个数据类型转换程序,实现将整数、浮点数、字符等各种数据类型的值转换成字符串类型。由于不同类型的值要求显示的格式不同,因此可以使用联合体来存储各种类型的值。下面是这个程序的基本思路:

  1. 定义一个 union 类型 str,其中包含一个 char 数组 strArr 和一个整型变量 len,分别用来存储字符串和字符串的长度。
  2. 定义一个函数,它根据传入的数据类型将其值转换成字符串并存储到 str 变量中。具体转换方法如下:
  3. int 类型:使用 sprintf 函数将其转换为字符串。
  4. float 类型:使用 sprintf 函数将其转换为字符串,但需要指定格式为 "%.2f",表示保留 2 位小数。
  5. char 类型:直接将其赋值给 strArr 数组,同时将 len 变量赋值为 1。
  6. 其他类型:提示用户输入一个字符串,并将其赋值给 strArr 数组,并将 len 变量设为字符串的长度。
  7. 在主函数中分别测试各种类型的值的转换结果。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXLEN 100

union str
{
    char strArr[MAXLEN];
    int len;
};

void convertToInt(int num, union str *s)
{
    sprintf(s->strArr, "%d", num);
    s->len = strlen(s->strArr);
}

void convertToFloat(float num, union str *s)
{
    sprintf(s->strArr, "%.2f", num);
    s->len = strlen(s->strArr);
}

void convertToChar(char c, union str *s)
{
    s->strArr[0] = c;
    s->len = 1;
}

void convertToString(char *str, union str *s)
{
    strcpy(s->strArr, str);
    s->len = strlen(s->strArr);
}

int main()
{
    union str s;
    int num = 123;
    convertToInt(num, &s);
    printf("%s\n%d\n\n", s.strArr, s.len);
    float fnum = 3.1415926;
    convertToFloat(fnum, &s);
    printf("%s\n%d\n\n", s.strArr, s.len);
    char c = 'a';
    convertToChar(c, &s);
    printf("%s\n%d\n\n", s.strArr, s.len);
    char str[MAXLEN];
    printf("请输入一个字符串:");
    scanf("%s", str);
    convertToString(str, &s);
    printf("%s\n%d\n\n", s.strArr, s.len);
    return 0;
}

运行结果:

123
3

3.14
5

a
1

请输入一个字符串:hello
hello
5

总结

本篇教程介绍了 C 语言中的结构体和联合体,讲解了它们的定义、声明和使用方法,并通过两个示例展示了它们在实际程序中的应用。同时,还向大家推荐了动态内存分配的方法。希望大家能够掌握这些知识并在实践中进行多次练习,提升自己的编程能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 语言基础教程(我的C之旅开始了)[五] - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言编写获取Linux本地目录及本机信息的小程序实例

    下面是详细讲解“C语言编写获取Linux本地目录及本机信息的小程序实例”的完整攻略: 1. 程序的概要 该程序主要通过C语言来获取Linux本地目录以及本机信息,包括以下功能: 获取当前程序所在目录 获取主机名和IP地址 获取系统空闲内存大小 获取磁盘剩余空间大小 获取系统时间 2. 程序实现步骤 2.1 获取当前程序所在目录 要获取当前程序所在目录,可以使…

    C 2023年5月23日
    00
  • html网页中使用希腊字母的方法

    要在HTML网页中使用希腊字母,可以使用HTML实体或Unicode字符。 使用HTML实体: 打开HTML编辑器或文本编辑器,并开始编写HTML文件。 需要使用希腊字母的地方,使用以下形式的HTML实体:&entity_name;,其中entity_name是预定义的实体名称。 接下来是几个常见的希腊字母实体: α: α β: &bet…

    C 2023年5月22日
    00
  • 三星SLC410W打印机怎么清除纸盘中卡纸?

    清除三星SLC410W打印机纸盘卡纸,可以按照以下步骤进行操作: Step 1:确认纸盘是否卡纸 首先,需要确认打印机是否确实存在纸张卡纸的情况,可以通过以下方式进行判断: 打开打印机的纸盘抽屉,检查是否有纸张卡在了进纸口或者出纸口。 检查打印机的显示屏是否显示有卡纸的提示信息。 检查打印机是否出现异常的声音或者闪烁的LED灯。 如果以上任何一种情况出现,就…

    C 2023年5月23日
    00
  • 详解SQL Server 中 JSON_MODIFY 的使用

    详解SQL Server 中 JSON_MODIFY 的使用 简介 在 SQL Server 2016 中,引入了 JSON 数据类型和一些新的 JSON 函数,其中之一是 JSON_MODIFY,它是一种修改 JSON 数据的函数。 在本文中,我们将详细介绍 JSON_MODIFY 函数的使用方法,包括语法、参数和示例。 语法 JSON_MODIFY 函数…

    C 2023年5月23日
    00
  • 华为揽阅M2平板电脑做工怎么样?华为揽阅M2 10.0指纹平板拆机全过程图解

    华为揽阅M2是一款高性能的平板电脑,其外观和内部设计都十分精细,以下是关于此设备做工的详细分析以及拆机攻略。 华为揽阅M2平板电脑做工分析 外观设计 华为揽阅M2采用了一块10.1英寸的IPS触控屏幕,屏幕分辨率为1920*1200像素,支持10点触控和电磁笔输入。整个设备的外观采用了金属材质,手感舒适,整机重量为约500克。 在机身的四周布置了一些按钮、接…

    C 2023年5月22日
    00
  • C语言入门篇–学习选择,if,switch语句以及代码块

    C语言入门篇–学习选择,if,switch语句以及代码块 在C语言中,选择结构是非常重要的程序控制结构之一,它允许程序员根据条件执行不同的代码块。在本篇文章中,我们将学习选择、if、switch语句以及代码块的使用方法。 选择 选择是一种程序控制结构,它允许程序员根据条件执行不同的代码块。在C语言中,有两种选择结构:if语句和switch语句。 if语句 …

    C 2023年5月23日
    00
  • C++实现停车场管理系统的示例代码

    首先我们需要了解C++实现停车场管理系统需要哪些功能。一般来说,停车场管理系统需要实现以下几个功能: 车辆入场、出场登记,记录车辆基本信息。 管理停车场内的车辆信息,如车位数量、车位状态、收费标准等。 计算车辆停留时间和收费金额。 下面我会针对这些功能,提供一个示例代码: 功能1:车辆入场、出场登记 首先,需要定义一个车辆信息的结构体: // 车辆信息结构体…

    C 2023年5月23日
    00
  • Linux中使用VS Code编译调试C++项目详解

    下面我将详细讲解如何在Linux中使用VS Code编译调试C++项目。 准备工作 安装VS Code 首先,我们需要安装一个文本编辑器,这里我们选择VS Code。可以到官网下载 Visual Studio Code。 下载完成后,解压安装文件并将其保存在可执行路径中(例如/usr/local/bin),使其能够在终端中运行。 安装C++编译器 接下来,我…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部