《最新在C程序中使用结构体ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新在C程序中使用结构体ppt课件.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、主要内容 什么是结构体什么是结构体 如何定义一个结构体如何定义一个结构体 如何声明结构体变量如何声明结构体变量 如何引用结构体变量:结构体的输入、如何引用结构体变量:结构体的输入、输出操作、结构体成员操作等输出操作、结构体成员操作等 结构体数组结构体数组通讯录每条记录的描述通讯录每条记录的描述:定义结构体类型姓名工作单位家庭住址邮编固定电话E-mail(字符串)(字符串)(字符串)(整型)(字符串)(字符串)王丽北医三院花园路3号于战海交通大队新源里52号struct addr char name20; char depart30; /* 工作单位工作单位 */ char address30;
2、 /* 住址住址 */ int postcode; /* 邮编邮编 */ char phone9; /* 电话号码电话号码 */ char email30; /* E-mail */;声明结构体变量 1)1)定义了结构体类型后,再声明结构体类定义了结构体类型后,再声明结构体类型的变量型的变量struct 结构体类型名结构体类型名结构体成员表结构体成员表;struct 结构体结构体类型名类型名结构体变量名;先定义结构体类型先定义结构体类型再声明结构体再声明结构体类型的变量类型的变量声明结构体变量struct singer int s_id; double s1; /* 参赛歌曲得分 */ dou
3、ble s2; /* 知识问答得分 */ double sum; /* 该选手的总得分 */ ;struct singer a1, a2, a3, a4, a5, a6;类型名类型名变量名变量名声明结构体变量 2) 2) 在定义结构体类型的同时声明结构体变在定义结构体类型的同时声明结构体变量。即将结构体类型的定义和声明结构体量。即将结构体类型的定义和声明结构体变量放在同一个语句中变量放在同一个语句中. . 其一般形式如下:其一般形式如下:struct struct 结构体类型名结构体类型名 结构体成员表;结构体成员表; 结构体变量名表;struct singer int s_id; doubl
4、e s1; double s2; double sum; a1,a2,a3,a4,a5,a6; 声明结构体变量 3)3)在定义结构体类型时省略结构体类型在定义结构体类型时省略结构体类型名,并直接声明结构体变量。名,并直接声明结构体变量。 一般形式如下:一般形式如下:struct 结构体成员表; 结构体变量名表;即即定义定义的的结构体结构体没有没有结构体类型名。结构体类型名。 如果省略结构体类型名如果省略结构体类型名, , 则称之为则称之为无名结构体无名结构体, , 这种情况常常出现在函这种情况常常出现在函数内部。使用这种结构数内部。使用这种结构体定义形式时,一定是体定义形式时,一定是在定义结构
5、体类型的同在定义结构体类型的同时,就声明结构体变量时,就声明结构体变量struct singer int s_id; double s1; double s2; double sum; a1,a2,a3,a4,a5,a6;结构体的长度 结构体类型的长度结构体类型的长度一旦通过结构体类型定义语句定义了一个结构体类型,则这个结构体类型的长度也就被固定下来,. 一个一个结构体类型长度结构体类型长度的的计算计算sizeof(sizeof(结构体类型名结构体类型名) ) 一个一个结构体结构体变量变量长度长度的的计算计算sizeof(sizeof(结构体变量名结构体变量名) )定义结构体类型如 struc
6、t singer int s_id; double s1; double s2; stud1;则结构体变量stud1的长度是多少?sizeofsizeof( (数据类型名数据类型名) )返回返回“数据类型名数据类型名”的类型长度。的类型长度。sizeofsizeof( (变量名变量名) )返回返回“结构体变量结构体变量”的长度。的长度。定义结构体类型#include struct singer int s_id; double s1; double s2; stud1stud1;int main(void) printf(nnt 长度: %d %d, sizeof(struct singer)
7、; printf(nnt 长度: %d %d, sizeof(stud1); return 0;s_long.c结构体变量的初始化结构体变量初始化的一般形式为:结构体变量初始化的一般形式为:方式方式1:struct 结构体类型名结构体类型名结构体变量名结构体变量名 = 初始化数据初始化数据;方式方式2:struct 结构体类型名结构体类型名结构体成员表;结构体成员表; 结构体变量名结构体变量名 = 初始化数据初始化数据 ;方式方式3:struct 结构体成员表;结构体成员表; 结构体变量名结构体变量名 = 初始化数据初始化数据 ;结构体变量的初始化由于结构体类型变量汇集了各类不同数据类型的成员
8、,由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。所以结构体类型变量的初始化就略显复杂。struct ach /*定义学生结构体类型*/ char name20; /* 学生姓名*/ char sex; /* 性别*/ int num; /* 学号*/ float score3; /* 三科考试成绩*/ stu1= Frank, M, 206110, 78.5, 91.5, 95.0 , stu2;结构体变量的引用 C C语言对结构体变量的处理是通过对其语言对结构体变量的处理是通过对其成员成员的引用实现的。的引用实现的。 “. .”被称为被称为成员成员(
9、(分量分量) )运算符运算符它在所有的运算符中优先级最高。它在所有的运算符中优先级最高。引用结构体变量的成员的一般方式为: 结构体变量名.成员名一个整体一个整体结构体变量的引用 从键盘给从键盘给a4a4赋值,然后输出:赋值,然后输出: scanf(%d, ); scanf(%d, ); scanf(%lf%lf, ); scanf(%lf%lf, ); printf( n %d n, ); printf( n %d n, ); printf( %f, %f n, ); printf( %f, %f n, ); printf( %f n, printf( %f n, ); );struct si
10、nger int s_id; double s1; double s2; double sum; a1, a2 = 113045, 80, 78, 0, a3, a4;&a4.s_id&a4.s1, &a4.s2a4.s_ida4.s1, a4.s2a4.sum=a4.s1+a4.s2给a3赋值:将a2的值赋给a3a3=a2;例如:给变量a1赋值 a1.s_id = 102011; a1.s1 = 88.5; a1.s2 = 89; a1.sum = a1.s1+a1.s2;声明结构体变量例如:例如:struct ach /* 定义学生结构体类型定义学生结构体类型 */char name20;
11、 /* 学生姓名学生姓名 */ char sex; /* 性别性别 */ int num; /* 学号学号 */ float score3; /* 三门课程的考试成绩三门课程的考试成绩 */;struct ach stu1=Jonh,M,310,75,96,63, stu2=Lili,F,217,92,87,70; 姓名姓名性别性别学号学号S1S2S3JohnM310759663LiliF217928770类型名类型名声明声明变量名变量名和赋初值和赋初值(stu1.score0+ stu1.score1+ stu1.score2)/3int i;float avg_2, sum=0.0; av
12、g_2= sum/3;求每一位学生求每一位学生的平均成绩的平均成绩avg_1=for( i=0; i3; i+) sum=sum+stu2.scorei;结构体数组struct ach /* 定义学生结构体类型定义学生结构体类型 */char name20; /* 学生姓名学生姓名 */ char sex; /* 性别性别 */ int num; /* 编号编号 */ float score3; /* 三门课程的考试成绩三门课程的考试成绩 */ stu0, stu1 ;struct achchar name20; char sex; int num; float score3; stu2 ;s
13、tu2=John,M,310,75 96,63, Lili,F,217,92,78,70 ; printf(n %s, %f , );stu0.name, stu0.score2如果要输出第一位学生的名字和其最后一科的成绩?如何初始化数组?对结构体做一个说明 结构体类型是人们制造的一种类型,它结构体类型是人们制造的一种类型,它与其他与其他C的基本类型的特性一样的基本类型的特性一样 结构体变量是由结构体声明的变量。它结构体变量是由结构体声明的变量。它与与C的其他基本变量的特性一样的其他基本变量的特性一样 结构体的成员是由结构体的成员是由C的其他类型来定义的其他类型来定义的,为什么结构体的成员不能
14、由其他已的,为什么结构体的成员不能由其他已经定义的结构体来定义呢?!经定义的结构体来定义呢?!结构体定义 namesexheightweightsightcommentleftright再来看一张学生体检表:Frank M 1.78 67.51.0 0.9恐高症Mary F 1.61 58.50.7 0.8青霉素过敏结构体的嵌套 struct sight_table float left; float right; struct case_table char name20; char sex; float height; float weight; struct sight_table si
15、ght; char comment30; health2;结构体的嵌套 对嵌套的结构体变量成员的引用:对嵌套的结构体变量成员的引用:strcpy(health0.name, Frank);health0.sex = M;health0.sight.left = 1.2;health0.sight.right = 1.0;printf(%.2f, %.2f n,health0.sight.left, health0.sight.right); health0health0:是结构体数组是结构体数组healthhealth的第的第1 1个元素个元素Frank举例#include struct da
16、te int year; int month; int day; ; struct good char name20; char place20; int number; float price; struct date deadline; ; 现有库存信息表,包括商品现有库存信息表,包括商品名称、存放地点、库存量、名称、存放地点、库存量、商品单价,入库日期,如商品单价,入库日期,如book,No.3,57000,2book,No.3,57000,20 02.5,2.5,2002009 9,5,1,5,19 9要求用结构体要求用结构体变量变量保存此信保存此信息息,并输出并输出。st_proc.
17、cint main(void) struct good proc;strcpy(proc.name, book);strcpy(proc.place, No.3);proc.price = 202.5;proc.number = 57000;proc.deadline.year = 2009;proc.deadline.month = 5;proc.deadline.day = 19;printf(%s %s %d %.2f %d年%d月%d日n, proc.name, proc.place, proc.number, proc.price, proc.deadline.year, proc.deadline.month, proc.deadline.day); return 0;st_proc.c小结 为什么要引用结构体类型,其特点是什为什么要引用结构体类型,其特点是什么?么? 如何定义结构体类型?如何定义结构体类型? 如何声明结构体变量?如何声明结构体变量? 如何声明结构体数组?如何声明结构体数组? 如何使用结构体变量?如何使用结构体变量? 结构体成员的表示方法和引用方法。结构体成员的表示方法和引用方法。