c语言 结构体 简单实例

news2024/11/25 19:27:32

结构体

简单例子

要求:
结构体保存学生信息操作

代码
#include <stdio.h>

//定义结构体
struct student{
    int ID;
    char name[20];
    char sex;
    char birthday[8];
    int grade;
};

int main(){
    int number;
    printf("请输入学生个数:");
    scanf("%d", &number);
    //声明结构体变量
    struct student stu[number];
    //输入数据
    for (int i=0; i<number; ++i){
        printf("请输入(每个数据用空格隔开):");
        scanf("%d %s %s %s %d", &stu[i].ID, &stu[i].name, &stu[i].sex, &stu[i].birthday, &stu[i].grade);
    }
    printf("--------------------------------\n");
    for (int i=0; i<number; ++i){
        printf("学号:%d\t姓名:%s\t性别:%c\t  出生日期:%s\t成绩:%d\n",stu[i].ID, stu[i].name, stu[i].sex, stu[i].birthday, stu[i].grade);
    }
    return 0;
}
运行效果

在这里插入图片描述

课堂作业

要求:
对结构体操作:输入数据,查找数据,插入数据,删除数据,合并数据比进行排列输出

代码
#include <stdio.h>
#define MAX_SIZE 100

typedef struct {
    int data[MAX_SIZE];
    int length;
} SeqList;

//初始化操作
void init(SeqList *list) {
    list->length = 0;
}

//插入操作
void insert(SeqList *list, int pos, int value) {
    if (pos < 1 || pos > list->length + 1) {
        printf("插入位置错误\n");
        return;
    }

    if (list->length >= MAX_SIZE) {
        printf("顺序表已满,无法插入\n");
        return;
    }

    for (int i = list->length; i >= pos; i--) {
        list->data[i] = list->data[i - 1];
    }

    list->data[pos - 1] = value;
    list->length++;
}

//查找操作
int find(SeqList *list, int value) {
    for (int i = 0; i < list->length; i++) {
        if (list->data[i] == value) {
            return i;
        }
    }
    return -1;
}

