当前位置: 首页 > news >正文

C语言(结构体练习)

  1. 设计一个结构体,存放一个学员信息并显示,存放两个学员信息,算他们的平均分。
#include <stdio.h>
#include <string.h>// 定义结构体
typedef struct
{char name[50];float score;
} Student;// 函数声明
void display(Student student);
float calcu(Student student1, Student student2);int main()
{// 创建两个学员信息Student student1;Student student2;// 输入第一个学员信息printf("请输入第一个学员的姓名: ");scanf("%s", student1.name);printf("请输入第一个学员的分数: ");scanf("%f", &student1.score);// 输入第二个学员信息printf("请输入第二个学员的姓名: ");scanf("%s", student2.name);printf("请输入第二个学员的分数: ");scanf("%f", &student2.score);// 显示学员信息printf("\n第一个学员信息:\n");display(student1);printf("\n第二个学员信息:\n");display(student2);// 计算并显示平均分float average = calcu(student1, student2);printf("\n两个学员的平均分为: %.2f\n", average);return 0;
}// 显示学员信息的函数
void display(Student student)
{printf("姓名: %s\n", student.name);printf("分数: %.2f\n", student.score);
}// 计算平均分的函数
float calcu(Student student1, Student student2)
{return (student1.score + student2.score) / 2.0;
}

以上代码定义了一个名为"Student"的结构体,包含学生姓名、学号和成绩三个成员变量。在主函数中,通过创建两个"Student"类型的变量student1和student2,分别赋值不同的学员信息。然后使用cout语句输出学员信息和平均分。
在这里插入图片描述

  1. 设计一个描述商品的结构体,存放一个商品信息,并显示。
#include <stdio.h>
#include <string.h>// 定义商品结构体
struct Product {int id;               // 商品IDchar name[50];        // 商品名称float price;          // 商品价格int quantity;         // 商品数量
};// 显示商品信息
void displayProduct(struct Product p) {printf("商品ID: %d\n", p.id);printf("商品名称: %s\n", p.name);printf("商品价格: %.2f\n", p.price);printf("商品数量: %d\n", p.quantity);
}int main() {// 创建一个商品实例并初始化struct Product product1;product1.id = 101;strncpy(product1.name, "苹果", sizeof(product1.name) - 1);  // 使用strncpy防止缓冲区溢出product1.name[sizeof(product1.name) - 1] = '\0';  // 确保字符串以null结尾product1.price = 5.99;product1.quantity = 100;// 显示商品信息displayProduct(product1);return 0;
}

要的数据结构是一个商品结构体,该结构体定义了商品的ID、名称、价格和数量四个属性。代码中包含了一个显示商品信息的函数displayProduct(),以及一个主函数main()。

在主函数中,首先创建了一个商品实例product1,并对其属性进行初始化。然后调用displayProduct()函数,将product1作为参数传入,以显示商品信息。

显示商品信息的函数displayProduct()使用printf()函数来输出商品的各个属性值。其中,%d用于输出整型变量,%s用于输出字符串变量,%.2f用于输出浮点型变量,并控制输出小数点后保留两位。

最后,main()函数返回0,表示程序正常结束。
在这里插入图片描述

  1. 作业2的基础之上完成以下功能:

    (1)存储多个商品的信息,后显示

    (2)查询价格最高的商品的信息

    (3)用静态分配(结构体变量)和动态分配分别实现。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct Product {int id;char name[50];float price;int quantity;
};// 显示所有商品信息(与静态分配中的相同)
void displayProducts(struct Product products[], int count) {// ...(与静态分配中的代码相同)
}// 查询价格最高的商品信息(与静态分配中的相同)
struct Product findHighestPricedProduct(struct Product products[], int count) {// ...(与静态分配中的代码相同)
}int main() {struct Product *products = malloc(100 * sizeof(struct Product)); // 动态分配内存int productCount = 0;if (products == NULL) {fprintf(stderr, "内存分配失败\n");return 1;}// 初始化商品信息(与静态分配中的类似,但使用malloc分配的内存)// ...(与静态分配中的代码类似,但使用products指针)// 显示所有商品信息displayProducts(products, productCount);// 查询价格最高的商品信息struct Product highestPricedProduct = findHighestPricedProduct(products, productCount);printf("价格最高的商品信息:\n");displayProducts(&highestPricedProduct, 1);// 释放动态分配的内存free(products);return 0;
}

