中国石油大学c语言课件自定义数据类型

上传人:ji****72 文档编号:50960304 上传时间:2018-08-11 格式:PPT 页数:37 大小:1.19MB
返回 下载 相关 举报
中国石油大学c语言课件自定义数据类型_第1页
第1页 / 共37页
中国石油大学c语言课件自定义数据类型_第2页
第2页 / 共37页
中国石油大学c语言课件自定义数据类型_第3页
第3页 / 共37页
中国石油大学c语言课件自定义数据类型_第4页
第4页 / 共37页
中国石油大学c语言课件自定义数据类型_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《中国石油大学c语言课件自定义数据类型》由会员分享,可在线阅读,更多相关《中国石油大学c语言课件自定义数据类型(37页珍藏版)》请在金锄头文库上搜索。

1、第10章 自定义数据类型 1试试并非受罪,问问并不吃亏回顾 编译预处理 不带参数的宏定义 带参数的宏定义2试试并非受罪,问问并不吃亏教学目标 理解为什么使用结构体 定义结构体 声明结构体变量 访问结构体成员 掌握结构体作为函数参数的用法 了解共用体 了解自定义数据类型3试试并非受罪,问问并不吃亏思考 在程序里表示一个人(姓名、年龄、性别、成绩),怎么 表示? 想表示多个人呢? 如何用计算机程序实现下述表格的管理?4试试并非受罪,问问并不吃亏结构体简介I. 使用数组MaryJohnPeterRoseKateFMFMF01020304058978.56797.564解决方案:scorenumsex

2、name不能建立数组间的关系II. 使用多维数组MaryJohnPeterRoseKateFMFMF01020304058978.56797.564C 语言不允许一个数组包含多 种数据类型III. 使用结构体numnamesexscoreC 语言引入了称为结构体的数据存储方式“结构体” 是一种构造数据类型,它是由若干数据项组 合而成的复杂数据对象,这些数据项称为结构体的成员 。5试试并非受罪,问问并不吃亏定义结构体2-1struct structurename datatype variable1; datatype variable2; . ;结构体成员;结构体名structstudenti

3、nt num; char name20; char sex;定义结构体float score;C 语言中的有效数据类型6试试并非受罪,问问并不吃亏定义结构体2-2struct student int num;char name20;char sex;float score; ;num name sexstudent 结构体定义并不预留内存 结构体定义放置在程序的开始部分,位于头文件声明之 后 score 结构体定义仅描述了一个结构体的形式。如果要在程序 里使用结构体,需要声明结构体变量。7试试并非受罪,问问并不吃亏声明结构体变量声明结构体变量struct student int num;cha

4、r name20;char sex;float score; ; struct student student1,student2;I.先定义结构体,再声明结构体变量struct student int num;char name20;char sex;float score; student1,student2;II.在定义结构体类型的同时声明结构体变量struct int num;char name20;char sex;float score; student1,student2;III. 直接声明结构体变量声明一个类型为 student 结构体的变量,将会为该变量分配内存, 大小是大于

5、或等于其所有成员变量的大小之和。 8试试并非受罪,问问并不吃亏struct date int month;int day;int year; ;嵌套结构体structint num;char name20;char sex;struct date birthday;float score; student1,student2;访问成员是通过成员的名字,称为“按名引用”。在程序中使用 结构中成员的方法为:结构体变量名.成员名 例如:student1.num、student2.sex、student1.birthday.month9试试并非受罪,问问并不吃亏内存 student3struct st

