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

用变量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 0printf("-|name-|\t|-Jobnum-|\t|-salary|-\n");printf("-|%s-|\t|-%d-|\t|-%d-|-\t\n",a.name,a.Jobnum,a.salary);
#endifprintf ("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].nameprintf("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.mzph.cn/news/662363.shtml

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

相关文章

Leetcode—2950. 可整除子串的数量【中等】Plus(前缀和题型)

2024每日刷题&#xff08;一零八&#xff09; Leetcode—2950. 可整除子串的数量 算法思想 让 f ( c ) d , 其中 d 1 , 2 , . . . , 9 f(c) d, 其中d 1, 2, ..., 9 f(c)d,其中d1,2,...,9. // f(c1) f(c2) ... f(ck) / k avg // > f(c1) f(c2) ... f(ck) - …

[opencvsharp]C#基于Fast算法实现角点检测

角点检测算法有很多&#xff0c;比如Harris角点检测、Shi-Tomas算法、sift算法、SURF算法、ORB算法、BRIEF算法、Fast算法等&#xff0c;今天我们使用C#的opencvsharp库实现Fast角点检测 【算法介绍】 fast算法 Fast(全称Features from accelerated segment test)是一种用于角…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

Spring:JDBCTemplate 的源码分析

一&#xff1a;JdbcTemplate的简介 JdbcTemplate 是 Spring Template设置模式中的一员。类似的还有 TransactionTemplate、 MongoTemplate 等。通过 JdbcTemplate 我们可以使得 Spring 访问数据库的过程简单化。 二&#xff1a;执行SQL语句的方法 1&#xff1a;在JdbcTempla…

前端性能优化:Vue项目打包后app.xxx.js 和 chunk-vendors.xxx.js 文件太大,导致页面加载时间太长

问题场景&#xff0c;如下图&#xff0c;环境上的 app.js 和chunk-vendors.js 两个文件大小&#xff0c;高达3.4M 和 2M &#xff0c;加载所耗费的时间也很长。 下面说一下如何解决&#xff1a; 1、首先需要安装插件 compression-webpack-plugin&#xff0c;我这里用的是6.1.1…

情人节送什么礼给男朋友合适?适合送男友的礼物合集

情人节即将来临&#xff0c;作为贴心的女友&#xff0c;你是否已经开始为男友精心挑选礼物了呢&#xff1f;为了让这个特殊的日子充满温馨与甜蜜&#xff0c;选择一份既实用又充满心意的礼物是至关重要的&#xff0c;下面为大家推荐一些适合在情人节送给男友的好物&#xff0c;…

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习&#xff0c;勤奋工作&#xff0c;让青春更加光彩。 前言 自然语言处理&#xff08;NLP&#xff09;是人工智能领域中与人类语言相关的重要研究方向&#xff0c…

腾讯主导制定全球首个车载小程序国际标准,助力车载应用生态发展

2024年1月&#xff0c;国际电信联盟标准部门&#xff08;ITU-T&#xff09;正式发布了由腾讯主导制定的《F.749.8 In-vehicle multimedia applets: Framework and functional requirements》(车载多媒体小程序框架和技术需求)国际标准。 这是全球首个由中国企业主导制定的车载小…

LNMP环境搭建动态网站

一、环境准备 服务器&#xff1a;openEuler 22.03 Linux IPV4 &#xff1a;192.168.110.144/24 网页服务器&#xff1a;Nginx1.21.0 数据库&#xff1a;MySQL 8.0.36 PHP&#xff1a;8.0.30 1.安装软件 [rootnode3 ~]# yum install php-mysqlnd php php-gd php-fpm php-xml -y…

在ESXi中部署时出现the host does not support intel vt-x

在VCenter中新建了一台ESXi用于部署VCSA进行实验 在部署VCSA的第二阶段&#xff0c;出现the host does not support intel vt-x&#xff0c;部署失败。 解决办法&#xff1a;点进ESXi虚拟机的设置界面&#xff08;要先关机&#xff09;&#xff0c;将硬件虚拟化打开&#xff0c…

【Vue3+Vite】路由机制router 快速学习 第四期

文章目录 路由简介路由是什么路由的作用 一、路由入门案例1. 创建项目 导入路由依赖2. 准备页面和组件3. 准备路由配置4. main.js引入router配置 二、路由重定向三、编程式路由(useRouter)四、路由传参(useRoute)五、路由守卫总结 路由简介 路由是什么 路由就是根据不同的 URL…

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

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

Windows - 防火墙 - 如何开启单个端口以供Web应用访问(以82端口为例) - 开启端口后还是访问失败了?

Windows - 防火墙 - 如何开启单个端口以供Web应用访问(以82端口为例) - 开启端口后还是访问失败了&#xff1f; 前言 在网上搜“防火墙开启某个端口”供其他机器访问&#xff0c;都是只讲到了“如何允许某个端口被访问”&#xff0c;而没有后续了。 我之前就遇到过这个问题&…

数据据库八之 视图、触发器、事务

【零】准备数据 【1】创建表 &#xff08;1&#xff09;部门表 d_id是部门的编号d_name是部门的名字 # 确保表不存在 drop table if exists department; # 创建表 create table department( d_id int auto_increment primary key, d_name varchar(6) )auto_increment 501 …

2024-01-06-AI 大模型全栈工程师 - 机器学习基础

摘要 2024-01-06 阴 杭州 晴 本节简介: a. 数学模型&算法名词相关概念; b. 学会数学建模相关知识&#xff1b; c. 学会自我思考&#xff0c;提升认知&#xff0c;不要只会模仿&#xff1b; 课程内容 1. Fine-Tuning 有什么作用&#xff1f; a. 什么是模型训练&#xff…

Linux(一)

目录结构 【在 Linux 世界里&#xff0c;一切皆文件】 linux 的文件系统是采用级层式的树状目录结构&#xff1b; 序号名称介绍备注1/&#xff1a;根目录一般根目录下只存放目录&#xff0c;在 linux 下有且只有一个根目录&#xff0c;所有的东西都是从这里开始&#xff1b; 当…

Open CASCADE学习|曲面上一点的曲率及切平面

曲率&#xff08;Curvature&#xff09;是一个几何学的概念&#xff0c;用于描述一个物体的形状在某一点上的弯曲程度。在我们日常生活中&#xff0c;曲率与我们的生活息息相关&#xff0c;如道路的弯道、建筑物的拱形结构、自然界的山脉等等。了解曲率的概念和计算方法&#x…

Unity中开发程序打包发布

添加ESC脚本 使用Unity打包发布的过程中&#xff0c;考虑到打开的程序会处于全屏界面&#xff0c;而此时我们又会有退出全屏的需求&#xff0c;因此需要添加ESC脚本&#xff0c;当我们单击ESC脚本的过程中&#xff0c;退出全屏模式。 在Assets/Scenes下&#xff0c;创建esc.cs…

Python之PySpark简单应用

文章目录 一、介绍1.准备工作2. 创建SparkSession对象&#xff1a;3. 读取数据&#xff1a;4. 数据处理与分析&#xff1a;5. 停止SparkSession&#xff1a; 二、示例1.读取解析csv数据2.解析计算序列数据map\flatmap 三、问题总结1.代码问题2.配置问题 一、介绍 PySpark是Apa…

Linux离线安装Telnet

前言&#xff1a;由于服务器部署在内网环境&#xff0c;不能yum安装 1.先从网站下载好我们所需要到的三个rpm包http://www.rpmfind.net/linux/rpm2html/search.php?queryxinetd&submitSearch...&system&arch image.png 三个依赖包分别是&#xff1a; -rw-r--r-- 1…