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

结构体变量

 

        C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。 在程序中建立一个结构体类型:

1.结构体

建立结构体

struct Student
{	int num;			//学号为整型 char name[20];	//姓名为字符串 char sex;			//性别为字符型 int age;				//年龄为整型float score;			//成绩为实型 char addr[30];		//地址为字符串 
};						//注意最后有一个分号 

 同时定义变量

struct Student
{	int num;		char name[20];char sex;	int age;float score;char addr[30];
}student1, student2;

 定义变量

struct Student  student1, student2;

输出变量

#include <stdio.h>
int main()
{	struct Student							//声明结构体类型struct Student{	long int num;						//以下4行为结构体的成员char name[20];char sex;char addr[20];}a={10101,"Li Lin",'M',"123 Beijing Road"};	//定义结构体变量a并初始化printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr);return 0;
}

结构体变量的初始化和引用

//结构体变量的初始化和引用
student1.num=10010;
/*已定义了student1为student类型的结构体变量,
则student1.num表示student1变量中的num成员,即student1的num(学号)成员*/

对结构体变量的成员可以像普通变量一样进行各种运算

同类的结构体变量可以互相赋值。

student1=student2;		//假设student1和student2已定义为同类型的结构体变量

例题:输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。

#include <stdio.h>
int main()
{	struct Student			//声明结构体类型struct Student {	int num;char name[20];float score;}student1,student2;	//定义两个结构体变量student1,student2 scanf("%d%s%f",&student1.num,student1.name,&student1.score);	//输入学生1的数据scanf("%d%s%f",&student2.num,student2.name,&student2.score);	//输入学生1的数据printf("The higher score is:\n");if(student1.score>student2.score)printf("%d  %s  %6.2f\n",student1.num,student1.name,student1.score);else if(student1.score<student2.score)printf("%d  %s  %6.2f\n",student2.num,student2.name,student2.score);else{	printf("%d  %s  %6.2f\n",student1.num,student1.name,student1.score);printf("%d  %s  %6.2f\n",student2.num,student2.name,student2.score);}return 0;
}

2.使用结构体数组

struct 结构体名 {成员表列} 数组名[数组长度];

struct Person
{	char name[20];int count;
}
struct Person leader[3];	//leader是结构体数组名 

例题:有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

#include <string.h>
#include <stdio.h>
struct Person						//声明结构体类型struct Person
{	char name[20];				//候选人姓名int count;						//候选人得票数 
}leader[3]={"Li",0,"Zhang",0,"Sun",0};	//定义结构体数组并初始化int main()
{	int i,j;char leader_name[20];			//定义字符数组 for(i=1;i<=10;i++){	scanf("%s",leader_name);	//输入所选的候选人姓名for(j=0;j<3;j++)if(strcmp(leader_name,leader[j].name)==0) leader[j].count++;}printf("\nResult:\n");for(i=0;i<3;i++)printf("%5s:%d\n",leader[i].name,leader[i].count);return 0;
}

3.结构体指针

通过指向结构体变量的指针变量输出结构体变量中成员的信息。

#include <stdio.h>
#include <string.h>
int main()
{	struct Student			//声明结构体类型struct Student{	long num;char name[20];char sex;float score;};struct Student stu_1;	//定义struct Student类型的变量stu_1 struct Student *p;		//定义指向struct Student 类型数据的指针变量p p=&stu_1;			//p指向stu_1 stu_1.num=10101;		//对结构体变量的成员赋值 strcpy(stu_1.name,"Li Lin");	//用字符串复制函数给stu_1.name赋值stu_1.sex='M';stu_1.score=89.5;printf("No.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);	//输出结果 printf("\nNo.:%ld\nname:%s\nsex:%c\nscore:%5.1f\n",(*p).num,(*p).name,(*p).sex, (*p).score);	return 0;
}

4.链表

4.1what is "linked list"

        链表有一个“头指针”变量,图中以head表示,它存放一个地址,该地址指向一个元素。 链表中每一个元素称为“结点”,每个结点都应包括两个部分:

 (1) 用户需要用的实际数据;

 (2) 下一个结点的地址。

         head指向第1个元素,第1个元素又指向第2个元素……直到最后一个元素,该元素不再指向其他元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束。

 

