C语言程序设计 结构体和共用体样本教案
C语言程序设计教案 结构体与共用体
printf(“No.
name
sex
age\n”);
for(p=stu;p<stu+3;p++)
printf(“%5d%-20s%2c%4d\n”,p->num,p->name,
p->sex,p->age);}
三、用指针处理链表
链表是一种常见的数据结构,是动态地进行存储分配的一种结构。
用数组存放数据时,必须事先定义固定的长度。比如有的班级有
例 对候选人得票的统计程序。设有三个候选人,每次输入一个得 票的候选人的名字,要求最后输出各人得票结果。
程序如下: #include <stdio.h> struct person {char name[20];
int count; }leader[3]={“li”,0,“zhang”,0,“fun”,0}; main() {int i,j;char leader_name[20]; for(i=1;i<=10;i++) {scanf(“%s”, leader_name);
┄ char addr[30]; }; Struct student student[10];
2.结构体数组的初始化 其初始化和数组的初始化相似。 3.结构体数组的应用举例
结构体数组 和数值型数 组不同之处 在于每个数 组元素都是 一个结构体 类型的数据。
定义了一个 student,其 元素为 Struct student 类型 数据,数组中 有 10 个元素。
{ int month;
先声明一个
int day; int year; }
Struct date 类型,然后在 Struct
C语言程序设计 - 结构体和共用体-样本教案
用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:
C程序实验报告十 结构体与共用体
实验10 结构体与公用体1.实验目的、要求(1)掌握结构体类型变量的定义和使用。
(2)掌握结构体类型数组的概念和使用。
(3)掌握公用体的概念与使用。
2.实验内容(1)输入程序并运行,观察运行结果#include “stdio.h”int main( ){ struct cmplx{ int x;int y;} cnum[2]={1 , 3 , 2 , 7};printf(“%d\n”, cnum[0].y / cnum[0].x * cnum[1].x );return(0); }运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按任意键返回源程序行,按ctrl+F9运行,按alt+F5看结果,结果显示:6(2)输入程序并运行,观察运行结果union ks{ int a;int b;};union ks s[4];union ks *p;#include “stdio.h”int main( ){ int n=1, i;printf(“\n”);for(i=0;i<4;i++){ s[i].a=n;s[i].b=s[i].a+1;n=n+2;}p=&s[0];printf(“%d,”,p->a);printf(“%d” ,++ p->a);return(0); }运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按任意键返回源程序行,按alt+F5看结果,结果显示:23(3)编写程序有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。
要求用input 函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
#include"stdio.h"struct student{char num[6];char name[8];int score[4];float avr;}stu[10];main(){int i,j,max,maxi,sum;float average;for(i=0;i<10;i++){printf("number");scanf("%s",stu[i].num);printf("name");scanf("%s",stu[i].name);for(j=0;j<3;j++){printf("\nscore\n");scanf("%d",&stu[i].score[j]); } }average=0;max=0;maxi=0;for(i=0;i<10;i++){sum=0;for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].avr=sum/3.0;average+=stu[i].avr;if(sum>max){max=sum;maxi=i; }}average/=5;printf("number name score1 score2 score3 average\n");for(i=0;i<10;i++){printf("%8s%10s",stu[i].num,stu[i].name);for(j=0;j<3;j++)printf("%7d",stu[i].score[j]);printf("%6.2f\n",stu[i].avr); }printf("average=%5.2f\n",average);printf("The best student is %s,sum=%d\n",stu[maxi].name,max);}运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按要求输入十个学生的数据,按任意键返回源程序行,按alt+F5看结果,结果显示:number name score1 score2 score3 average01 san 76 87 79 80.6702 tian 65 75 86 75.3303 yuan 98 68 78 81.3304 ping 97 86 78 87.0005 shuo 65 74 82 73.6706 ying 90 80 68 79.3307 xiao 87 80 58 75.0008 hu 64 98 60 74.0009 xing 65 82 90 79.0010 xu 60 98 76 78.00average=156.67The best student is ping,sum=2613.思考及总结(1结构体、共用体定义方式、引用方式和功能的相同点与不同点。
工作手册式C语言程序设计(第2版)课件 项目9 结构体与共用体
6
2 培养学生独立思考的能力。
任务3 师生信息统计
1. 共用体类型的含义
2. 共用体变量的定义
9.1 单个学生信息及成绩统计
9.1.1 结构体类型的定义
项目9 结构体与共用 体
结构体属于构造类型,其由若干个成员组成,成员的类型既可以是基本数据类型,也可以是构造类型,而且可以 互不相同。
结构体遵循“先定义后使用”的原则,其定义包含两个方面,一是定义结构体类型;二是定义该结构体类型的变 量。如平时所说的学生,它是一个群体的类型,而具体的张三、李四等对应学生类的某个对象,可将它的数据赋值给 学生类的相关变量。
9.3 师生信息统计
项目9 结构体与共用 体
【 例 9.5】编写程序引用共用体变o.h>
union data { int x;
char z;
};
int main( ) { union data d1;
d1.x=8;
d1.z="a";
printf("d1.x=%d\n",d1.x);
项目9 结构体与共用 体
3. 直接定义结构体变量 struct { 数据类型成员名1;
数据类型成员名2; …… 数据类型成员名n; }结构体变量; 例如: struct { int sno; char name[10]; char classname[20]; float grade[5]; }stu1; 小提示:采用这种方式定义的结构体没有类型名 称,会影响在后面的程序中定义同类型的变量。
C语言程序设计实验报告(结构体和共用体)
C语言程序设计实验报告(结构体和共用体)1实验目的1、掌握结构体类型变量的定义和使用;2、掌握结构体类型变量数组的概念和使用;3、掌握链表的概念,初步学会对链表进行操作;4、掌握共用体的概念和使用。
2实验内容1)在一个结构体数组中存入三个人的姓名及年龄,输出三者中年龄居中者的姓名及年龄。
要求:1、三个人的数据采用直接初始化的方式赋值;2、利用结构体指针实现处理过程。
3算法描述流程图4源程序#include<stdio.h>main(){struct students{char name[10];int age;} stu[3]={{"Jack",17},{"Anne",16},{"Tom",19}},stu1[3];struct students *stu2=&stu[0],*t=&stu1[0];int i,j,k;for(i=0;i<2;i++){k=i;for(j=i+1;j<3;j++){if(((stu2+j)->age)<((stu2+k)->age))k=j;}*t=*(stu2+k);*(stu2+k)=*(stu2+i);*(stu2+i)=*t;}printf("三人中年龄居中者姓名:%s,年龄:%d\n",stu[1].name,stu[1].age); }5测试数据{"Jack",17},{"Anne",16},{"Tom",19}6运行结果7出现问题及解决方法;实验中,引用结构体数组出现错误,忘记写{},指针的初始化忘记写*,这些问题都是些低级错误,不应该犯的,在循环中,i的初始化错误。
以后应更加仔细,多注意细节问题,很多时候细节是决定事情的关键。
8实验心得在本次试验中,我通过学习和实践,对结构体类型变量的定义和使用以及链表的概念有了更清楚的理解,初步学会了对链表进行操作,掌握了结构体类型变量数组以及共用体的使用。
C语言程序设计第9章结构体与共用体简明教程PPT课件
//书名 //作者 //出版社 //价格
【例9.2】定义一个结构体类型struct student,描 述学生的基本信息,包含学号、姓名、性别和成绩
struct student { int num; //学号 char name[20]; //姓名 char sex; //性别, M-男,F-女 float score; //成绩 };
第9章
结构体与共用体
第9类型,但在实际问题中, 数据要复杂一些,往往具有不同的数据项和类型: 例如: 图书基本信息 用户自定义 学生基本信息 数据类型 球赛基本信息 ……
方法:创建结构体类型、共用体类型(或称为联合 体类型)和枚举类型
C语言程序设计 第9章 结构体与共用体 2
9.1 结构体类型
整 型
单精度型float
基本类型
实型(浮点型)
双精度型double
字符类型char
C 数 据 类 型
数组 构造类型
结构体struct 共用体union 枚举类型enum 指针类型
本章所介绍 空类型void 的数据类型
C语言程序设计
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
C语言程序设计
定义了结构体类型: struct book 定义了结构体变量: book1,book2;
第9章 结构体与共用体
14
• 方式三:
定义无名结构体类型的同时定义结构体变量
struct { 成员列表 } 变量名列表; struct { char name[40]; char author[100]; char publish[100]; float price; }book1,book2; 说明:第三种方法,由于没 有给出结构体类型标识符, 在实际应用中,此方法往往 是一次性的,适用于定义临 时的局部变量或者嵌套的结 构体成员变量。
C语言程序设计 - 结构体和共用体-样本教案
1.用指针处理链表
指向结构体类型数据的指针;用指针处理链表
3.结构变量在函数中的应用
在C语言中,允许结构变量的成员,结构变量的整体和结构变量的地址做为实参传递给相应的形参。
(1)向函数传递结构变量的成员
结构变量的成员作实参
结构变量的成员可以是普通变量,数组或指针变量,它们做实参时的情况同以前七,八,九章所讲。
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
35个字节
35个字节
35个字节
指向结构类型的指针变量:
如:struct student *pstd;
系统为该指针变量分配一个存放"地址"的4个字节的内存空间,具体该指针变量指向哪个结构类型变量,通过为该指针变量赋予某结构变量地址值来确定.
如下例:
struct student *pstd1,*pstd2,*pstd3;
pstd1=&std;/*pstd1指向结构变量std的首地址*/
pstd2=pers;/*pstd2指向结构数组pers的首地址*/
pstd3=(struct student*)malloc(size of (struct student));
说明:结构变量名不是指向该结构的地址, 这与数组名的含义不同,
C语言程序设计实验结构体与共用体
实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。
二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。
输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。
2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。
编程输入人员数据,再以表格输出。
三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。
对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。
对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。
基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。
C语言电子教案第9章__结构体与共用体
9.1 结构体类型与结构体变量的定义
9.1.2 结构体变量定义 用户自己定义的结构体类型,与系统定义的标准 类型(int、char等)一样,可用来定义结构体变量 的类型。 结构体变量的定义方式有两种: (1)间接定义法:先定义结构体类型、再定义结 构体变量 结构体变量的类型名有两部分组成:一是关键字 struct;二是程序员定义的结构体名,一般形式为: struct 结构体名 结构体变量名
9.4 指向结构体类型数据的指针
9.4.2 指向结构数组的指针 如果指针变量pointer已指向某结构数组, 则pointer +1指向结构数组的下一个元素, 而不是当前元素的下一个成员。 另外,如果指针变量pointer已经指向一个 结构体变量(或结构数组),就不能再使 之指向结构体变量(或结构数组元素)的 某一成员。
9.1 结构体类型与结构体变量的定义
(2)直接定义法:在定义结构体类型的同 时,定义结构体变量 同时定义结构体类型及其结构体变量的一般 格式如下: struct [结构体类型名] { …… } 结构体变量表; 要是定义多个。可以用逗号表达式分开。
9.2 结构体变量的引用与初始化
9.2.1结构体变量的引用规则 结构体类型变量的各成员不能用结构体名一起引 用,必须单独引用,成员运算符”.”具有最高优先 级。对于结构体变量,要通过成员运算符”.”,逐 个访问其成员,且访问的格式为: 结构体变量.成员 /*其中的”.”是成员运算符*/ 要引用结构体变量student1中的学号no,可以用 student1.no来表示;表示的意思 是引用结构体变量student1中的name成员,等等。
9.1 结构体类型与结构体变量的定义
结构体类型中的数据项的定义十分灵活。既可以是基本数 据类型,又可以是数组,还允许是另一个已经定义的结构 体类型。 例如定义一个包含学生信息的结构体类型: struct student 变量 内存地址 { no FFDC char no[7]; name FFE3 sex FFEC char name[9]; birthday.year FFF0 char sex[4]; birthday.month FFF2 struct date birthday; birthday.day FFF4 };
C教案chapter7_结构体与共用体
例1
统计候选人选票
struct person { char name[20]; int count; }leader[3]={"Li",0,"Zhang",0, "Wang",0}; main() { int i, j; char leader_name[20]; for(i=1; i<=10; i++) { scanf("%s", leader_name); for(j=0; j<3; j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } for(i=0; i<3; i++) printf("%5s:%d\n", leader[i].name, leader[i].count); }
§7.6 结构体和指针
指向结构体变量的指针
定义形式:struct 结构体名 *结构体指针名;
例 struct student *p;
struct student 存放结构体变量在内存的起始地址 p num { int num; name char name[20]; stu sex char sex; age int age; } stu; struct student *p=&stu;
§7.3 结构体变量的引用
引用规则
结构体变量不能整体引用,只能引用变量成员
引用方式: 结构体变量名.成员名
例 struct student 可以将一个结构体变量赋值给另一个结构体变量 成员(分量)运算符 int num; 1 例 struct student { 优先级: stu1.num=10; 结构体嵌套时逐级引用 例 struct student { int num; char name[20]; 结合性:从左向右 { int num; 例 struct name[20]; char sex; char student char name[20]; stu1.score=85.5; 例 structchar num; student { int sex; int age; printf("%d,%s,%c,%d,%f,%s\n",stu1); (×) if(stu1==stu2) char sex; { int age; num; stu1.birthday.month=12; char name[20]; float score; int …….. (×) int age; char score; name[20]; char addr[30]; struct date float stu1.score+=stu2.score; float char addr[30]; stu1={101,"Wan Lin",'M',19,87.5,"DaLian"}; (×) sex; }stu1,stu2; score; { int month; char char addr[30]; stu1.age++; birthday int age;day; int }stu1, stu2; num name float score; }stu1, stu2; month day year int year; stu2=stu1; ( ) char addr[30]; }birthday; }stu1, stu2; }stu1, stu2;
四川大学《c语言程序设计》课件-第8章 结构体与共用体
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员
C语言程序设计-电子教案 第9章 结构体、共用体和枚举类型
第9章 结构体、共用体和枚举类型
9.1 结构体
9.1.3 结构体数组的定义与使用
一个结构体变量只能存放一个对象(如一个学生)的数据,如 果要存放一所学校所有的学生数据就要用到数组,这就是结构体数 组。结构体数组的每个数组元素都是一个结构体类型的变量。 1.结构体数组的定义 (1)先定义结构体类型再定义结构体数组。例如:
struct worker { char name[20]; char sex; int age; float salary; }; struct worker w[50];
第9章 结构体、共用体和枚举类型
9.1 结构体
9.1.3 结构体数组的定义与使用
1.结构体数组的定义 (2)定义类型的同时定义数组。例如:
第9章 结构体、共用体和枚举类型
9.1 结构体
9.1.3 结构体数组的定义与使用
2.结构体数组的初始化 结构体数组在定义时可以直接进行初始化。例如:
struct worker { char name[20]; char sex; int age; float salary; } w[50]={ {"LiuGang",'M',30,5500},{"WangKe",'F',25,4000}};
结构体变量.结构体成员名
– 其中符号“.”称为成员运算符。
struct student { char num[11]; char name[10]; char sex; int age; char nation; char addr[20]; }stu1; strcpy(, "LiMing" ); stu1.age=19;
结构体与共用体教案
通过结构体和共用体的组合使用,可以实现自定义数据类型,以满足特定应用的需求。例 如,可以定义一个结构体来表示复数,其中包含一个共用体来存储实部和虚部(可以是整 数或浮点数)。
06
实验与练习
实验目的和要求
掌握结构体和共用体的定义和使 用方法
理解结构体和共用体的内存分配 方式
能够运用结构体和共用体解决实 际问题
共用体
对共用体变量赋值时,每次只能给其 中一个成员赋值,其他成员的值会被 覆盖。同样使用点运算符访问成员。
应用场景不同
结构体
适用于表示一个复杂对象,该对象包含多个不同类型的数据成员,且这些成员 需要同时存储和操作。例如,学生信息、员工记录等。
共用体
适用于节省内存空间的情况,当多个数据成员不会同时出现时,可以使用共用 体来共享内存空间。例如,处理网络通信协议中的不同消息类型。
能够运用结构体和共用体解决实际编程问 题。
教学内容
结构体与共用体的定义和语法规 则。 结构体与共用体的内存分配及成 员访问方式。 结构体与共用体的应用实例。
教学方法与手段
采用讲授、案例分析、编 程实践等多种教学方法相 结合。
利用多媒体教学手段,包 括PPT演示、程序演示等。
通过编程实践,让学生亲 自动手实现结构体和共用 体的相关操作,加深对知 识点的理解和掌握。
共用体变量的引用
```
在任何时候,只有一个成员的值是有效的。因此,在 访问共用体的成员之前,必须确保已经正确设置了该 成员的值。否则,可能会得到未定义的结果。此外, 由于共用体的所有成员都共享同一块内存空间,因此 它们的内存地址是相同的。这意味着可以使用类型转 换来将共用体的成员转换为其他类型。但是,这样做 可能会导致未定义的行为,因此应该谨慎使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果省略变量名std,pers[3],*pstd, 则变成对结构的说明.
可以省略结构名,用一个无名结构类型直接定义结构类型变量。
例:
struct
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
}std,pers[3],*pstd;
普通结构变Leabharlann :std;结构数组变量:pers[3];
指向该结构类型的指针变量:*pstd.
格式二:紧跟在结构类型说明之后进行结构变量定义:
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
}std,pers[3],*pstd;
1)结构变量的定义
象其它类型的变量一样,在使用结构变量时要先对其定义。结构变量可以是普通结构变量,结构数组,和结构指针等形式.
定义结构变量有三种格式,现分别举例说明:
先声明一个
Struct date
类型,然后在定义Structstudent类型时,将成员
Birthday定义为Struct date类型。
Structstudent
{intnum;
char name[20];
char sex;
int age;
float score;
char addr[30]; };
说明:
1.Struct是一个关键字,标志着这是一个结构体类型。
2.Structstudent是一个类型名。
二、结构类型的使用步骤
step1:说明所定义的结构类型的结构形式,成员构成;
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三: 使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
4)"成员变量名"是构成结构的每一个成员变量的名称,相当于数据库二维表中的各字段名.
例1:
struct date
{int year;
int month;
int day;
};
例2:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
}
在C语言中,结构类型可以嵌套定义,所以以上两例可以合并为:
struct student
{ char name[12];
char sex;
struct date
{ int year;
int month;
int day;
} birthday;
float sc[4];
}
(2)结构变量的定义及结构变量的内存分配:
12个
字节
1个
2个
2个
2个
4个
4个
4个
4个
结构数组变量如:struct student pers[3];
结构体与共用体第一讲
内容
说明
主要
内容
重点
难点
问题
提出
1.结构体的概念及其基本操作
2.结构体变量的引用方法
3.结构体数组的使用
例子:
int a[5];
通过举例说明定义结构体类型的必要性。
和基本类型变量进行比较分析,进一步说明必须定义结构体类型。
强调
注意与以往变量应用的区别
1.对结构体类型的理解
2.结构体类型的使用
结构体变量的引用
前面已经介绍了基本数据类型──整型、浮点型、字符型,也介绍了一种构造类型──数组,数组中各元素是属于同一种类型的。
例如:一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,各项的数据类型并不相同(如下图)
num name sex age score addr
10010
Li Fan
m
sturct date birthday;
float sc[4];
}STD_GRADE;
STD_GRADEstd,pers[3],*pstd;
说明:
这里STD_GRADE为用户定义的一个结构类型的类型名.
因此可用它来定义结构变量,而不再需要关键字sturct了.
结构体数组和数值型数组不同之处在于每个数组元素都是一个结构体类型的数据。
18
88
chengde
如果将num、name、sex、age、score、addr分别定义为互相独立的简单变量,难以反映它们之间的内在联系,如何解决此类问题呢?
一、结构体类型引入
处理这样的二维表数据时,通常以记录为单位进行处理,而每条记录中包含多种数据类型,按以前所讲的数据类型没有办法处理。故引入了结构类型。即将多个基本类型作为一个集体定义成一种新的用户自定义类型。例:
结构类型说明的一般格式为:
比较
举例
struct 结构名
{
类型名1成员变量名1;
类型名2成员变量名2;
...
类型名n成员变量名n;
}
说明:
1)"struct"是关键字,是结构类型的标志;
2)"结构名"是用户所说明的结构类型的名称的标识符,而不是变量名,以后可用它来定义结构变量.
3)"类型名"为以前所讲的各种数据类型(int, char等),也可以是已说明的结构类型。
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
相当于建立数据库二维表的表结构.
step2:用所定义的结构类型定义结构变量(记录变量);
相当于为数据库二维表的各记录定义一个记录名.
step3:通过所定义结构变量(记录变量)访问对应记录中的成员.
相当于编辑数据库二维表的记录中的各项.
(1)结构类型的说明:
在Turbo C中, 结构也是一种数据类型,但不同二维表所对应的结构不同,故在使用前需要对结构情况进行说明,即结构类型的说明.
先提示讲解
typedef
注意理解
难点
2)结构变量的内存分配
普通结构变量如:struct student std;
系统为该结构变量分配内存时,所分配的字节数为该结构变量所包含的各个成员变量所占字节数之和,即35个字节.
如下图所示:
Namesexyear month daysc[0]sc[1]sc[2]sc[3]