//展示操作
void display(SeqList *list) {
    for (int i = 0; i < list->length; i++) {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

//删除操作
void del(SeqList *list, int del_value){
    if (list->length==0){
        printf("线性表为空!\n");
        return;
    }

    int temp=0;
    for(int i=0; i<list->length; i++){
        if(list->data[i] != del_value){
            list->data[temp] = list->data[i];
            temp++;
        }
    }
    list->length = temp;

}

//合并操作,降序排列
void merge_sort(SeqList *L_A, SeqList *L_B, SeqList *L_C){
    int k=0;

    for (int i = 0; i < L_A->length; i++) {
        L_C->data[k] = L_A->data[i];
        k++;
        L_C->length++;
    }

    for (int j = 0; j < L_B->length; j++) {
        L_C->data[k] = L_B->data[j];
        k++;
        L_C->length++;
    }

    //冒泡排序
    for(int x=0; x <= L_C->length -1; x++){
        for(int y=0; y <= L_C->length-x; y++)
        {
            if(L_C->data[y] < L_C->data[y+1])
            {
                int temp = L_C->data[y];
                L_C->data[y] = L_C->data[y+1];
                L_C->data[y+1] = temp;
            }
        }
    }
}

//升序排列
void merge_ascending(SeqList *L_C, SeqList *L_D){
    int i=0;
    for(int k=L_C->length-1; k>=0; k--){
        L_D->data[k] = L_C->data[i];
        L_D->length++;
        i++;
    }
}

int main() {
    //声明结构体变量
    SeqList L_A;
    SeqList L_B;
    SeqList L_C;
    SeqList L_D;
    //初始化
    init(&L_A);
    init(&L_B);
    init(&L_C);
    init(&L_D);

    // 用户输入数据
    printf("请输入数据(每输入一个数据后回车,输入777可结束):\n");
    for (int i = 0; i < MAX_SIZE; i++) {
        int data_value;
        scanf("%d", &data_value);
        if(data_value == 777){
            break;
        }
        L_A.data[i] = data_value;
        L_A.length++;
    }

    // 默认查找数据 4,并输出数据4的位置
    int index = find(&L_A, 4);
    if (index != -1) {
        printf("找到数据 4,位置为:%d\n", index + 1);
    } else {
        printf("未找到数据 4\n");
    }

    // 在第四个位置上插入数据 100
    int in_value;
    printf("请输入要插入的数字:\n");
    scanf("%d", &in_value);
    insert(&L_A, index+1, in_value);

    // 展示数据表结果
    display(&L_A);

    // 删除操作
    printf("请输入删除的数字:\n");
    int del_value;
    scanf("%d",&del_value);
    del(&L_A, del_value);

    // 展示数据表结果
    display(&L_A);

    // 输入第二个数据表并进行合并操作
    printf("请输入第二个数据表的数据,(每输入一个数据后回车,输入777可结束)\n");
    for (int i = 0; i < MAX_SIZE; i++) {
        int data_value;
        scanf("%d", &data_value);
        if(data_value == 777){
            break;
        }
        L_B.data[i] = data_value;
        L_B.length++;
    }
    printf("第二个数据表的数据为:\n");
    display(&L_B);
    printf("\n");

    //降序排列
    printf("降序排列为:\n");
    merge_sort(&L_A, &L_B, &L_C);
    //展示数据表结果
    display(&L_C);

    printf("\n");
    //升序排列
    printf("升序排列为:\n");
    merge_ascending(&L_C, &L_D);
    // 展示数据表结果
    display(&L_D);
    return 0;
}
运行效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1176098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot内容协商(简单使用、源码解读、默认Converters、自定义Converters)

目录 1. 内容协商1.1 简单使用1.2 源码解读1.3 WebMvcAutoConfiguration提供几种默认HttpMessageConverters1.4 自定义HttpMessageConverter支持yaml格式输出 1. 内容协商 1.1 简单使用 一套系统适配多端数据返回 基于请求头内容协商&#xff1a;&#xff08;默认开启&#x…

学习笔记|秩相关分析|Spearman相关分析|Kendall相关分析|规范表达|《小白爱上SPSS》课程:SPSS第十九讲:秩相关分析怎么做?

目录 学习目的软件版本原始文档秩相关分析一、实战案例二、统计策略三、SPSS操作四、结果解读五、规范表达1、规范图表2、规范文字 六、划重点&#xff1a; 学习目的 SPSS第十九讲&#xff1a;秩相关分析怎么做&#xff1f; 软件版本 IBM SPSS Statistics 26。 原始文档 《…

DC电源模块隔离电路的影响

BOSHIDA DC电源模块隔离电路的影响 DC电源模块隔离电路是电子设备中常用的一种电路。它的作用是在设备中两个电路之间建立一定的隔离&#xff0c;以保证两个电路之间不会传递电流或信号。这种隔离电路的影响可以从以下几个方面来分析。 首先&#xff0c;隔离电路可以提高安全性…

人工智能:一种现代的方法 第二章 智能体

文章目录 前言人工智能&#xff1a;一种现代的方法 第二章 智能体2.1 环境与智能体2.2 理性概念2.3环境的性质2.3.1任务环境的规范描述&#xff1a;PEAS2.3.2环境的性质 2.4智能体结构 前言 本章属于本书的开篇&#xff0c;有两个不便于理解的地方一是讲述的概念过于抽象&…

再不记录就忘啦在浙工商的第一年啦!

再不记录就快忘啦在浙工商的第一年啦&#xff01; 文章目录 再不记录就快忘啦在浙工商的第一年啦&#xff01;&#x1f6a9;这是前言&#xff01;&#xff01;&#xff01;&#x1f468;‍&#x1f680;杭漂选手新生入场【2019.08-2019.10】&#x1f9d8;‍♂️开始步入适应期【…

[机缘参悟-118] :如何做到:从无到有,从0到1设计一个新系统或产品?如何做到总是能快速的解决复杂技术难题?

目录 前言&#xff1a; 一、在软件工程化理论和实践上 二、在担任过的嵌入系统的岗位角色上&#xff08;横向、广度&#xff09; 三、在嵌入式设备的功能分层上&#xff08;纵向、深度&#xff09; 四、在嵌入式通信产品/设备类型上 五、在软硬件产品的项目管理上 六、在…

ActiveMq学习⑨__基于zookeeper和LevelDB搭建ActiveMQ集群

引入消息中间件后如何保证其高可用&#xff1f; 基于zookeeper和LevelDB搭建ActiveMQ集群。集群仅提供主备方式的高可用集群功能&#xff0c;避免单点故障。 http://activemq.apache.org/masterslave LevelDB&#xff0c;5.6版本之后推出了LecelDB的持久化引擎&#xff0c;它使…

css-inpu边框

效果图&#xff1a; input {width: 225px;height: 25px;background-color: #1469bd00;border: #aca9a97d solid 1px;color: white;font-size: 15pt;box-sizing: conte-box; }input:focus {border-style: solid;border-color: #03a9f4;box-shadow: 0 0 15px #03a9f4;outline: …

基于分钟级降水预报API 的智能农业水资源管理探究

前言 随着农业现代化的发展&#xff0c;越来越多的农业生产活动需要依赖于科学技术的支持。其中&#xff0c;智能农业水资源管理就是依托新型技术手段&#xff0c;实现对水资源的更加精准预报、科学调度的一种管理模式。而基于分钟级降水预报API的智能农业水资源管理&#xff…

【elasticsearch+kibana基于windows docker安装】

创建网络&#xff1a;es和kibana容器互联 docker network create es-net加载镜像 docker pull elasticsearch:7.12.1运行 docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -v $…

有趣的数学 sign是什么函数

在数学中&#xff0c;函数sign指的是符号函数&#xff0c;它的定义如下&#xff1a;对于任意实数x&#xff0c;若x>0&#xff0c;则sign(x)1&#xff1b;若x0&#xff0c;则sign(x)0&#xff1b;若x<0&#xff0c;则sign(x)-1&#xff1b;简单来说&#xff0c;sign函数就…

node版本管理神器|nvm安装使用教程

文章目录 导文安装前提下载安装包进行安装第一步&#xff0c;下载安装包&#xff0c;[nvm下载地址](https://github.com/coreybutler/nvm-windows/releases)第二步&#xff0c;进行安装&#xff0c;点击nvm-setup.exe文件&#xff0c;接受用户协议第三步&#xff0c;选择安装目…

是时候扔掉你的密码了

引言 “密码是人类历史的不朽篇章&#xff0c;它的早期迹象几乎与文字的诞生同期”。正如密码史学家乔尔里维尔所说&#xff0c;密码&#xff0c;作为信息的保护工具&#xff0c;已经存在了数千年。古代人类早期就开始认识到信息的重要性&#xff0c;同时也意识到了保护这些信息…

Win11安装网络打印机

https://support.microsoft.com/zh-cn/windows/%E5%9C%A8-windows-%E4%B8%AD%E5%AE%89%E8%A3%85%E6%89%93%E5%8D%B0%E6%9C%BA-cc0724cf-793e-3542-d1ff-727e4978638b

辐射骚扰整改思路及方法:辐射超标与问题定位 ?

某产品首次EMC测试时&#xff0c;辐射、静电、浪涌均失败。本篇文章就“辐射超标与问题定位”问题进行详细讨论。 一、辐射超标 50MHz 、100MHz 、130MHz 、200MHz&#xff0c;4个频点明显超标&#xff0c;其中130MHz 左右最明显&#xff0c;超出 19dB&#xff1b;后将电路板…

CRM软件:打造高效率团队

对于一家企业来说团队配合紧密&#xff0c;沟通无障碍是业绩增长的基础&#xff0c;要做到高效率团队协作除了需要管理者制定策略还要依赖数字化工具的加成&#xff0c;比如利用CRM软件打造高效团队。 直观展示工作进度 大多数企业每个月都要制作工作报告、频繁召开会议不断的…

plt.imshow()的用法和参数介绍

函数说明 plt.imshow()是Matplotlib中的一个函数&#xff0c;用于显示图像。它可以传递一个二维或三维数组作为image参数&#xff0c; 并将图像数据显示为图形&#xff0c;并对图像进行不同的可视化设置。 关于二维/三维数组的解释说明 image支持的数组形状包括&#xff1a;…

马斯克的AI大模型登场

(有兴趣的可以直接访问官网&#xff1a;Announcing Grok (x.ai)) 对于大火的人工智能&#xff0c;一向冲锋在前的马斯克却表现得慎之又慎。今年4月&#xff0c;马斯克成立xAI&#xff0c;加入AI大战。经过半年多的酝酿&#xff0c;当地时间11月4日&#xff0c;马斯克旗下社交媒…

如何使用 Loadgen 来简化 HTTP API 请求的集成测试

引言 在编写 HTTP 服务的过程中&#xff0c;集成测试 1 是保证程序正确性的重要一环&#xff0c;如下图所示&#xff0c;其基本的流程就是不断向服务发起请求然后校验响应的状态和数据等&#xff1a; 为大量的 API 和用例编写测试是一件繁琐的工作&#xff0c;而 Loadgen 2 正…

-- Could NOT find livox_ros_driver (missing: livox_ros_driver_DIR)

原因 缺少livox_ros_driver 包 解决办法如下 livox_ros_driver 地址 https://github.com/Livox-SDK/livox_ros_driver 下载下来放入ros的工作目录