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

用变量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.mfbz.cn/a/363923.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

这篇秒杀设计都可以拿来讲课了【史上最详细的秒杀设计方案】

文章目录 &#x1f340; 简介&#x1f335; 设计关注点&#x1f332; 瞬时高并发&#x1f333; 页面静态化&#x1f334; 秒杀按钮&#x1f33e; 读多写少&#x1f344; 缓存问题&#x1f680; 缓存击穿&#x1f33d; 缓存穿透 &#x1f34e; 库存问题&#x1f353; 数据库扣减…

【数据结构】 归并排序超详解

1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序…

vulnhub通关-2 DC-2(含靶场资源)

文章目录 一、环境搭建1.环境描述靶场描述题目表述概括&#xff08;目标&#xff09; 2.靶场下载下载地址 3.环境启动 二、渗透靶场1.信息收集&#xff1a;寻找靶机IP分析nmap扫描存活主机 2.信息收集&#xff1a;服务和端口探测命令解析 3.访问Web跳转问题解决办法hosts文件路…

js 设置、获取、删除标签属性以及H5自定义属性

1. 设置标签属性 使用setAttribute()(‘属性名’, ‘属性值’)方法可以添加、修改、删除属性。   下面的demo是为input添加、修改、删除value属性&#xff1a; 1.1. HTML <input type"text" class"input"> <input type"text" class…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

【C语言】数组的应用:三子棋游戏

由于代码较长&#xff0c;为了增加可读性&#xff0c;我们把代码分别写到game.h&#xff0c;game.c&#xff0c;test.c&#xff0c;里面&#xff0c;其中game.h用来声明函数&#xff0c;实现函数功能的代码在game.c&#xff0c;测试游戏的代码在test.c 为了方便后续的更改&…

使用 ChatGPT 为生物信息学初学者赋能

论文&#xff1a;Empowering Beginners in Bioinformatics with ChatGPT. 2023 对于生信初学者而言&#xff0c;最大的困难是身边没有经验丰富的人给予指导。而ChatGTP的出现可能改变这一现状&#xff0c;学生可以自己作为导师&#xff0c;指导ChatGPT完成数据分析工作。 众所周…

Kotlin中的内置函数-apply、let

在使用Kotlin的过程中会经常用到其内置函数&#xff0c;包括apply&#xff0c;let&#xff0c;run&#xff0c;with&#xff0c;also&#xff0c;takeIf,takeUnless函数等&#xff0c;想要更好熟悉Kotlin&#xff0c;这些函数必须烂熟于心&#xff0c;接下来让我们来逐步了解&a…

ubuntu16.04环境轻松安装和应用opencv4.9.0(基于源码编译)

目录 一、环境准备 1、安装cmake 2、安装依赖 3、从github上下载opencv4.9.0.zip 二、安装opencv4.9.0 1、解压4.9.0.zip 2、进入build目录编译 3、安装编译好的相关库 4、修改opencv配置文件并使其生效 5、添加PKG_CONFIG路径&#xff0c;并使其生效 三、opencv环境…

linux安装docker-compose

1:安装 在这里 下载&#xff0c;解压后得到docker-compose文件&#xff0c;放在某个目录后在/etc/profile中配置&#xff0c;我这里如下&#xff1a; 接着执行docker-compose version验证&#xff0c;是否成功&#xff1a; [elklocalhost ~]$ docker-compose version docker…

(2)SpringBoot学习——芋道源码

Spring Boot 的自动配置 1.概述 EmbeddedWebServerFactoryCustomizerAutoConfiguration 类 Configuration // <1.1> ConditionalOnWebApplication // <2.1> EnableConfigurationProperties(ServerProperties.class) // <3.1> public class EmbeddedWebSe…

SV-9032 机架式ip网络采播器

SV-9032是深圳锐科达电子有限公司的一款机架式网络采播器&#xff0c;具有10/100M以太网接口&#xff0c;后面板上有一组AUX音源输入和一组6.35mm接口的麦克风输入&#xff0c;可以直接连接音源输出设备或麦克风&#xff0c;将采集音源编码后发送至网络播放终端上。同时还具有三…

了解 WebSocket 和 TCP :有何不同

WebSocket — 双向通讯的艺术 简要概述 WebSocket 代表着WebSocket通讯协议&#xff0c;提供了一条用于客户端和服务器间实现实时、双向、全双工通信的渠道。在WebSocket引入之前&#xff0c;网页应用的数据更新依赖于频繁的轮询&#xff0c;这种做法不仅效率低下&#xff0c;…

Web实战丨基于Django的简单网页计数器

文章目录 写在前面Django简介主要程序运行结果系列文章写在后面 写在前面 本期内容 基于django的简单网页计数器 所需环境 pythonpycharm或vscodedjango 下载地址 https://download.csdn.net/download/m0_68111267/88795604 Django简介 Django 是一个用 Python 编写的高…

第十四届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)题解

尝试再做一次&#xff0c;我记得还是有点难&#xff0c;我会尽量多写一点解析&#xff0c;尽量让基础比较弱的友友也能看懂&#xff0c;希望能给你带来帮助 目录 1. 日期统计 题目描述 解题思路 具体代码 2. 01 串的熵 题目描述 解题思路 具体代码 3. 冶炼金属 题目…

正点原子--STM32中断系统学习笔记(2)

引言 上篇帖子STM32中断系统学习笔记(1)是理论&#xff0c;这篇帖子开始实战&#xff0c;目标是通过按键实现LED的控制。 1.工程建立 以正点原子HAL库 实验1 跑马灯实验为基础&#xff0c;复制工程&#xff0c;在“Drivers--BSP”目录下建立EXTI文件夹&#xff0c;并创建ext…

2024美国大学生数学建模竞赛A-F题完整思路+配套代码数据+后续高质量参考论文更新

The Mathematical Contest in Modeling (MCM) The Interdisciplinary Contest in Modeling (ICM) 24美赛【完整每问手把手详细思路可修改50页多种思路版本word版保奖论文】配套升级求解代码可视化图表 美赛A-F题完整版获取见文末 下文包含&#xff1a;2024美国大学生数学建模…

美区或其他外区Appstore账号AppleID注册教程,简单快速,苹果必备!

▍前言 现在越来越多的APP在国区APPstore下架&#xff0c;如果想有更好的使用体验&#xff0c;不得不去外区下载APP&#xff0c;那就需要一个外区的apple id&#xff0c;注册也很简单&#xff0c;今天大鹏通过电脑ipad给大家注册一个&#xff0c;建议大家直接使用iPhone或者iPa…

JVM性能分析工具——Arthas及火焰图的使用

Arthas的使用 Arthas常用命令Arthas的安装Linux压测工具Apache Bench安装火焰图的使用火焰图如何分析火焰图的互动 Arthas常用命令 help &#xff1a;查看所有命令dashboard &#xff1a;仪表板&#xff0c;查看线程的CPU信息等heapdump &#xff1a;不同类对象占用内存比重&a…

【微服务核心】Spring Cloud

文章目录 1. 简介2. 微服务项目搭建2.1 父工程2.2 提供者子工程2.3 热部署配置2.4 消费者子工程2.5 项目重构 3. 服务注册与发现3.1 Eureka 服务注册与发现3.1.1 单机版工程搭建3.1.2 单机版改集群版3.1.3 服务发现3.1.4 保护模式 3.2 ZooKeeper 服务注册与发现3.3 Consul 服务…
最新文章