学习嵌入式第十五天之结构体

news2024/11/15 15:32:27

用变量a给出下面的定义

  • a) 一个整型数
  • (An integer)   //int a;
  • b) 一个指向整型数的指针
  • (A pointer to an integer)  //int *a;
  • c) 一个指向指针的的指针,它指向的指针是指向一个整型数
  • (A pointer to a pointer to an integer)   //int * *a;(二级指针)
  • d) 一个有10个整型数的数组
  • (An array of 10 integers)   //int a[10];
  • e) 一个有10个指针的数组,该指针是指向一个整型数的
  • (An array of 10 pointers to integers)   //int  *a[10];   
  • f) 一个指向有10个整型数数组的指针
  • (A pointer to an array of 10 integers)      //int (*a)[10];
  • g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
  • (A pointer to a function that takes an integer as an argument and returns an integer)                 //int (*a)(int)
  • h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
  • ( An array of ten pointers to functions that take an integer argument and return an integer )  //int (*a[10])(int)

函数传参-----值传递

总结:

1.指针概念

2.指针定义

3.核心用途

4.指针运算

5.指针

一维

6.指针+二维数组

7.指针+函数

8.指针+指针

结构体、共用体、枚举

数据类型:

基本数据类型:整型  浮点型  字符型  枚举类型

构造类型:数组类型

指针类型

void类型

例子:统计全校同学信息

//记录统计学生信息

//姓名

//班级

//性别

//成绩

//年龄…… 

记录姓名--------char  s[][100] = {"Tom","Gerry"};

记录班级---------char  class[][100] = {"……"};

……

为了更好的描述 有一种专门的数据类型来描述

结构体   struct

描述一些原先基本数据类型不好描述的复杂数据类型

语法

struct  结构体类型名

{

          数据成员列表    //成员变量

};

//一上这种形式就是定义了一个”数据类型“-----用户可以自定义

eg:描述学生这种类型

struct  student

{

      char name [20];

      unsigned char age;     

       float  score;

};   //注意:结束要用分号  表示结构体类定义完成

结构体的对齐规则:
1.在32位的平台上,默认都是按4字节对齐的。
2.对于成员变量,
各自在自己的自然边界上对齐。
3.如果 成员变量中有比4字节大。
此时整个结构体按照4字节对齐。
4.如果成员变量中没有有比4字节大。
此时整个结构体按照最大的那个成员对齐。

练习:

用结构体打印老师的姓名、工号、工资:

#include <stdio.h>
#if 0
struct teacher
{
	char name[10];
	int Jobnum;
	int salary;
};


void Peintf_Teacher(struct teacher *a)
{
	printf("-|name-|\t|-Jobnum-|\t|-salary|-\n");
	printf("-|%s-|\t|-%d-|\t|-%d-|-\t\n",a->name,a->Jobnum,a->salary);
}




int main(void)
{
	struct teacher a={"Liuyang",88888,88488};
#if 0
	printf("-|name-|\t|-Jobnum-|\t|-salary|-\n");
	printf("-|%s-|\t|-%d-|\t|-%d-|-\t\n",a.name,a.Jobnum,a.salary);
#endif

	printf ("name: \n");
	scanf("%s",a.name);
	printf ("Jobnum: \n");
	scanf("%d",&a.Jobnum);
	printf ("salary: \n");
	scanf("%d",&a.salary);

	Peintf_Teacher(&a);

	return 0;
}

结构体搭建学生信息查询系统

#include <stdio.h>
#include <stdlib.h>
struct student
{
	char name[20];
	int sno;
	float score;
};


void inputStuInfo(struct student *p,int len)
{
	int i = 0;
	for (i = 0; i < len;++i)
	{
		printf("name:");
		scanf("%s",(p+i)->name);
		printf("sno :");
		scanf("%d",&(p+i)->sno); //p[i].name
		printf("score:");
		scanf("%f",&(p+i)->score);
	}
}

void outputStuInfo(struct student *p,int len)
{
	
	int i = 0;
	printf("%10s|%10s|%10s\n","name","sno","score");
	for (i = 0; i < len;++i)
	{
		printf("%10s",p->name);
		printf("%10d",p->sno);
		printf("%10.2f\n",p->score);
		p++;
	}
}


