前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

作者头像
Twcat_tree
发布于 2022-11-30 13:03:29
发布于 2022-11-30 13:03:29
2.5K03
代码可运行
举报
文章被收录于专栏:二猫の家二猫の家
运行总次数:3
代码可运行

上一篇文章:返回指针值的函数+指向函数的指针+main()函数的参数

C语言结构体类型定义+结构体变量的定义与使用及其初始化+结构体变量作为函数参数

结构体

引例

输出平均分最高的学生信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
struct student
{
	int num;
	char name[10];
	int computer,english,math;
	double average;//这些都是结构体成员
};//注意这个分号不要可少,否则会报错
int main()
{
	int i,n;
	struct student s1,max;//定义结构体变量s1和结构体变量max
	printf("Input n:");
	scanf("%d",&n);//n是学生的个数
	printf("Input the student's number, name and course scores:\n");
	for(i=1;i<=n;i++)//用for循环实现n个学生成绩的输入
	{
		printf("No.%d:",i);//提示学生的序号
		scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);
		//分别给结构体里面的变量输入数值
		s1.average=(s1.math+s1.english+s1.computer)/3.0;//计算出该学生的平均成绩
		if(i==1)max=s1;
		if(max.average<s1.average)//找出平均分最高的学生
			max=s1;//将s1里面的成员变量的值分别对应地赋值给max
	}
	printf("num:%d, name:%s, average:%.2lf\n",max.num,max.name,max.average);
	//将平均成绩最高的学生成绩输出
	return 0;	
}

  
  1234567891011121314151617181920212223242526272829
  • 结构体类型的定义: 结构体类型实际上是一种模板,它的定义形式为:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct 结构体名
{
	类型标识符 结构体成员名1;
	类型标识符 结构体成员名2;
	...
	类型标识符 结构体成员名3;
};//最后的这个分号不要忘了

  
  1234567

注意不要忘记最后的分号

结构体变量的定义

在结构体类型定义好的情况下,注意是结构体类型定义好的情况下,才能定义结构体变量。 比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct student
{
	int num;
	char name[10];
	int computer,english,math;
	double average;
};

  
  1234567

这个是结构体类型的定义,然后才能进行结构体变量的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct 结构体类型名 结构体变量名;

  
  1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct student stu1,stu2;//定义两个结构体变量

  
  1

也可以在定义结构体类型的时候同时定义结构体变量,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct student
{
	int num;
	char name[10];
	int computer,english,math;
	double average;
}stu1,stu2;//定义两个结构体变量;

  
  1234567

也可以省略结构体类型名,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct//省去了结构体类型的名字student
{
	int num;
	char name[10];
	int computer,english,math;
	double average;
}stu1,stu2;//定义两个结构体变量;

  
  1234567

省略了结构体类型的名字,在这种情况下,结构体变量只能在后面同时定义,而不能在主函数中定义。所以并不建议这样定义结构体变量

  • 注意:结构体变量的变量名和成员名可以相同,二者互不影响,互不干扰,如:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct date
{
	int year;
	int month;
	int day;
};
int main()
{
	struct date year;
	year.year = 1980;
}

  
  1234567891011

结构体变量的使用

使用形式为:结构体变量.结构体成员名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scanf("%d%s%d%d%d",&s1.num,s1.name,&s1.math,&s1.english,&s1.computer);

  
  1
  • 注意:如果结构体类型中有字符数组成员,并且在主函数中要给字符数组赋字符串常量时,不能直接用“=”,即s1.name="张三";是错误的,必须使用字符串复制函数strcpy()函数来实现,如:strcpy(s1.name,"张三");
  • 同一类型的结构体变量间可以赋值 如:stu2=stu1;将结构体变量stu1里面的所有成员变量的值分别对应赋给结构体变量stu2

结构体变量作为函数参数

  • 结构体变量的成员作为函数的实参,形参为普通变量或数组
  • 也可以将结构体变量作为函数的参数 例如:(请看代码中的详细注释,并观察运行结果)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <string.h>