struct Student
{	int num;float score;struct Student *next; 	//next是指针变量,指向结构体变量
}; 

 

4.2建立简单的静态链表

Build a static linked list——"p"

#include <stdio.h>
struct Student						//声明结构体类型struct Student
{	int num;float score;struct Student*next;
};
int main()
{	struct Student a,b,c,*head,*p;	//定义3个结构体变量a,b,c作为链表的结点a.num=10101; a.score=89.5;		//对结点a的num和score成员赋值b.num=10103; b.score=90;		//对结点b的num和score成员赋值c.num=10107; c.score=85;		//对结点c的num和score成员赋值head=&a;					//将结点a的起始地址赋给头指针heada.next=&b;					//将结点b的起始地址赋给a结点的next成员b.next=&c;					//将结点c的起始地址赋给a结点的next成员c.next=NULL;					//c结点的next成员不存放其他结点地址p=head;						//使p指向a结点do{	printf("%ld %5.1f\n",p->num,p->score);	//输出p指向的结点的数据p=p->next;				//使p指向下一结点}while(p!=NULL);				//输出完c结点后p的值为NULL,循环终止return 0;
}

 ->  代表指针指向结点数据

4.3建立简单的动态链表

 

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{	long num;float score;struct Student*next;
};
int n; 	//n为全局变量,本文件模块中各函数均可使用它
struct Student *creat(void)
//定义函数。此函数返回一个指向链表头的指针
{	struct Student *head;struct Student *p1,*p2;n=0;p1=p2=(struct Student*) malloc(LEN);  //开辟一个新单元scanf("%ld,%f",&p1->num,&p1->score);//输入第1个学生的学号和成绩head=NULL;while(p1->num!=0){	n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(struct Student*)malloc(LEN);//开辟动态存储区,把起始地址赋给p1scanf("%ld,%f",&p1->num,&p1->score);//输入其他学生的学号和成绩}p2->next=NULL;return(head);
}
int main()
{	struct Student *pt;pt=creat(); 	//函数返回链表第一个结点的地址 printf("\nnum:%ld\nscore:%5.1f\n",pt->num,pt->score);//输出第1个结点的成员值return 0;
};

4.4 输出链表

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student					//声明结构体类型struct Student
{	long num;float score;struct Student *next;
};
int n;						//全局变量n
void print(struct Student*head)	//定义print函数 
{	struct Student*p;			//在函数中定义struct Student类型的变量pprintf("\nNow,These %d records are:\n",n);p=head;					//使p指向第1个结点if(head!=NULL)			//若不是空表do{	printf("%ld %5.1f\n",p->num,p->score);	//输出一个结点中的学号与成绩p=p->next;		//p指向下一个结点}while(p!=NULL);		//当p不是"空地址"
}

相关文章:

结构体变量

C语言允许用户自己建立由不同类型数据组成的组合型的数据结构&#xff0c;它称为结构体&#xff08;structre&#xff09;。 在程序中建立一个结构体类型&#xff1a; 1.结构体 建立结构体 struct Student { int num; //学号为整型 char name[20]; //姓名为字符串 char se…...

Java 多态

文章目录1、多态的介绍2、多态的格式3、对象的强制类型转换4、instanceof 运算符5、案例&#xff1a;笔记本USB接口1、多态的介绍 多态&#xff08;Polymorphism&#xff09;按字面意思理解就是“多种形态”&#xff0c;即一个对象拥有多种形态。 即同一种方法可以根据发送对…...

九龙证券|一夜暴跌36%,美股走势分化,标普指数创近2月最差周度表现

当地时间2月10日&#xff0c;美股三大指数收盘涨跌纷歧。道指涨0.5%&#xff0c;标普500指数涨0.22%&#xff0c;纳指跌0.61%。 受国际油价明显上升影响&#xff0c;动力板块领涨&#xff0c;埃克森美孚、康菲石油涨超4%。大型科技股走低&#xff0c;特斯拉、英伟达跌约5%。热门…...

【数据库】 mysql用户授权详解