void printMenu(void)
{
	printf("-----Welcome Use Student info System-----\n");
	printf("1 选择输入的学生人数\n");
	printf("2 输入信息\n");
	printf("3 查看学生信息\n");
	printf("0 退出 \n");
	printf(">");
}
int main(void)
{
	int n;
	int len = 0;
	struct student *s;

	while (1)
	{
		printMenu();
		scanf("%d",&n);
		switch(n)
		{
		case 0:
			  printf("exit----\n");
			  return 0;
		case 1:
			printf(">");
			scanf("%d",&len);
			s = malloc(len*sizeof(struct student));
			break;
		case 2:
			inputStuInfo(s,len);
			break;
		case 3:
			outputStuInfo(s,len);
			break;
		}
	}



	return 0;
}

注意:

1.结构体------是用来实现自定义数据类型

2.用结构体

  a.先构造出数据类型

  b.用数据类型定义变量、数组、指针

访问结构体

.   //结构体成员运算符

—>用与结构体类型的指针变量

eg.     p—>name

作业:

有一个班的4个学生,有5门课程。

1、求第一门课的平均分; struct Stu s[4]; s[i].score[0] int averageOneClass(struct Stu *s,int len,int classNo)

2、找出有两门以上课程不及格的学生, 输出他们的学号和全部课程成绩及平均分 printfStuInfoFailTwoClass()

{ 1.统计学生不及格课程数 2.打印学生信息 3.求平均分的功能 }
3、找出平均分在90分以上或全部课程成绩在85分以上的学生。 分别编写三个函数来实现以上三个要求

#include <stdio.h>

struct Stu              //结构体函数
{
	char name[10];
	int num;
	float yuwen;
	float yingyu;
	float shuxue;
	float wuli;
	float huaxue;
};
//****************************************************************
void Intput_Stu(struct Stu *s,int len)       //输入各项元素
{
	int i=0;
	for (i=0;i<len;++i)
	{
	printf ("name: ");
	scanf("%s",(s+i)->name);
	printf ("num: ");
	scanf("%d",&(s+i)->num);
	printf ("yuwen: ");
	scanf("%f",&(s+i)->yuwen);
	printf ("yingyu: ");
	scanf("%f",&(s+i)->yingyu);
	printf ("shuxue: ");
	scanf("%f",&(s+i)->shuxue);
	printf ("wuli: ");
	scanf("%f",&(s+i)->wuli);
	printf ("huaxue: ");
	scanf("%f",&(s+i)->huaxue);
	}
}
//*********************************************************
void Puts_Stu(struct Stu *s,int len)        //输出
{
	int i=0;
	for (i=0;i<len;++i)
	{
		printf ("%s\t",s->name);
		printf ("%d\t",s->num);
		printf ("%.1f\t",s->yuwen);
		printf ("%.1f\t",s->yingyu);
		printf ("%.1f\t",s->shuxue);
		printf ("%.1f\t",s->wuli);
		printf ("%.1f\n",s->huaxue);
		s++;
	}
}

//****************************************************
float Pingjun_Stu(struct Stu *s,int len)
{
	int i=0;                          
	float sum=0;
                                                 //单科语文平均数计算
	for (i=0;i<len;++i)
	{
		sum += (s+i)->yuwen;
	}
   return sum/len;
}

//***************************************************************************************************************************
void Flunk_Stu(struct Stu *s,int len)
{
	int i=0;                                  //求不及格学生的科目和成绩及其平均分
	int j=0;
	float sum=0;
	for (i=0;i<len;++i)
	{
		if ((s+i)->yuwen<60)
		{
			++j;
		}
		if ((s+i)->yingyu<60)
		{
			++j;
		}
		if ((s+i)->shuxue<60)
		{
			++j;
		}
		if ((s+i)->wuli<60)
		{
			++j;
		}
		if ((s+i)->huaxue<60)
		{
			++j;
		}
		if (j>=2)
		{
			printf("两门以上不及格的同学:num:%d  yuwen:%.1f  yingyu:%.1f  shuxue:%.1f  wuli:%.1f  huaxue:%.1f\n",(s+i)->num,(s+i)->yuwen,(s+i)->yingyu,(s+i)->shuxue,(s+i)->wuli,(s+i)->huaxue);
			sum=(s+i)->yuwen+(s+i)->yingyu+(s+i)->shuxue+(s+i)->wuli+(s+i)->huaxue;
			printf("这位同学的平均分是:%.1f\n",sum/5);
        	printf("不及格有%d门\n",j);
		}
		j=0;
	}
		
}