struct s_score
{
	int no;
	char name[10];
	int score[3];
};//不要忘记这个分号
void output(struct s_score a);//形参为结构体变量
void fun(int *q);//形参为指针 
main()
{
	struct s_score a={1001,"zhangsan",{60,60,60}};//这行语句是对结构体变量的初始化
	output(a);
	a.no=1001;
	strcpy(a.name,"wang lin");
	a.score[0]=78;
	a.score[1]=88;
	a.score[2]=94;
	output(a);
	fun(a.score);//结构体中的数组成员,数组名为数组首地址 
	output(a);
}
void output(struct s_score a)//将结构体变量作为形参接收来自主函的结构体变量 
{
	int i;
	printf("%d  %s   ",a.no,a.name);
	for(i=0;i<3;i++)
		printf("%4d",a.score[i]);
	printf("\n");
}
void fun(int *p)//定义指针变量来接收主函数传入的数组首地址 
{
	int i;
	for(i=0;i<3;i++)
	{
		*(p+i)+=10;//通过循环变量i来对指针变量进行运算 
		if(*(p+i)>100)
			*(p+i)=100;
	}
}

  
  1234567891011121314151617181920212223242526272829303132333435363738394041

结构体变量的初始化

结构体变量的初始化一般形式为: 结构体变量名={初值表}; 就像上面的语句:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct s_score a={1001,"zhangsan",{60,60,60}};

  
  1