在main函数中,通过调用malloc函数来动态分配了一个Product类型的数组,大小为100。如果内存分配失败,会打印错误消息并退出程序。

然后,通过调用displayProducts函数,显示所有商品的信息。这个函数接受一个Product数组和一个整数参数来表示数组的大小。在这个示例中,productCount变量表示商品数量。

接下来,通过调用findHighestPricedProduct函数来查询价格最高的商品信息。该函数也接受一个Product数组和一个整数参数来表示数组的大小。在这个示例中,它返回一个Product结构体,代表价格最高的商品。

最后,通过调用free函数来释放动态分配的内存,防止内存泄漏。
在这里插入图片描述

  1. 开发一个简易的成绩管理系统: 存储多个学员信息并处理 要求如下:

(1)申请多个空间,存入学员信息

(2)求分数最高学员姓名

(3)求总分和平均分

(4)统计查询 (查询平均分以上学员的姓名)

(5)按照成绩排序

	#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 100typedef struct
{char name[50];int score;
} Student;// 初始化学生信息(现在从用户输入获取)
void input(Student **students, int count)
{*students = (Student *)malloc(count * sizeof(Student));if (*students == NULL) {printf("内存分配失败!\n");exit(1);}for (int i = 0; i < count; i++){printf("请输入第%d个学生的姓名: ", i + 1);scanf("%49s", (*students)[i].name); // 注意:防止缓冲区溢出,使用%49sprintf("请输入第%d个学生的分数: ", i + 1);scanf("%d", &(*students)[i].score);}
}// 查找最高分学生
void find(Student *students, int count)
{Student highest = students[0];for (int i = 1; i < count; i++){if (students[i].score > highest.score){highest = students[i];}}printf("最高分学生: %s, 分数: %d\n", highest.name, highest.score);
}// 计算总分和平均分
void calculate(Student *students, int count, int *total, float *average)
{*total = 0;for (int i = 0; i < count; i++){*total += students[i].score;}*average = (float)*total / count;printf("总分: %d, 平均分: %.2f\n", *total, *average);
}// 统计查询:查询平均分以上学生的姓名
void query(Student *students, int count, float average)
{printf("平均分以上学生:\n");for (int i = 0; i < count; i++){if (students[i].score > average){printf("%s\n", students[i].name);}}
}// 按成绩排序(冒泡排序)
void sort(Student *students, int count)
{for (int i = 0; i < count - 1; i++){for (int j = 0; j < count - i - 1; j++){if (students[j].score < students[j + 1].score){Student temp = students[j];students[j] = students[j + 1];students[j + 1] = temp;}}}
}// 显示学生信息
void display(Student *students, int count)
{for (int i = 0; i < count; i++){printf("姓名: %s, 分数: %d\n", students[i].name, students[i].score);}
}int main()
{Student *students = NULL;int studentCount;int totalScore;float averageScore;// 输入学生数量printf("请输入学生数量(不超过%d): ", MAX_STUDENTS);scanf("%d", &studentCount);// 确保输入的学生数量不超过最大限制if (studentCount > MAX_STUDENTS || studentCount <= 0){printf("学生数量超出范围或无效!\n");return 1;}// 输入学生信息input(&students, studentCount);// 显示学生信息printf("学生信息:\n");display(students, studentCount);// 查找最高分学生find(students, studentCount);// 计算总分和平均分calculate(students, studentCount, &totalScore, &averageScore);// 统计查询:查询平均分以上学生的姓名query(students, studentCount, averageScore);// 按成绩排序sort(students, studentCount);// 显示排序后的学生信息printf("按成绩排序后的学生信息:\n");display(students, studentCount);// 释放内存free(students);return 0;
}

这段代码是一个学生成绩管理系统的简单实现。代码中定义了一个结构体Student,包含了学生的姓名和分数。通过定义相关函数,实现了学生信息的输入、查找最高分学生、计算总分和平均分、查询平均分以上学生、按成绩排序和显示学生信息等功能。

主函数中,首先要求用户输入学生的数量,然后通过输入函数input()获取学生信息。接着,调用display()函数显示学生信息,调用find()函数查找最高分学生,调用calculate()函数计算总分和平均分,调用query()函数查询平均分以上学生的姓名,调用sort()函数按成绩排序,并最后调用display()函数再次显示排序后的学生信息。最后,释放了动态分配的内存。

总的来说,这段代码实现了一个简单的学生成绩管理系统,可以输入学生信息,进行相关操作,并显示结果。
在这里插入图片描述

  1. 确认电脑的主机字节序。大端(高字节的数据存放在低地址上,低字节的数据存放在高地址

    上),小端(高字节的数据存放在高地址上,低字节的数据存放在低地址上)

    #include <stdio.h>int main() {unsigned int num = 0x12345678;char *ptr = (char *)&num;if (*ptr == 0x12) {printf("Big-Endian\n");} else if (*ptr == 0x78) {printf("Little-Endian\n");} else {printf("Unknown Endian\n");}return 0;
    }
    