//*****************************************************************
void CHAzhao_Stu(struct Stu *s,int len)      
{                                             //查找成绩优异的同学
	int i=0;
	int sum=0;

	for (i=0;i<len;++i)
	{
		sum=(s+i)->yuwen+(s+i)->yingyu+(s+i)->shuxue+(s+i)->wuli+(s+i)->huaxue;

		if (((s+i)->yuwen>85 && (s+i)->yingyu>85 && (s+i)->shuxue>85 && (s+i)->wuli>85 && (s+i)->huaxue>85) || sum/5>95)
		{
			printf("成绩优异的同学:name:%s num:%d yuwen:%.1f yingyu:%.1f shuxue:%.1f wuli:%.1f huaxue:%.1f\n",(s+i)->name,(s+i)->num,(s+i)->yuwen,(s+i)->yingyu,(s+i)->shuxue,(s+i)->wuli,(s+i)->huaxue);
		}
		
	}
}

//*****************************************************
int main (void)
{
	struct Stu s[4];
	int len=4;

	Intput_Stu(s,len);

	printf ("--------------------统计表-------------------\n");
	printf ("name\tnum\tyuwen\tyingyu\tshuxue\twuli\thuaxue\n");
	Puts_Stu(s,len);
//	float p=Pingjun_Stu(s,len);   //调用平均数函数

//	printf ("语文平均分是:%.1f\n",p);     //打印出平均数的结果
    
//	Flunk_Stu(s,len);   // 调用求不及格科目的函数
    CHAzhao_Stu(s,4);
	return 0;
}

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

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

相关文章

通用CI/CD软件平台TeamCity全新发布v2023.11——增强Git托管平台的集成

TeamCity是一个通用的 CI/CD 软件平台&#xff0c;可以实现灵活的工作流、协作和开发做法。我们的解决方案将帮助在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 TeamCity 2023.11正式版下载 TeamCity 2023.11 带来了矩阵构建和构建缓存等多项备受期待的功能&a…

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…

计算机设计大赛 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…

即时设计和xd对比有什么优势?

Adobe XD 是 Adobe 公司推出的用户体验设计工具主要用于创建和设计用户界面的原型和设计草案&#xff0c;如网站、移动应用程序和桌面应用程序。然而&#xff0c;由于其复杂的功能使用和全英文操作界面&#xff0c;许多设计师被说服离开。Adobe XD 这是一款价格相对较高的商业软…

【微服务】Spring Boot集成ELK实用案例

推荐一款我一直在用国内很火的AI网站&#xff0c;包含GPT3.5/4.0、文心一言、通义千问、智谱AI等多个AI模型&#xff0c;支持PC、APP、VScode插件同步使用&#xff0c;点击链接跳转->ChatGPT4.0中文版 一、前言 在现代软件开发中&#xff0c;微服务架构已成为一种流行趋势。…

Kafka运维相关知识

目录 一、基本概念 二、技术特性 三、设计思想 四、运维建议 一、基本概念 Apache kafka 是一个分布式的基于push-subscribe的消息系统&#xff0c;它具备快速、可扩展、可持久化的特点。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&#xff1a;比如基于h…

辽宁链家新房数据采集与可视化实现

摘 要 网络爬虫也叫做网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网络信息&#xff0c;进行数据信息的采集与整理的程序或者脚本。随着海量数据的出现&#xff0c;如何快速有效的获取到我们想要的数据成为难题。以房源信息为例&#xff0c;该文使用Pyt…

【JAVE SE】---运算符和程序逻辑控制语句

1.运算符 算数运算符 - * / % 注意&#xff1a;1.Java的%符号左右两边可以是小数&#xff0c;也可以是负数 //运算符float a1.0f;float b2.0f;float c-1.5f;System.out.println(a%b); //1.0System.out.println(a%c); //1.0 2.Java中除数不可以为0&#xff0c…

华为配置ARP安全综合功能实验

配置ARP安全综合功能示例 组网图形 图1 配置ARP安全功能组网图 ARP安全简介配置注意事项组网需求配置思路操作步骤配置文件 ARP安全简介 ARP&#xff08;Address Resolution Protocol&#xff09;安全是针对ARP攻击的一种安全特性&#xff0c;它通过一系列对ARP表项学习和A…