目录 MySQL用户授权 一&#xff0c;密码策略 1&#xff0c;查看临时密码 2&#xff0c;查看数据库当前密码策略&#xff1a; 二&#xff0c; 用户授权和撤销授权 1、创建用户 2&#xff0c;删除用户 3&#xff0c;授权和回收权限 MySQL用户授权 一&#xff0c;密码策略…...

【性能】性能测试理论篇_学习笔记_2023/2/11

性能测试的目的验证系统是否能满足用户提出的性能指标发现性能瓶颈&#xff0c;优化系统整体性能性能测试的分类注&#xff1a;这些测试类型其实是密切相关&#xff0c;甚至无法区别的&#xff0c;例如几乎所有的测试都有并发测试。在实际中不用纠结具体的概念。而是要明确测试…...

C语言(输入printf()函数)

printf()的细节操作很多&#xff0c;对于现阶段的朋友来说&#xff0c;主要还是以理解为主。因为很多的确很难用到。 目录 一.转换说明&#xff08;占位符&#xff09; 二.printf()转换说明修饰符 1.数字 2.%数字1.数字2 3.整型转换字符补充 4.标记 -符号 符号 空格符…...

Zabbix 构建监控告警平台(四)

Zabbix ActionZabbix Macros1.Zabbix Action 1.1动作Action简介 当某个触发器状态发生改变(如Problem、OK)&#xff0c;可以采取相应的动作&#xff0c;如&#xff1a; 执行远程命令 邮件&#xff0c;短信&#xff0c;微信告警,电话 1.2告警实验简介 1. 创建告警media type&…...

2004-2019年285个地级市实际GDP与名义GDP

2004-2019年285个地级市实际GDP和名义GDP 1、时间&#xff1a;2004-2019年 2、范围&#xff1a;285个地级市 3、说明&#xff1a;GDP平减指数采用地级市所在省份当年平减指数 4、代码&#xff1a; "gen rgdp gdp if year 2003 gen rgdp gdp if year 2003" re…...

Node.js笔记-Express(基于Node.js的web开发框架)

目录 Express概述 Express安装 基本使用 创建服务器 编写请求接口 接收请求参数 获取路径参数(/login/2) 静态资源托管-express.static&#xff08;内置中间件&#xff09; 什么是静态资源托管&#xff1f; express.static() 应用举例 托管多个静态资源 挂载路径前缀…...

力扣sql简单篇练习(十五)

力扣sql简单篇练习(十五) 1 直线上的最近距离 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT min(abs(p1.x-p2.x)) shortest FROM point p1 INNER JOIN point p2 ON p1.x <>p2.x1.3 运行截图 2 只出现一次的最大数字 2.1 题目内容 2…...

浅谈动态代理

什么是动态代理&#xff1f;以下为个人理解:动态代理就是在程序运行的期间&#xff0c;动态地针对对象的方法进行增强操作。并且这个动作的执行者已经不是"this"对象了&#xff0c;而是我们创建的代理对象&#xff0c;这个代理对象就是类似中间人的角色&#xff0c;帮…...

Idea超好用的管理工具ToolBox(附带idea工具)

文章目录为什么要用ToolBox总结idea管理安装、更新、卸载寻找ide配置、根路径idea使用准备工作配置为什么要用ToolBox 快速轻松地更新,轻松管理您的 JetBrains 工具 安装自动更新同时更新插件和 IDE回滚和降级通过下载补丁或一组补丁而不是整个包&#xff0c;节省维护 IDE 的…...

Spring 中 ApplicationContext 和 BeanFactory 的区别

文章目录类图包目录不同国际化强大的事件机制&#xff08;Event&#xff09;底层资源的访问延迟加载常用容器类图 包目录不同 spring-beans.jar 中 org.springframework.beans.factory.BeanFactoryspring-context.jar 中 org.springframework.context.ApplicationContext 国际…...

情人节有哪些数码好物值得送礼?情人节实用性强的数码好物推荐

转瞬间&#xff0c;情人节快到了&#xff0c;大家还在为送什么礼物而烦恼&#xff1f;在这个以科技为主的时代&#xff0c;人们正在享受着科技带来的便利&#xff0c;其中&#xff0c;数码产品也成为了日常生活中必不可少的存在。接下来&#xff0c;我来给大家推荐几款比较实用…...