在代码中,首先初始化一个unsigned int类型的变量num为0x12345678,并声明一个char类型的指针ptr,指向num的地址。

接下来,通过判断ptr指向的地址上的值,来判断是大端序还是小端序。由于num的初始值为0x12345678,所以ptr指向的第一个字节的值为0x12,所以判断条件if (*ptr == 0x12)成立,输出"Big-Endian"。

如果ptr指向的第一个字节的值为0x78,则判断为小端序,输出"Little-Endian"。

如果ptr指向的值既不是0x12也不是0x78,则输出"Unknown Endian"。

最后,返回0表示程序正常结束。

相关文章:

C语言(结构体练习)

设计一个结构体,存放一个学员信息并显示&#xff0c;存放两个学员信息&#xff0c;算他们的平均分。 #include <stdio.h> #include <string.h>// 定义结构体 typedef struct {char name[50];float score; } Student;// 函数声明 void display(Student student); f…...

你了解网络层的 ICMP 吗?

你了解网络层的 ICMP 吗&#xff1f; 一. 什么是 ICMP二. ICMP 的工作原理三. ICMP 的结构四. ICMP 的常见应用五. ICMP 的局限性与安全性六. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神…...

清理C盘小记

突然C盘就爆满了&#xff0c;想当初还是给他预留了120G的空间&#xff0c;感觉到现在也不够用了&#xff0c;担心出现死机的情况就赶紧进行了清理。有一说一&#xff0c;清理回收站是真的有用。 参考&#xff1a;C盘清理指南&#xff0c;清理出30G起&#xff0c;超详细总结&am…...

Excel中如何消除“长短款”

函数微调可以可以实施&#xff0c;简单且易于操作的气球&#x1f388;涨缩更妙。 (笔记模板由python脚本于2024年12月17日 06:19:13创建&#xff0c;本篇笔记适合用Excel操作数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Fre…...

超越 RAG 基础:AI 应用的高级策略

作者&#xff1a;来自 Elastic Elastic Platform Team 我们最近与 Cohere 举办的虚拟活动深入探讨了检索增强生成 (retrieval augmented generation - RAG) 的世界&#xff0c;重点讨论了在概念验证阶段之后构建 RAG 应用程序的关键注意事项。我们的演讲者是 Elastic 的首席解…...

[shader]【图形渲染】【unity】【游戏开发】 Shader数学基础2-认识点和矢量

在计算机图形学和Shader编程中,点和矢量是两种常见且基础的数学对象。它们在空间中的作用和性质是理解图形渲染的关键。本篇文章将深入探讨点(Point)和矢量(Vector)的定义、特性以及它们之间的关系。 1. 点(Point)的定义 在数学和计算机图形学中,**点(Point)**用于…...

微软开源Python Markdown转换工具