如何用MapTalks IDE来发布网站?

简介 MapTalks IDE 全称 MapTalks集成设计环境&#xff08;Integrated Design Environment&#xff09;&#xff0c;是由MapTalks技术团队开发的新一代web地图设计软件。 通过MapTalks IDE&#xff0c;您可以自由的创建二维和三维地图&#xff0c;在其中载入或创建地理数据&a…

Opencv(C++)学习 TBB与OPENMP的加速效果实验与ARM上的实践(二)

在上一篇文章中&#xff0c;我们成功验证了Intel Threading Building Blocks (TBB) 与 OpenMP 在多线程并行处理方面的加速潜力。为了更深入地理解这些技术在实际应用场景中的效能提升&#xff0c;接下来我们将目光转向目标开发板环境&#xff0c;进一步探究这两种框架在嵌入式…

Vue-49、Vue技术实现动画效果

1、首先&#xff0c;在Vue项目中的src/components文件夹下创建一个名为AnimatedBox.vue的文件。 2、编辑AnimatedBox.vue文件&#xff0c;添加以下代码&#xff1a; <template><div class"animated-box" click"toggle"><transition name&q…

文本生成高清、连贯视频,谷歌推出时空扩散模型

谷歌研究人员推出了创新性文本生成视频模型——Lumiere。 与传统模型不同的是&#xff0c;Lumiere采用了一种时空扩散&#xff08;Space-time&#xff09;U-Net架构&#xff0c;可以在单次推理中生成整个视频的所有时间段&#xff0c;能明显增强生成视频的动作连贯性&#xff…

Fiddler修改https请求与响应 bug修复变灰了选不了等 Fiddle对夜神模拟器抓包设置

不要修改别人的东西&#xff0c;不要修改别人的东西&#xff0c;不要修改别人的东西 只用于自己的网站&#xff0c;自己安全调试。 fiddler修改https请求 1、打到要改的请求 2、替换请求内容 3、开启捕获。操作产生请求。 4、fiddler里查看请求或响应数据 &#xff0c;确认成…

RK3588平台开发系列讲解(视频篇)H.264码流结构介绍

文章目录 一、 码流查看工具二、 I帧、 P帧、 B帧三、序列四、GOP, 即关键帧间隔五、片和宏块沉淀、分享、成长,让自己和他人都能有所收获!😄 📢H.264码流结构介绍。 一、 码流查看工具 ① H.264码流查看工具: Elecard_streamEye、 Elecard StreamEye Tools、 Special…

[嵌入式系统-7]:龙芯1B 开发学习套件 -4- LoongIDE 集成开发工具的使用-创建应用程序工程、编译、下载、调试

目录 前言&#xff1a; 步骤1&#xff1a;设置工作工作空间 步骤2&#xff1a;设置工具链 步骤3&#xff1a;创建裸机应用程序 步骤4&#xff1a;创建带实时操作系统的应用程序 步骤5&#xff1a;编译 步骤6&#xff1a;下载调试 前言&#xff1a; LoongIDE集成开发环境…

使用post-css实现移动端适配

介绍移动端适配以及适配方案 适配原因 移动端不像PC端,有足够大的屏幕展示较多的内容不同的移动端设备&#xff0c;有不同屏幕宽度同样大小的页面元素在不同屏幕宽度设备展示时&#xff0c;布局就会错乱有些元素没有展示在可视范围内有些元素不能撑满整个屏幕&#xf…

【保姆级教程】Windows11下go-zero的etcd安装与初步使用

【Go-Zero】Windows11下etcd的安装与初步使用 大家好 我是寸铁&#x1f44a; 总结了一篇Windows11下etcd的安装与初步使用的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言&#xff1a; 在使用etcd 前&#xff0c;我们需要了解一下etcd 是什么&#xff0c;为什么使用etcd…

运维SRE-04 磁盘管理体系

磁盘管理体系详解 磁盘管理系统概述 目标 熟练掌握常用磁盘配置(容量,转速,个数)熟练说出来或写出来: raid级别熟练掌握磁盘基础使用:拿到一块硬盘到可以向硬盘写入数据分区,格式化,挂载熟练掌握: 磁盘空间不足 no space left on device 故障,原因,排查,解决. 磁盘基础内容 …