No.10-2《C语言程序设计》教案备注第十讲结构1.了解结构的含义、说明及变量的定义方法;目的2.了解结构成员的引用和变量的初始化;3.了解结构数组、结构指针的含义及应用;要求4.知道结构在函数间的传递、结构型函数和结构的嵌套学时划分3小时组织形式讲授+自学+独立作业+上机1.说明及定义方法;点2.引用和初始化;难3.结构数组与指针;点[引题】通过前面的学习,我们已经对C语言的主要内容进行了研究。不过,前面我们研究的问题,都是基于对C语言的基本数据类型进行处理。换句话讲,在以前的学习中,我们所处理的数据类型要么是数值型,要么是字符型,或者是具有相同数据类型的数据的集合即数组。然而,在现实生活中,我们往往会遇到把不同数据类型却相互有密切联系的数据进行处理。举个简单的例子讲:我们要通过程序来统计学生的考试成绩,其中,会涉及到学号一字符型、姓名-字符型、各科成绩-数值型。成绩统计考试学号成绩姓名课程1课程2课程3课程4那么,我们不免要问:当涉及到同时处理不同类型的数据时,我们能否象定义数组一样把不同类型的数据放在一起进行处理?如果可以的话,我们如何进行处理?这就是我们今从天要研究的主要内容,也就是教材中的第七章所要研究的主要问题第七章结构、联合和枚举7.1结构的说明和定义一、结构的含义1.什么是结构
《C 语言程序设计》教案 No.10-2 第十讲 结 构 备 注 目 的 要 求 1.了解结构的含义、说明及变量的定义方法; 2.了解结构成员的引用和变量的初始化; 3.了解结构数组、结构指针的含义及应用; 4.知道结构在函数间的传递、结构型函数和结构的嵌套; 学时划分 3 小时 组织形式 讲授+自学+独立作业+上机 重 点 难 点 1. 说明及定义方法; 2. 引用和初始化; 3. 结构数组与指针; [引题]通过前面的学习,我们已经对C语言的主要内容进行了研究。 不过,前面我们研究的问题,都是基于对C语言的基本数据类型进行 处理。换句话讲,在以前的学习中,我们所处理的数据类型要么是数 值型,要么是字符型,或者是具有相同数据类型的数据的集合即数组。 然而,在现实生活中,我们往往会遇到把不同数据类型却相互有密切 联系的数据进行处理。举个简单的例子讲:我们要通过程序来统计学 生的考试成绩,其中,会涉及到学号-字符型、姓名-字符型、各科成 绩-数值型。 成绩统计 那么,我们不免要问:当涉及到同时处理不同类型的数据时,我 们能否象定义数组一样把不同类型的数据放在一起进行处理?如果 可以的话,我们如何进行处理?这就是我们今从天要研究的主要内 容,也就是教材中的第七章所要研究的主要问题。 第七章 结构、联合和枚举 7.1 结构的说明和定义 一、结构的含义 1.什么是结构 学 号 姓 名 考 试 成 绩 课程 1 课程 2 课程 3 课程 4
No.10-3第十讲结构、联合和枚举由不同数据类型的数据所组成的集合体结构说明举例:2.结构成员(元素)structdata(1)每个成员都有不同的名字和数据类型;4说明1. 数组却(2)结构成员通过其名字引用:int day,通过下标int month,;二、结构的说明引用元素;int year,2.结构的1.含义引入为处int yearday,理复杂的对结构的组成成员及其数据类型的描述;int mon name[4];数据结构2.一般格式3;提供了有利手段;struct结构名一一一结构类型标识符或结构类型名1.结构成员名;一一数据类型标识符结构成员表;一3;结构成员为结构:struct data3.注意事项1(1)结构说明只是描述组织形式,不分配存储空间;int day,(2)结构成员可以是变量、数组、指针、结构或联合;int month;(3)结构说明可以在函数内部,也可以在外部;int year,(4)结构成员又可以是一个结构;struct student(5)结构成员的名字可以同程序中的其它变量同名;1二、结构变量的定义结构变量定义举例1:int id,1. 结构变量structempchar name[20];1char sex,;一个结构的对象或实例char *pname;struct date birthday;2.定义方法char addr[80];char sex,(1)说明同时定义int old;1;[存储类型] struct结构名float salary,结构变量定义举例2:1char *addr,structwang,li,zhang结构成员表;1结构变量名表;char*pname;char sex,(2)直接定义int old;【存储类型] structfloat salary,char *addr,结构成员表; wang,li,zhang;
第十讲 结构、联合和枚举 No.10-3 由不同数据类型的数据所组成的集合体 2.结构成员(元素) (1)每个成员都有不同的名字和数据类型; (2)结构成员通过其名字引用; 二、结构的说明 1.含义 对结构的组成成员及其数据类型的描述; 2.一般格式 struct 结构名————结构类型标识符或结构类型名 { 结构成员表;————数据类型标识符 结构成员名; }; 3.注意事项 (1)结构说明只是描述组织形式,不分配存储空间; (2)结构成员可以是变量、数组、指针、结构或联合; (3)结构说明可以在函数内部,也可以在外部; (4)结构成员又可以是一个结构; (5)结构成员的名字可以同程序中的其它变量同名; 二、结构变量的定义 1.结构变量 一个结构的对象或实例 2.定义方法 (1)说明同时定义 [存储类型] struct 结构名 { 结构成员表; }结构变量名表; (2)直接定义 [存储类型] struct { 结构成员表; 说明 1. 数 组 却 通过下标 引用元素; 2. 结 构 的 引入为处 理复杂的 数据结构 提供了有 利手段; int yearday; int mon_name[4]; }; 结构成员为结构: struct data { int day; int month; int year; }; struct student { int id; char name[20]; char sex; struct date birthday; char addr[80]; }; 结构变量定义举例 1: struct emp { char *pname; char sex; int old; float salary; char *addr; }wang,li,zhang; 结构变量定义举例 2: { char *pname; char sex; int old; float salary; char *addr; }wang,li,zhang; struct 结构说明举例: struct data { int day; int month; int year;
No.10-4《C语言程序设计》教案)结构变量名表;结构变量定义举例3:(3)定义和说明分开struct emp[存储类型] struct结构名结构变量名表;(3.注意事项char*pname,char sex,(1)结构变量定义一定在说明后或同时进行:int old,(2)求算结构变量占用内存float salary,sizeof(struct结构名)char *addr,3;struct emp wang,li,zhang,7.2结构成员的引用和变量初始化二、结构成员的引用结构成员引用举例:1.引用方式structemp结构变量名.成员名2.说明int id;“,”是结构成员运算符char*pname,char sex,结合性自左至右(见P24表2.3)int old;3.举例float salary,/*将某年某月某日转化为该年的第几天*char addr[80];main ()/*见P114使用数组*/Iwang,1引用:struct datawang.id1int day,wang.pnameintmonth"int year,wang.addrint yearday,int*mon_name;d;intleap;static int month[2][13]-{说明:(0,31,28,31,30,31,30,31,31,30,31,30,31)教材中少(0,31,29,31,30,31,30,31,31,30,31,30,31));","printf("Enteryear、month and day:"):scanf("%d,%d,%d",&d.year,&d.month,&d.day),leap=d.year%4=-0&&d.year%100-=0ld.year%400-0; d.yearday=d.day;
《C 语言程序设计》教案 No.10-4 }结构变量名表; (3)定义和说明分开 [存储类型] struct 结构名 结构变量名表; 3.注意事项 (1)结构变量定义一定在说明后或同时进行; (2)求算结构变量占用内存 sizeof(struct 结构名) 一、结构成员的引用 1.引用方式 结构变量名.成员名 2.说明 “.”是结构成员运算符 结合性自左至右(见 P24 表 2.3) 3.举例 /*将某年某月某日转化为该年的第几天*/ 说明: 教材中少 “,” }; struct emp wang,li,zhang; 7.2 结构成员的引用和变量初始化 结构成员引用举例: struct emp { int id; char *pname; char sex; int old; float salary; char addr[80]; }wang; 引用: wang.id wang.pname . wang.addr main() /*见 P114 使用数组*/ { struct data { int day; int month; int year; int yearday; int *mon_name; }d; int leap; static int month[2][13]={ {0,31,28,31,30,31,30,31,31,30,31,30,31}, {0,31,29,31,30,31,30,31,31,30,31,30,31}}; printf(“Enter year、month and day:”); scanf(“%d,%d,%d”,&d.year,&d.month,&d.day); leap=d.year%4==0&&d.year%100==0||d.year%400==0; d.yearday=d.day; 结构变量定义举例 3: struct emp { char *pname; char sex; int old; float salary; char *addr;
No.10-5第十讲结构、联合和枚举for(i=-1;i<d.month;i++)d.yearday+=month[leap][i];变量初始化举例:printf("yearday=%din",d.yearday)struct data1(int day,二、结构变量的初始化intmonth;1. 含义int year,在定义结构变量的同时,对其成员变量赋初值int yearday,2.一般形式int mon_name[4];3;struct结构名结构变量名={初始数据);struct date d={28,7,1997,3.注意事项O,"July";(1)只能对外部和静态变量初始化;struct student(2)初始化数据用“,”隔开;1(3)初始化数据个数与成员的个数相同;int id,(4)初始化数据类型与成员对应一致:char name[20]char sex,struct date birthday,char addr[80];}sun=(9304151,"sunping",M,"123 Beijing Road"];7.3结构数组二、含义具有相同结构类型的结构变量组成的数组:二、为何引入结构数组为了处理多个具有相同结构类型的结构变量:三、如何定义结构数组[存储类型] struct结构名结构数组名【元素个数]四、应用举例/*使用结构数组编程处理通讯录*/
第十讲 结构、联合和枚举 No.10-5 二、结构变量的初始化 1.含义 在定义结构变量的同时,对其成员变量赋初值 2.一般形式 struct 结构名 结构变量名={初始数据}; 3.注意事项 (1)只能对外部和静态变量初始化; (2)初始化数据用“,”隔开; (3)初始化数据个数与成员的个数相同; (4)初始化数据类型与成员对应一致; 7.3 结构数组 一、含义 具有相同结构类型的结构变量组成的数组; 二、为何引入结构数组 为了处理多个具有相同结构类型的结构变量; 三、如何定义结构数组 [存储类型] struct 结构名 结构数组名[元素个数]; 四、应用举例 /*使用结构数组编程处理通讯录*/ for(i=1;i<d.month;i++) d.yearday+=month[leap][i]; printf(“yearday=%d\n”,d.yearday); } 变量初始化举例: struct data { int day; int month; int year; int yearday; int mon_name[4]; }; struct date d={28,7,1997, 0,”July”}; struct student { int id; char name[20]; char sex; struct date birthday; char addr[80]; }sun={9304151,”sunping”,’M’, “123 Beijing Road”};
No.10-6《C语言程序设计》教案#include<stdio.h>#include<stdlib.h>#defineMAXNUM3/*定义字符常量做结构数组元素个数*struct student1程序运行情况:charname[20];EnterName?Sunwen<CR>char sex,Enter Sex?M<CR>intold;EnterOld?19<CR>char tel[8];EnterTel.?1099888<CR>charaddr[15];EnterAddress?101Road<CR>3;mainOEnter Name?Liming<CR>1EnterSex?M<CR>struct student man[MAXNUM];EnterOld?19<CR>int i,EnterTel.?1099777<CR>char s[10];EnterAddress?102Road<CR>for (i=0;i<MAXNUM;i++)EnterName?Maxiang<CR>1EnterSex?M<CR>printf("In Enter Name?");Enter Old?19<CR>gets(man[i].name);printf("In Enter Sex?"),EnterTel.?1099666<CR>gets(s);EnterAddress?103Road<CR>man[i].sex=s[0];printf(InEnterOld?");OldTel.NameSexAddressgets(s);man[i].old= atoi(s);M19101RoadSunwen1099888printf("n Enter Tel.?"),M19Liming1099777102Roadgets(man[i].tel);19MaxiangM1099666103Roadprintf("In Enter Address?");gets(man[i].addr);1Tel.printf(lnsexoldAddressln");nameprintf(..-..-In");for (i=0;i<MAXNUM;i++)printf(*%-14s%-7c",man[i].name,man[i].sex);printf(%-7s%-10s%-25sln",man[i].old,man[i].tel,man[i].addr)11五、结构数组的初始化1.初始化的方法(1)形式一[存储类型]struct结构名结构数组名={初始数据};
《C 语言程序设计》教案 No.10-6 #include <stdio.h> #include <stdlib.h> #define MAXNUM 3 /*定义字符常量做结构数组元素个数*/ struct student { char name[20]; char sex; int old; char tel[8]; char addr[15]; }; main() { struct student man[MAXNUM]; int i; char s[10]; for (i=0;i<MAXNUM;i++) { printf(“\n Enter Name?”); gets(man[i].name); printf(“\n Enter Sex?”); gets(s); man[i].sex=s[0]; printf(“\n Enter Old?”); gets(s); man[i].old= atoi(s); printf(“\n Enter Tel.? ”); gets(man[i].tel); printf(“\n Enter Address?”); gets(man[i].addr); } printf(“\n name sex old Tel. Address\n”); printf(“-\n”); for (i=0;i<MAXNUM;i++) { printf(“%-14s%-7c”,man[i].name,man[i].sex); printf(“%-7s%-10s%-25s\n”,man[i].old,man[i].tel,man[i].addr); } } 五、结构数组的初始化 1.初始化的方法 (1)形式一 [存储类型] struct 结构名 结构数组名[]={初始数据}; Enter Sex? M<CR> Enter Old? 19<CR> Enter Tel.?1099666<CR> Enter Address?103Road<CR> Name Sex Old Tel. Address _ Sunwen M 19 1099888 101Road Liming M 19 1099777 102 Road Maxiang M 19 1099666 103Road Enter Tel.?1099888<CR> Enter Address?101Road<CR> Enter Name? Liming <CR> Enter Sex? M<CR> Enter Old? 19<CR> Enter Tel.?1099777<CR> Enter Address?102Road<CR> Enter Name? Maxiang <CR> 程序运行情况: Enter Name? Sunwen<CR> Enter Sex? M<CR> Enter Old? 19<CR>