java中flatMap用法

java中map是把集合每个元素重新映射&#xff0c;元素个数不变&#xff0c;但是元素值发生了变化。而flatMap从字面上来说是压平这个映射&#xff0c;实际作用就是将每个元素进行一个一对多的拆分&#xff0c;细分成更小的单元&#xff0c;返回一个新的Stream流&#xff0c;新的…...

【MySQL Shell】8.9.2 InnoDB ClusterSet 集群中的不一致事务集(GTID集)

AdminAPI 的 clusterSet.status() 命令警告您&#xff0c;如果 InnoDB 集群的 GTID 集与 InnoDB ClusterSet 中主集群上的 GTID 集不一致。与 InnoDB ClusterSet 中的其他集群相比&#xff0c;处于此状态的集群具有额外的事务&#xff0c;并且具有全局状态 OK_NOT_CONSISTENT 。…...

logstash毫秒时间戳转日期以及使用业务日志时间戳替换原始@timestamp

文章目录问题解决方式参考问题 在使用Kibana观察日志排查问题时发现存在很多组的timestamp 数据一样&#xff0c;如下所示 详细观察内部数据发现其中日志数据有一个timestamp字段保存的是业务日志的毫秒级时间戳&#xff0c;经过和timestamp数据对比发现二者的时间不匹配。经…...

【C语言】qsort——回调函数

目录 1.回调函数 2.qsort函数 //整形数组排序 //结构体排序 3.模拟实现qsort //整型数组排序 //结构体排序 1.回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来…...

8年软件测试工程师经验感悟

不知不觉在软件测试行业&#xff0c;野蛮生长了8年之久。这一路上拥有了非常多的感受。有迷茫&#xff0c;有踩过坑&#xff0c;有付出有收获&#xff0c; 有坚持&#xff01; 我一直都在软件测试行业奋战&#xff0c; 毕业时一起入职的好友已经公司内部转岗&#xff0c;去选择…...

腾讯云安全组配置参考版

官方文档参考: 云服务器 安全组应用案例-操作指南-文档中心-腾讯云 新建安全组时&#xff0c;您可以选择腾讯云为您提供的两种安全组模板&#xff1a; 放通全部端口模板&#xff1a;将会放通所有出入站流量。放通常用端口模板&#xff1a;将会放通 TCP 22端口&#xff08;Lin…...

代码覆盖率工具OpenCppCoverage在Windows上的使用

OpenCppCoverage是用在Windows C上的开源的代码覆盖率工具&#xff0c;源码地址为https://github.com/OpenCppCoverage/OpenCppCoverage &#xff0c;最新发布版本为0.9.9.0&#xff0c;License为GPL-3.0。 从https://github.com/OpenCppCoverage/OpenCppCoverage/releases 下载…...

代码随想录算法训练营第24天25天|● 77. 组合● 216.组合总和III ● 17.电话号码的字母组合

77组合 看完题后的思路 void f&#xff08;数组&#xff0c;startIndex&#xff09;递归终止 if&#xff08;startIndex数组长度||path.sizek&#xff09;{ if(path.sizek){ 加入} }递归 for&#xff08;&#xff1b;startIndex<num.size&#xff1b;startIndex&#xff0…...

Python_pytorch

python_pytorch 小土堆pytotch学习视频链接 from的是一个个的包&#xff08;package) import 的是一个个的py文件(file.py) 所使用的一般是文件中的类(.class) 第一步实例化所使用的类,然后调用类中的方法&#xff08;def) Dataset 数据集处理 import os from PIL impo…...

【Java|golang】2335. 装满杯子需要的最短总时长

现有一台饮水机&#xff0c;可以制备冷水、温水和热水。每秒钟&#xff0c;可以装满 2 杯 不同 类型的水或者 1 杯任意类型的水。 给你一个下标从 0 开始、长度为 3 的整数数组 amount &#xff0c;其中 amount[0]、amount[1] 和 amount[2] 分别表示需要装满冷水、温水和热水的…...

shell编程之sed