结构体初值的数据类型,应与结构体变量中相应成员所要求的一致,否则会出错

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自然语言处理 | 使用Spacy 进行自然语言处理(二)
上次我们简单介绍了Spacy,学习了它的安装以及实体识别等基本的方法。今天我继续给大家介绍一下它的其他功能如何操作,主要有词性还原,词性标注,名词块识别,依存分析等内容。废话不多说,直接看代码。
用户1622570
2018/09/14
2.3K0
自然语言处理 | 使用Spacy 进行自然语言处理(二)
使用 spacy 进行自然语言处理(一)
自然语言处理(NLP) 是人工智能方向一个非常重要的研究领域。 自然语言处理在很多智能应用中扮演着非常重要的角色,例如:
ke1th
2019/05/26
1.7K0
Python NLTK 自然语言处理入门与例程
那么 NLP 到底是什么?学习 NLP 能带来什么好处?
Sepmer Fi
2018/02/23
6.2K1
自然语言处理(NLP)数据增强,改善NLP任务的性能
当涉及到自然语言处理(NLP)数据增强时,各种技术和方法可用于生成更多的训练样本以改善模型性能。以下是对每种方法的详细解释,以及附带的Python代码示例:
数字扫地僧
2023/11/06
9580
【NLP】竞赛必备的NLP库
本周我们给大家整理了机器学习和竞赛相关的NLP库,方便大家进行使用,建议收藏本文。
黄博的机器学习圈子
2020/09/29
1.9K0
【NLP】竞赛必备的NLP库
使用Python中的NLTK和spaCy删除停用词与文本标准化
【磐创AI 导读】:本文介绍了如何使用Python中的NLTK和spaCy删除停用词与文本标准化,欢迎大家转发、留言。想要更多电子杂志的机器学习,深度学习资源,大家欢迎点击上方蓝字关注我们的公众号:磐创AI。
磐创AI
2019/09/09
4.3K0
使用Python中的NLTK和spaCy删除停用词与文本标准化
5分钟NLP - SpaCy速查表
SpaCy 是一个免费的开源库,用于 Python 中的高级自然语言处理包括但不限于词性标注、dependency parsing、NER和相似度计算。它可帮助构建处理和理解大量文本的应用程序可用于多种方向,例如信息提取、自然语言理解或为深度学习提供文本预处理。
deephub
2022/03/12
1.5K0
5分钟NLP - SpaCy速查表
《一文吃透!NLTK与SpaCy,自然语言处理的神兵利器》
在人工智能的璀璨星空中,自然语言处理(NLP)无疑是最为耀眼的领域之一。它让机器能够理解、处理和生成人类语言,极大地推动了智能交互的发展。而在Python的NLP工具库中,NLTK和SpaCy就像两把锋利的宝剑,各自散发着独特的光芒。今天,就让我们深入探究这两款工具的使用技巧与优势,为你的NLP之旅增添强大助力。
程序员阿伟
2025/02/17
1270
【Python环境】Python自然语言处理系列(1)
一:python基础,自然语言概念 from nltk.book import* 1,text1.concordance("monstrous") 用语索引 2,text1.similar("best") 3,text2.common_contexts(["monstrous","very"]) 4,text4.dispersion_plot(["citizens","democracy", "freedom", "duties","America"]) 5,text3.generate() 6,
陆勤_数据人网
2018/02/27
8950
【Python环境】Python自然语言处理系列(1)
入门 | 自然语言处理是如何工作的?一步步教你构建 NLP 流水线
计算机非常擅长使用结构化数据,例如电子表格和数据库表。但是我们人类通常用文字交流,而不是使用电子表格来交流。这对计算机来说不是一件好事。
机器之心
2018/08/21
1.7K0
入门 | 自然语言处理是如何工作的?一步步教你构建 NLP 流水线
目前常用的自然语言处理开源项目/开发包大汇总
中文主要有:NLTK,FoolNLTK,HanLP(java版本),pyhanlp(python版本),Ansj,THULAC,结巴分词,FNLP,哈工大LTP,中科院ICTCLAS分词,GATE,SnowNLP,东北大学NiuTrans,NLPIR,;
IT小白龙
2018/11/26
3.1K0
目前常用的自然语言处理开源项目/开发包大汇总
初学者|一起学学SpaCy
代码已上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPtools/SpacyDemo.ipynb
yuquanle
2019/05/28
8900
这把神器,让你用 Python 一口气掌握 53 种自然语言处理
今天的教程里,我就手把手带你在 Python 上使用 StanfordNLP,进行自然语言处理实战。
IT阅读排行榜
2019/08/19
1K0
这把神器,让你用 Python 一口气掌握 53 种自然语言处理
教你用Python进行自然语言处理(附代码)
自然语言处理是数据科学中的一大难题。在这篇文章中,我们会介绍一个工业级的python库。 自然语言处理(NLP)是数据科学中最有趣的子领域之一,越来越多的数据科学家希望能够开发出涉及非结构化文本数据的解决方案。尽管如此,许多应用数据科学家(均具有STEM和社会科学背景)依然缺乏NLP(自然语言处理)经验。 在这篇文章中,我将探讨一些基本的NLP概念,并展示如何使用日益流行的Python spaCy包来实现这些概念。这篇文章适合NLP初学者阅读,但前提是假设读者具备Python的知识。 你是在说spaCy
数据派THU
2018/06/12
2.3K0
自然语言处理 | 使用Spacy 进行自然语言处理
Spacy的github地址:https://github.com/explosion/spaCy
用户1622570
2018/09/14
7.3K1
自然语言处理 | 使用Spacy 进行自然语言处理
从“London”出发,8步搞定自然语言处理(Python代码)
【新智元导读】自然语言处理是AI的一个子领域,从人们日常沟通所用的非结构化文本信息中提取结构化数据,以便计算机理解。本文用通俗易懂的语言深入浅出的介绍了自然语言处理,并用Python实现了几个非常有趣的实例。
新智元
2018/08/16
9310
从“London”出发,8步搞定自然语言处理(Python代码)
如何用Python处理自然语言?(Spacy与Word Embedding)
本文教你用简单易学的工业级Python自然语言处理软件包Spacy,对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化。
王树义
2018/08/22
2.6K0
如何用Python处理自然语言?(Spacy与Word Embedding)
自然语言处理NLP(Spacy)入门 (一)
自然语言处理(Natuarl Language Processing, NLP),是人工智能领域的一个重要的方向。一般我们听到的文本分类、文本挖掘都属于NLP的范畴。
生信编程日常
2020/10/29
1.6K0
自然语言处理NLP(Spacy)入门 (一)
独家 | 使用Python的LDA主题建模(附链接)
主题建模包括从文档术语中提取特征,并使用数学结构和框架(如矩阵分解和奇异值分解)来生成彼此可区分的术语聚类(cluster)或组,这些单词聚类继而形成主题或概念。
数据派THU
2021/04/07
5.5K0
Python自然语言处理面试:NLTK、SpaCy与Hugging Face库详解
NLTK、SpaCy与Hugging Face库作为Python自然语言处理(NLP)领域的三大主流工具,其理解和应用能力是面试官评价候选者NLP技术实力的重要标准。本篇博客将深入浅出地探讨Python NLP面试中与NLTK、SpaCy、Hugging Face库相关的常见问题、易错点,以及如何避免这些问题,同时附上代码示例以供参考。
Jimaks
2024/04/19
3550
推荐阅读
相关推荐
自然语言处理 | 使用Spacy 进行自然语言处理(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档