分享一个microsoft开源的Python工具——markitdown,轻松将各类文件转换为Markdown格式。 markitdown支持的文件格式 PDF(.pdf)PowerPoint(.pptx)Word(.docx)Excel(.xlsx)图片(支持EXIF元数据和OCR识别)音频(支持EXIF元数据和语音转录)HTML(包括对Wikipedia...

安装与配置MongoDB 6.0以支持远程连接

安装与配置MongoDB 6.0以支持远程连接 目录 安装curl工具下载并导入MongoDB 6.0 PGP密钥向APT导入MongoDB 6.0版软件包的资源链接安装MongoDB依赖libssl1.1安装MongoDB启动并检查MongoDB服务状态进入MongoDB Shell交互式执行环境设置MongoDB开机自启配置MongoDB允许远程连接 …...

零衍门户国际化:助力拓展全球视野

概述 零衍系统管理平台统一门户管理&#xff0c;支持门户看板灵活配置&#xff0c;同时提供场景化的门户模板&#xff0c;丰富的门户组件&#xff0c;可协助用户快速搭建企业专属门户。 随着零衍产品的不断成熟&#xff0c;国际化需求日益增多&#xff0c;客户期望零衍门户可…...

mysql免安装版配置教程

一、将压缩包解压至你想要放置的文件夹中&#xff0c;注意&#xff1a;绝对路径中要避免出现中文 二、在解压目录下新建my.ini文件&#xff0c;已经有的就直接覆盖 my.ini文件内容 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\tools\\mysql-8.1.0-win…...

kafka的处理的一些问题 消费延迟

kafka的处理的一些问题 消费者客户端不但没有背压而且内存充足&#xff0c;但产生的消费延迟越来越大在Kafka的Leader副本宕机时 消费者客户端不但没有背压而且内存充足&#xff0c;但产生的消费延迟越来越大 比如我们这个kakfa集群一共有3个Broker节点 TOp1有5个分区&#xf…...

旅游创业,千益畅行,开启新的旅游模式!

在当今旅游市场蓬勃发展的时代&#xff0c;旅游卡项目如一颗新星闪耀登场&#xff0c;而千益畅行旅游卡服务更是其中的佼佼者&#xff0c;为广大旅游爱好者带来了全新的旅游体验与机遇。 一、旅游卡项目是如何运作的呢&#xff1f; 千益畅行旅游卡服务的运作模式犹如一部精心…...

集成自然语言理解服务,让应用 “听得懂人话”

如今&#xff0c;应用程序智能化已成趋势&#xff0c;开发者想要实现智能化&#xff0c;那么首先需要赋予应用理解自然语言的能力&#xff0c;使其能够准确地听懂人话&#xff0c;进而响应用户需求&#xff0c;并提供一系列智能化服务。比如用户语音控制应用程序帮忙订票&#…...

利用notepad++删除特定关键字所在的行

1、按组合键Ctrl H&#xff0c;查找模式选择 ‘正则表达式’&#xff0c;不选 ‘.匹配新行’ 2、查找目标输入 &#xff1a; ^.*关键字.*\r\n (不保留空行) ^.*关键字.*$ (保留空行)3、替换为&#xff1a;&#xff08;空&#xff09; 配置界面参考下图&#xff1a; ​​…...

[HNOI2002] 营业额统计 STL - set集合

文章目录 [HNOI2002] 营业额统计题目描述样例输入 #1样例输出 #1 提示题解相关知识点set [HNOI2002] 营业额统计 STL - set解题 题目描述 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。 Tiger 拿出…...

fastAPI接口(普通流式响应和大模型流式响应)

1. 流式输出和非流失输出&#xff1a; 大模型的流式输出&#xff08;Streaming Output&#xff09;和非流式输出&#xff08;Non-streaming Output&#xff09;是指在生成文本或其他输出时&#xff0c;如何将结果返回给用户或下游系统。 流式输出 (Streaming Output)&#xf…...

Linux系统安装node.js

一、node官网下载想要的node版本 https://nodejs.org/en/download/package-manager 二、将tar.xz文件解压 tar -xvf node-vxxx.tar.xz 三、改文件夹的名字&#xff0c;改成nodejs mv node-xxx nodejs 四、复制nodejs文件&#xff0c;并上传到linux 服务器 /usr/local 目录下…...

《解决两道有趣的编程问题:交替数字和与简单回文》

在编程的世界里&#xff0c;算法和逻辑的挑战无处不在。今天&#xff0c;我们将用 Python 来解决两道有趣的编程问题&#xff0c;分别是计算交替数字和以及生成简单回文。 一、交替数字和&#xff08;Alternating Sum of Numbers&#xff09; 1. 问题描述 给定一系列整数&am…...

2412d,d的8月会议

原文 总结 替换D的逃逸分析 Rikki说,他一个月前曾与Dennis讨论过简化D的逃逸分析,但没有结果.在BeerConf上,他再次提起了它,Dennis说他一直在考虑它. Rikki也与Walter谈过这件事,Walter曾说过DIP1000并没有完全如期工作,且有点太复杂了. 因此,Rikki想讨论按D逃逸分析方法替…...

WEB自动化测试(selenium工具)框架、面试题

一、什么是web自动化测试 让程序员代替人为去验证web项目功能的过程 二、什么web项目适合自动化测试 1)需求变动不频繁 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁&#xff0c;测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本&…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...