C/C++,数组与结构中的结构

本文深入探讨了C语言中结构体的使用,包括定义、初始化、成员引用以及如何利用结构体解决具体问题,如学生信息管理。通过实例,读者可以学习到如何创建结构体变量,进行初始化,并实现数据的有序存储。

先看一个例子
请帮老师写一个程序,要求存储本年级100个学生的姓名、学号、语文、数学、英语三门课程的成绩,并根据语文成绩递减排序,按名字输出所有学生的信息。
我们看下面这个程序代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int n=100,m=20; //const定义只读变量
char name[n][m];
int id[n],i,j,max;
float chinese[n],math[n],english[n],tem;
for(i=0;i<n;++i)
{
scanf_s("%s%d%f%f%f",name[i],m-1,&id[i],&chinese[i],math[n],english[i]😉;
}
for(i=0;i<n;++i)
{
max=i;
for(j=i+1;j<n;++j)
if(chinese[j]>chinese[max])
max=j;
tmp=chinese[i]=chinese[max];
chinese[max]=tmp;
}

for(i=0;i<n;++i)
	printf("%s %d %2f %2f %2f\n",name[i],,id[i],chinese[i],math[i],english[i]);
	return 0;

}

运行结果如下
在这里插入图片描述

我们可以发现输入的时候语文成绩没有顺序,输出的时候语文成绩的确降序排列,但是语文成绩对应的人并没有进行相应的调整,这是为什么呢?
这个时候我们需要把每个人的各种信息放到一起形成一种新的数据类型。这种情况下我们就可以采用结构。
struct student //自定义数据类型,名称叫“student”
{
char name[20];
int id;
float chinese;
float english;
float math;
}; //此处的“;”(分号)不能省


结构式一个或者多个变量的集合,结构中的变量可能为不同的类型,将这些变量组织在一个名字之下。
由于结构将一组相关的变量看做一个存储单元,而不是各自独立的实体,因此结构有助于组织复杂的数据。
结构及结构变量的定义
结构类型定义的一般格式为
struct 结构类型名
{
类型名1 成员名1;
类型名2 成员名2;

类型名n 成员名n;
}
注意:
结构类型名不得与其他变量的名字相同
结构成员名可以与其他变量的名字相同
结构类型定义之后一定要跟一个分号
结构类型是自定义数据类型不是变量

定义好结构类型,定义了结构变量后,就可以引用结构变量了。
结构变量中各成员的引用方式为: 结构变量名.成员名
一般形式: 结构变量名.结构成员名
例如: stu1.name-------表示结构变量stu1的name成员。
这里的“.”是成员运行算符号,为了便于记忆,不妨将“.”读作“的”
结构变量的初始化
与数组类似,在定义结构变量的同时可以给其各个成员赋初值,这称为结构变量的初始化,结构变量初始化的一般形式是:
struct 结构类型 结构变量名={初始化数据};
花括号中的初值赋予结构变量各成员,其数据类型、顺序要与结构类型说明的成员相匹配,数据之间用“,”隔开
例如: struct weather today={32.5,5};
数组不能彼此赋值,但同类型的结构变量可以彼此赋值。
结构变量同其他变量一样也具有存储类型
不同类型的结构变量不允许相互赋值
结构类型名必须包含关键字struct
结构变量的初始化与数组变量的初始化相同


学习完结构,想必你已经对开始的那道例题有了新的理解,让我们重新写一下程序代码
#include<stdio.h>
#include<stdlib.h>
const int n=4,m=20;
typedef struct student
{
char name[m];
int id;
float chinese,english,math;
} ;
int main()
{
student s[n],tmp;
int i,max,j;
for(i=0;i<n;++i)
scanf_s("%s %d %f %f %f",s[i].name
,&s[i].id,&s[i].chinese,&s[i].english,&s[i].math);
for(i=0;i<n;++i)
}
max=i;
for(j=i+1;j<n;++j)
if(s[j].chinese>s[max].chinese)
max=j;
tmp=s[i];
s[i]=s[max];
s[max]=tmp;

{	
for(i=0;i<n;++i)
printf("%s %d %2f %2f %2f\n",s[i].name,s[i].id,s[i].chinese,s[i].enhlish,s[i].math);
system("pause");	
return 0;

}

重新运行之后,就可以循环输入并且每个人的信息都会绑定在一起了!这就是结构的用法

03-08
### MathPix工具介绍 Mathpix Snipping Tool 是一款强大的数学公式识别工具,从最初的原型发展至今已经历了多次迭代和功能增强[^1]。该工具不仅能处理简单的数学表达式,还可以应对复杂的数学模型以及多行公式,并且支持手写公式的识别。 这款应用程序通过不断的科技创新与用户反馈改进,在学术研究和技术领域赢得了良好声誉,成为许多科研人员不可或缺的工作伙伴之一。除了基本的功能外,Mathpix 还提供了多种高级特性来满足不同用户的特定需求。 ### 使用方法 #### 安装与启动 为了使用 Mathpix Snipping Tool ,首先需要下载安装程序并按照提示完成设置过程。一旦成功安装后即可随时调用此应用来进行截图操作。 #### 截取屏幕上的公式图像 当遇到想要转换成 LaTeX 或 AsciiMath 的图片时,只需打开软件界面按下快捷键(默认为 `Ctrl+Alt+M`),此时鼠标指针会变为十字形状以便于选取目标区域;框选所需部分之后松开按键即刻上传至云端服务器等待进一步分析处理。 #### 获取LaTeX代码片段 经过短暂几秒钟的时间延迟过后,所截获的内容将以纯文本形式显示出来供复制粘贴到其他编辑器当中继续编写文档或是分享给他人查看交流之用。 ```python import pyperclip # 假设已获取到LaTeX字符串 stored_in_variable named latex_code pyperclip.copy(latex_code) print("LaTeX code has been copied to clipboard.") ``` 对于希望深入探索更多可能性的用户来说,可以考虑查阅官方提供的扩展插件——如用于解析Markdown文件内的公式标记语法的库 **mathpix-markdown-it** [^2] ——这将进一步提升工作效率和个人体验感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值