6、udent student3=3,“Yao Ming “,M,90.5; 结构体变量初始化3Yao MingM赋值的顺序应与成员声明时的顺序一样;允许 初始化语句中的值的数目比结构体成员数目少 。student3.numstudent3.name student3.sex90.5student3.score10试试并非受罪,问问并不吃亏student1student1.num=1; scanf(“%s“, student1.sex=M; printf(“请输入成绩:n“); scanf(“%f“,结构体变量赋值1Zhang Zi Liang Mq 用输入语句或赋值语句来给结构体变量的各个成员赋

7、值7878 student2 = student1; student21Zhang Zi Liang M78strcpy(student1.name,“ZhangSan“); 11试试并非受罪,问问并不吃亏结构体变量 如果要将“zhang”改为“zhong”,只要将结构变量 student1中的数组成员name下标为2的元素a改为o即 可。可以使用下列语句: student1.name2 = o;/* 为结构变量中的数组成员的一个元素赋值 */12试试并非受罪,问问并不吃亏结构体变量 对结构变量的整体操作 要对结构进行整体操作有很多限制,C语言中能够对 结构进行整体操作的运算不多,只有赋值“=

8、”和取地址 “ sunday = today; /* 结构变量整体赋值 */13试试并非受罪,问问并不吃亏结构体类型的引用 不能将一个结构变量作为一个整体直接访问。例如,已定 义 student1 为结构变量并且已有值。不能这样引用: printf (“%s,%c,%d,%d,%dn“, student1); 如果成员本身又是一个结构类型,则要用若干个成员运算 符,一级一级地找到最低的一级的成员。 只能对最低级的成员进行赋值或存取以及运算。例如,对 上面定义的结构变量student1,可以这样访问各个成员: student1.name student1.sex student1.birthda

9、y.month student1.birthday.day student1.birthday.year14试试并非受罪,问问并不吃亏问题描述:根据学员的成绩,输出不及格学员的详细信息。 使用结构体示例#include struct student int num;/学号 char *name;/姓名 char sex;/性别 float score;/成绩; int main()static struct student stu1=1,“李亚鹏“,M,61; static struct student stu2=2,“周晶晶“,F,92.5; static struct student st

10、u3=3,“姚光明“,M,59; printf(“不及格学员的名单如下:n“);if(stu1.score=60 return 0;不及格学员的名单如下: 3 姚光明 M 59.00stu11李亚鹏M78stu22周晶晶F92stu33姚光明M5915试试并非受罪,问问并不吃亏struct stu *pstu; (*pstu).num 或者: pstu-num结构体指针变量q 一个指针当用来指向一个结构体时, 称之为结构体指针变 量。 q 结构体指针变量中的值是所指向的结构体变量的首地址。 q 结构体指针变量声明的一般形式为:struct 结构体名 *结构体指针变量名 q 通过结构体指针可以访

11、问该结构体变量的成员,一般形式 为:(*结构体指针变量).成员名 或者结构体指针变量-成员名 #include struct student int num; char *name; char sex; float score;stu=1,“张宾“,F,55,*pstu; int main() pstu=printf(“学号:%d 姓名:%sn“,stu.num,stu.name);printf(“性别:%c 成绩:%5.2fnn“,stu.sex,stu.score);printf(“学号:%d 姓名:%sn“,(*pstu).num,(*pstu).name);printf(“性别:%c

12、成绩:%5.2fnn“,(*pstu).sex,(*pstu).score);printf(“学号:%d 姓名:%sn“,pstu-num,pstu-name);printf(“性别:%c 成绩:%5.2fnn“,pstu-sex,pstu-score);return 0; 学号:1 姓名:张宾性别:F 成绩:55.00学号:1 姓名:张宾性别:F 成绩:55.00学号:1 姓名:张宾性别:F 成绩:55.00Press any key to continue16试试并非受罪,问问并不吃亏struct student int num;char* name;char sex;float scor

13、e; stu30;结构体数组q 元素为结构体类型的数组称为结构体数组。 q 在实际应用中,经常用结构体数组来表示具有相同数据结构 体的一个群体。例如一个班的学员档案,一个公司的职工档 案等。定义了一个结构体数组stu1,共有30个元素,stu0 stu29。每个数组元素都具有struct student的结构体形式 。17试试并非受罪,问问并不吃亏问题描述:求学员的总成绩和平均成绩,并统计不及格人数。 结构体指针变量struct student int num; char *name; char sex;float score;stuN= 1,“李芳“,F,45,2,“于红 “,F,62.5,

14、3,“何万山“,M,92.5,4,“程亚丽“,M,87,5,“王明“,M,58; int main( ) int i,count=0; float ave,sum=0; for(i=0;iyear = 2000;p-month = 5;p-day = 22; int main() struct date d;d.year = 1999; d.month = 4; d.day = 23;printf(“%d,%d,%dn”, d.year, d.month, d.day);func( printf(“%d,%d,%dn”, d.year, d.month, d.day);return 0; 19

15、99,4,23 2000,5,2222试试并非受罪,问问并不吃亏结构体成员作为函数参数struct filmchar name25; /电影名char director25; /导演int duration; /片长; void display (char *, char *, int *); int main()struct film f1; printf(“nt 请输入电影的详细信息“);printf(“nn 请输入影片名:“);gets(f1.name);fflush(stdin);printf(“n 请输入导演姓名: “);gets(f1.director);fflush(stdin);printf(“n 请输入电影片长(分钟): “);scanf(“%d“,display(f1.name,f1.director,return 0; void display(char *n, char *d, int *m) printf(“nt 电影的详细信息n“); printf(“n 片名: %s“,n); printf(“n 导演: %s“,d); printf(“n 片长: %dn“,*m); 前两个参数为字符串 ,所以不使用“ /*此结构体表示梯形*/ struct trapezoid double he

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号