文章目录八、shell编程之sed8.1 工作原理8.2 sed基本语法8.3 模式空间中的编辑操作8.3.1 地址定界8.3.2 常用编辑命令8.4 sed扩展八、shell编程之sed 8.1 工作原理 sed是一种流编辑器&#xff0c;它是文本处理中非常有用的工具&#xff0c;能够完美的配合正则表达式使用&…...

安全寒假作业nginx反向代理+负载均衡上传webshell重难点+apache漏洞

1.应用场景 负载均衡作为现今解决web应用承载大流量访问问题的一种方案&#xff0c;在真实环境中得到广泛的部署。实现负载均衡的方式有很多种&#xff0c;比如 DNS 方式、HTTP 重定向方式、IP 负载均衡方式、反向代理方式等等。 比如基于dns的负载均衡&#xff1a; 当然还有…...

day35|01背包问题、416. 分割等和子集

01背包问题 有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 例&#xff1a;背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品…...

Linux内核启动(3,0.11版本)内核启动完成与进入内核main函数

这一部分是在讲解head.s代码&#xff0c;这个代码与bootsect.s和setup.s在同一目录下&#xff0c;但是head.s程序在被编译生成目标文件后会与内核其他程序一起被链接成system模块&#xff0c;位于system模块的最前面开始部分。system模块将被放置在磁盘上setup模块之后开始的扇…...

【2023】Prometheus-Alertmanager高可用集群

本次实验准备了三个节点&#xff0c;分别为laert-01~03 目录1.安装Alertmanager2.配置启动文件3.验证集群4.关于集群的配置项1.安装Alertmanager 这部分内容在三个节点上都要执行 下载安装包&#xff0c;将安装包解压至/data目录下 wget https://github.com/prometheus/aler…...

2023-2-11 刷题情况

最短路计数 题目描述 给出一个 NNN 个顶点 MMM 条边的无向无权图&#xff0c;顶点编号为 1∼N1\sim N1∼N。问从顶点 111 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 222 个正整数 N,MN,MN,M&#xff0c;为图的顶点数与边数。 接下来 MMM 行&…...

网站建设三网/什么推广软件效果好

------------------ --------1 执行不带参数的hql文件---------------------------- hive -f 文件名.后缀 实例&#xff1a;hive -f chensq_test1.hql------------------ -----2 执行带1个普通参数的hql文件---------------------------- ----- 直接在hive中执行----select co…...

网站前端开发/国际新闻稿件

strcpy_s 和 strcat_s的用法 strcpy_s是系统的安全函数&#xff0c;微软在2005后建议用一系统所谓安全的函数&#xff0c;这中 间就有strcpy_s取代了strcpy&#xff0c;原来strcpy函数&#xff0c;就象gets函数一样&#xff0c;它没有方法 来保证有效的缓冲区尺寸&#xff0c;所…...

重庆网站查询/免费网站推广方式

原文地址&#xff1a;http://blog.csdn.net/emag_se/archive/2005/03/05/312317.aspx 1.世界上第一个计算机程序员 第一个写软件的人是Ada&#xff08;Augusta Ada Lovelace&#xff09;,在1860年代她尝试为 Babbage&#xff08;Charles Babbage&#xff09;的机械式计算机写软…...

做网站约需要多少钱/青岛网站建设公司电话

如今的移动即时通讯市场有点“蹊跷”&#xff0c;一边是朋友圈里“微信又出故障了”&#xff0c;“微信要上直播了”“烦死了&#xff0c;每天被微信群里的垃圾信息轰炸”等诸如此类的控诉和抱怨&#xff0c;另一边是主打隐私保密安全的后来者集体出动&#xff0c;海外的Telegr…...

资讯类网站怎么做/如何进行搜索引擎的优化

集合遍历操作的三种方式 Iterator迭代器方式增强for循环普通for循环代码如下&#xff1a; public static void test3(){ArrayList list new ArrayList();list.add(123);list.add("AAAA");list.add("bb");list.add(new String("JavaEE"));list.a…...

对网站建设课程的心得体会/中国新冠疫情最新消息

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/101377166 目录 六丶第五阶段PO模式 4.页面元素操作封装(二) 5.PO模式项目管理...