6- 利用结构体类型解决实际问题_第1页
6- 利用结构体类型解决实际问题_第2页
6- 利用结构体类型解决实际问题_第3页
6- 利用结构体类型解决实际问题_第4页
6- 利用结构体类型解决实际问题_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本书结合汽车技术发展和汽车类专业特点,按照“由简到难、循序渐进”的原则,共设置了“绪论”“汽车程序设计基础”“汽车嵌入式技术基础”三部分内容。通过本书的学习,可以从整体上加深理解汽车电子控制系统的组成和工作原理,对后续的汽车电子控制技术类课程和智能网联汽车技术类课程学习奠定良好的汽车计算机基础。

本书特色:任务驱动,理实一体,学以致用。内容组织由简到难、循序渐进,灵活采用对比法、类比法、启发法、实验法等多种教学方法,有效降低教学难度和学习难度。

本书可作为高职院校汽车类专业的汽车计算机基础教材,也可供从事相关技术的工程人员参考。第1单元:C语言程序设计入门第2单元:利用三种结构程序解决实际问题第3单元:利用数组处理同类型的批量数据第4单元:利用函数实现模块化程序设计第5单元:灵活使用指针处理问题第6单元:利用结构体类型解决实际问题汽车程序设计基础

第6单元利用复杂的构造类型解决实际问题

数组是将相同类型的多个数据组合在一起。对于不同类型的一组数据,如一名学生的学号为整型,姓名为字符型,性别为字符型,成绩为实型,能否用数组存放该学生的这些信息呢?——可用结构体类型将不同类型的若干个数据组合在一起。

【单元导读】单元学习目标:(1)掌握结构体类型的声明方法。(2)掌握结构体变量的定义、初始化及成员引用方法。(3)掌握结构体指针的定义方法和应用方法。(4)掌握typedef声明类型别名的方法。(5)能够利用结构体变量处理一组数据。(6)能够利用结构体指针引用结构体数据。C语言允许用户自己建立由不同类型(或同类型)数据组成的组合型数据结构——“结构体”。任务6.1声明一个结构体类型【同步练习6-1】知识巩固。任务6.2利用结构体变量处理一组数据6.2.1定义结构体变量的方法

在声明类型后可以随时定义变量,使用灵活。

声明的结构体类型,仅相当于一个模型,其中并无具体数据,系统并不对其分配内存空间。系统只对变量或数组分配内存空间,因此为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量或数组。

能直接看到结构体的结构,较为直观,在编写小程序时常用此方法。

没有结构体名,不能再用此结构体类型去定义其他变量,实际应用较少。注意:结构体变量所占的内存长度是各成员所占内存长度之和,并且结构体变量在程序执行期间,所有成员一直驻留在内存中。(1)先声明结构体类型

再定义结构体变量(2)在声明结构体类型的

同时定义结构体变量

(3)不指定结构体名而

直接定义结构体变量

定义的两个变量stu1和stu2都具有structStudent类型的结构:stu1stu26.2.1定义结构体变量的方法任务6.2利用结构体变量处理一组数据说明:

(1)结构体中的成员也可以是一个结构体类型的变量。例如:(2)结构体中的成员名可与程序中其它变量同名,但二者代表不同的对象,互不干扰。6.2.2结构体变量的初始化任务6.2利用结构体变量处理一组数据

和其他类型的变量一样,结构体变量可以在定义时进行初始化赋值。初始化列表是用花括号括起来的一些常量(依次赋给结构体变量中的成员)。6.2.3结构体变量的引用

在定义结构体变量以后,便可引用该变量。C允许具有相同类型的结构体变量相互赋值;而对结构体变量的输入、输出及各种运算都是通过结构体变量的成员来实现的。任务6.2利用结构体变量处理一组数据

结构体变量成员的引用形式:结构体变量名.成员名

若成员本身又是一个结构体类型,则必须逐级找到最低级的成员才能使用。例如:stu1.birthday.month为第1名学生出生的月份例如:stu1.stu_ID即第一名学生的学号

stu2.sex

即第二名学生的性别

成员(分量)运算符“.”的优先级最高。stu1.stu_ID作为一个整体看待。6.2.3结构体变量的引用任务6.2利用结构体变量处理一组数据【例6.1】结构体变量的初始化和引用。#include

