c语言第9章结构体
- 格式:ppt
- 大小:612.50 KB
- 文档页数:51
C语⾔-结构体定义的⼏种⽅式若struct后⾯接的是名字,则其为该结构体的名称。
第⼀种是最基本的结构体定义,其定义了⼀个结构体A。
struct A //第⼀种{int a;};第⼆种则是在定义了⼀个结构体B的同时定义了⼀个结构体B的变量m。
struct B //第⼆种{int b;}m;第三种结构体定义没有给出该结构体的名称,但是定义了⼀个该结构体的变量n,也就是说,若是想要在别处定义该结构体的变量是不⾏的,只有变量n这种在定义结构体的同时定义变量才⾏。
struct//第三种{int c;}n;第四种结构体定义在第⼀种结构定义的基础上加了关键字typedef,此时我们将struct D{int d}看成是⼀个数据类型,但是因为并没有给出别名,直接⽤D定义变量是不⾏的。
如D test;,不能直接这样定义变量test。
但struct D test;可⾏。
typedef struct D //第四种{int d;};第五种结构体定义在第四种结构体定义的基础上加上了别名x,此时像在第四种结构体定义中说得那样,此时的结构体E有别名x,故可以⽤x定义E的结构体变量。
⽤E不能直接定义,需要在前⾯加struct,如struct E test;。
typedef struct E //第五种{int e;}x;第六种结构体定义在第五种的基础上减去了结构体名,但是若是直接使⽤y来定义该结构体类型的变量也是可以的。
如y test;。
(常⽤)typedef struct//第六种{int f;}y;。
第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。
A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。
✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。
malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。
答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。
✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。
A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。
✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。
它应该等于结构体每个成员所占的字节数之和。
m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。
第九章 结构体与共用体一、 教案头: 教学内容第九章 结构体与共用体2 学时认知目标(应知)技能目标(应会): 了解结构体的意义和基本概念 : 能够正确定义和引用结构体变量 : 能够采用指针引用结构体变量 : 能够通过指针引用结构体数组 : 使用结构体变量作函数参数 : 使用结构体指针作函数参数 : 掌握共用体的结构和特点 : 掌握枚举的结构和特点 :typedef 定义类型的意义 : 引用结构体变量成员,引用结构体数组元素的成员 : 结构体指针变量与其所指变量的关系 : 结构体指针变量作函数参数 : 通过指针引用结构体数组 : 通过指针操作字符串 : 掌握共用体变量的定义和引用 : 了解在程序中枚举的应用 : 读程序能够理解typedef 定义的类型 情感目标(理解)教学目标(重点难点)教学目标 : 培养学生自主探究学习、求真务实的品德 : 培养学生细致钻研的学风 : 培养学生努力拓展思维;理论与实际相结合的思维习惯 : 指向结构体的指针 : 结构体数组成员的引用 : 结构体变量作函数参数 : 共用体的存储特性 : 链表的结构特点和操作处理 内容概述 Ø 教材章节: 9.1 结构体类型和结构体变量 9.2 结构体数组 9.3 结构体指针 9.4 用指针处理链表 9.5 共用体类型 9.6 枚举类型 9.7 用typedef命名类型 Ø 教授内容: l 本章讲解了什么是结构体类型,以及如何使用结构类型变量、结构体数组、结构体指针,什么是共用体,它和结构体的异同,以及共用体变量的引用 l 本章还讲解了枚举类型、以及如何使用typedef命名类型 能力训练及任务案例 任务9-1: 结构体变量初始化 任务9-2:结构体数组举例 任务9-3: 指向结构体变量的指针变量示例 任务9-4: 指向结构体数组元素的指针的应用 任务9-5: 结构体变量作函数的参数示例 任务9-6: 指向结构体的指针作函数参数示例任务9-7: 建立静态链表示例 任务9-8:建立动态链表示例 任务9-9: 单链表的输出 任务9-10:共用体示例任务9-11:枚举类型示例 任务9-12:学生信息表(单链表)的基本操作参考资料C 程序设计教程,谭浩强 著,清华大学出版社,2007.07C 程序设计教程学习辅导,谭浩强 编著,清华大学出版社,2007.10 网络学堂:考试系统:无忧网络考试系统 http://10.1.89.100/webexam二、 教学设计 1.专业英语词汇 英文词汇中文名structure 结构member 成员tag 标记function 函数Enumerate 枚举 Define 定义 Union 联合(共用体) create 创建Insert 插入delete 删除Modify / update 修改 2.教学方法 引入结构体概念后采用项目拓展、实例分析引导,递进驱动。
上机报告9 结构体一、上机内容:1)观察以下程序:#include <stdio.h>#define FORMAT "%d\n%s\n%f\n%f\n%f\n"struct student{ int num;char name[20];float score[3]; }stu={12345, "LiLi",67.5, 89, 78.6};void main(){void print(struct student *); //形参类型指向结构体的指针变量print( &stu );} //实参为stu的起始地址void print(struct student *p) //形参为指向结构体的指针变量{printf(FORMA T,p->num,p->name,p->score[0],p->score[1],p->score[2]) ;//用指针变量调用各成员的值}1、修改程序,单独定义student结构。
struct student{ int num;char name[20];float score[3]; };请定义一个名为st的变量。
定义时不对变量赋初值。
编写一个函数,用来给结构变量赋值。
struct student st;scan(struct student *p){(*p).num=12345;(*p).score[0]=67.5;(*p).score[1]=89.0;(*p).score[2]=78.6;strcpy((*p).name,"LiLi");}2、不定义结构变量,定义一个结构指针,在内存中开辟一个空间,用来存储一个student结构体类型的数据,并以把数据{12345, "LiLi",67.5, 89, 78.6}按结构体的存储格式存储到开辟的内存空间中。