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

用变量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.hqwc.cn/news/443526.html

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

相关文章

前端Web开发

安装flask框架 pip install flask 导入flask模块 from flask import Flask 【可能遇到的问题】 出现了如下警告&#xff1a; WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.You should consider upgrading via the D:\Python\python…

【Tomcat与网络2】一文理解Servlet是怎么工作的

在前面&#xff0c;我们研究了如何用idea来启动一个Servlet程序&#xff0c;今天我们就再来看一下Servlet是如何工作的。 目录 1.Servlet 介绍 2.Servlet 容器工作过程 3.Servlet的扩展 不管是电脑还是手机浏览器&#xff0c;发给服务端的就是一个 HTTP 格式的请求&#xf…

力扣hot100 划分字母区间 贪心 思维 满注释版

Problem: 763. 划分字母区间 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 代码随想录 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public List<Integer> partitionLabels(String s){// 创建哈希…

基于SpringBoot的高校社团管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是何时&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2…

Activiti工作流引擎

一、工作流介绍&#xff1a; 1.1 概念&#xff1a; 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或…

CRM系统能为企业解决5大痛点

客户关系管理&#xff08;CRM&#xff09;系统是企业最有价值的工具之一&#xff0c;但也可能是管理最复杂的工具之一。如果运用得当&#xff0c;CRM系统将帮助企业提高效率&#xff0c;实现增长。一项研究报告指出&#xff0c;客户关系管理工具可将销售额提高 29%&#xff0c;…

LoadRunner从零开始之LoadRunner脚本语言基础

在用LoadRunner 做性能测试的过程中&#xff0c;编写脚本是 一项非常重要的工作。不夸张地说&#xff0c;一个脚本的好坏关系到性能测试的成败。“ 工欲善其事&#xff0c;必先利其器” &#xff0c; 在本章我们将学习LoadRunner 脚本语言以及脚本的开发技巧。 下面 我 们 要 通…

【网络】:网络套接字(TCP)

网络套接字&#xff08;TCP&#xff09; 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM&#xff08;提供可靠的连接…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…

STM32实时时钟(RTC)的配置和使用方法详解

实时时钟&#xff08;RTC&#xff09;是STM32系列微控制器上的一个重要模块&#xff0c;用于提供准确的时间和日期信息。在本文中&#xff0c;我们将详细介绍STM32实时时钟的配置和使用方法。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术同步精进 ❤欢…

43 漏洞发现-WEB应用之漏洞探针类型利用修复

目录 已知CMS开发框架末知CMS演示案例:开发框架类源码渗透测试报告-资讯-thinkphp开发框架类源码渗透测试-咨讯-spring已知CMS非框架类渗透测试报告-工具脚本-wordpress已知CMS非框架类渗透测试报告-代码审计-qqyewu_php未知CMS非框架类渗透测试报告-人工-你我都爱的wg哦~ 已知…

MySQL 核心模块揭秘 | 05 期 | 读事务和只读事务的变形记

事务都以读事务身份启动&#xff0c;读事务和只读事务会在需要时发生变化&#xff0c;它们会怎么变化&#xff1f;这是本文要回答的问题。 作者&#xff1a;操盛春&#xff0c;爱可生技术专家&#xff0c;公众号『一树一溪』作者&#xff0c;专注于研究 MySQL 和 OceanBase 源码…