<stdio.h>#include

<string.h>structStudent

//声明结构体类型{

int

stu_ID;

//学号

charname[20];//姓名

floatscore;

//成绩};intmain(void){

structStudent

stu1

=

{1001,"SunLi",

75.0};//定义stu1变量并初始化

structStudentstu2,

stu3;//定义stu2、stu3变量

stu2.stu_ID=

1002;

//引用结构体变量成员,并赋值strcpy(stu2.name,

"ZhangPing");

stu2.score

=

80.0;

stu3

=

stu1;

//结构体变量相互赋值printf("学号\t姓名\t\t成绩\n");printf("%d%-20s%4.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%-20s%4.1f\n",stu2.stu_ID,stu2.name,stu2.score);printf("%d%-20s%4.1f\n",stu3.stu_ID,stu3.name,stu3.score);}【同步练习6-2】知识巩固。6.3.1指向结构体变量的指针

定义结构体指针变量的一般形式为:

struct结构体名

*结构体指针变量名;

例如:structStudent*pstu;

指针变量pstu就可以用来指向structStudent类型的变量。

结构体指针是用来指向结构体数据的指针,若把一个结构体数据的起始地址赋给一个指针变量,则该指针变量就指向这个结构体数据。任务6.3利用结构体指针引用结构体变量6.3.1指向结构体变量的指针任务6.3利用结构体指针引用结构体变量【例6.2】通过3种方式访问结构体变量中的成员。

若结构体指针变量指向了一结构体数据,则访问结构体数据的成员有3种形式:(1)结构体变量名.成员名

例如stu1.name

(2)(*结构体指针变量名).成员名例如(*pstu).name(3)结构体指针变量名->成员名例如pstu->name#include

<stdio.h>structStudent

//声明结构体类型{

int

stu_ID;

//学号

charname[20];//姓名

float

score;

//成绩};intmain(void){

structStudent

stu1

=

{1002,

"张三强",

78.5};//定义结构体变量stu1并赋值

structStudent*pstu

=

&stu1;//定义结构体指针变量pstu,并指向变量stu1printf("学号姓名成绩\n");printf("%d%s%.1f\n",stu1.stu_ID,stu1.name,stu1.score);printf("%d%s%.1f\n",(*pstu).stu_ID,(*pstu).name,(*pstu).score);printf("%d%s%.1f\n",pstu->stu_ID,pstu->name,pstu->score);}stu1pstu【例6.3】用结构体指针变量作函数参数,输出结构体变量的值。6.3.2结构体指针变量作函数参数

将一个结构体数据传递给另一个函数时,若采用“地址传递”的方式(用指向结构体数据的指针变量作函数参数,将结构体数据的起始地址传递给形参),则会减少时间和空间上的开销,大大提高程序执行效率。任务6.3利用结构体指针引用结构体变量#include<stdio.h>structStudent

//声明结构体类型{

intstu_ID;

//学号

charname[20];

//姓名

floatscore;

//成绩};voidoutput(structStudent

*p);

//函数声明intmain(void){ structStudentstu1={1002,"张三强",

78.5};

//定义结构体变量stu1并赋值

structStudent

*pstu

=

&stu1;//定义结构体指针变量pstu,并指向变量stu1

output(pstu);

//调用函数,结构体指针变量作函数实参}voidoutput(structStudent

*p)

//结构体指针变量作函数形参{

printf("学号姓名成绩\n");printf("%d%s%.1f\n",p->stu_ID,p->name,p->score);}【同步练习6-3】知识巩固与运用。任务6.4用typedef声明类型别名

除了可以直接使用C语言提供的基本类型名(如int、char、float、double、long等)和用户自己声明的结构体等类型外,还可以用typedef为已有的类型名声明类型别名。1、用“简单且见名知意”的类型别名替代已有或复杂的类型名(1)替代基本类型typedefchar

int_8;//用int_8代表有符号8位整型typedefshortint

int_16;//用int_16代表有符号16位整型typedefunsignedchar

uint_8;//用uint_8代表无符号8位整型或字符型typedefunsignedshortint

uint_16;//用uint_16代表无符号16位整型经过上述声明后,即可用类型别名定义变量,如:int_8

i;//定义有符号8位整型变量iuint_16

j;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论