版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C C C语言程序设计语言程序设计第第1010章章 结构体、共同体与枚举类型结构体、共同体与枚举类型Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C问题:实际应用中,通常会将相关的不同类型的数据项组问题:实际应用中,通常会将相关的不同类型的数据项组成一个有机的整体,这些数据项在计算机中如何表示?成一个有机的整体,这些数据项在计算机中
2、如何表示? 由若干由若干“成员成员”组成组成 ,每一个成员可以是一,每一个成员可以是一个基本个基本数据类型数据类型或者是一个或者是一个结构体类型结构体类型。 学生登录信息学生登录信息学生成绩表学生成绩表这些数据的特点是:这些数据的特点是:1 1、有多项不同类型数据组成、有多项不同类型数据组成2 2、各项数据占用空间大小有可能不同、各项数据占用空间大小有可能不同 C C语言为了表示这种数据,定义了一种语言为了表示这种数据,定义了一种数据结构:结构体。数据结构:结构体。引子引子Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共
3、共同同休休及及枚枚举举类类型型C C第第1010章章 结构体、共同体与枚举类型结构体、共同体与枚举类型l 本章难点本章难点n 结构体类型及变量结构体类型及变量 n 结构体数组的使用结构体数组的使用 n 指针和结构体指针和结构体 n 共用体、枚举、用户自定义类型共用体、枚举、用户自定义类型 共用体类型的数据特点共用体类型的数据特点l 本章要点本章要点Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C10.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初
4、始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数本章主要内容本章主要内容Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用typedef定义类型定义类型本章主要内容本章主要内容Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构
5、体类型定义结构体类型定义结构体是一种结构体是一种构造构造数据类型数据类型一个一个“结构体结构体”类型由若干类型由若干“成员成员”组成,每一个成员组成,每一个成员可以是一个基本数据类型或者是一个结构体类型。可以是一个基本数据类型或者是一个结构体类型。 结构体类型定义结构体类型定义struct struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; . ;成员类型可以是成员类型可以是基本型或构造型基本型或构造型structstruct是是关键字关键字, ,不能省略不能省略合法标识符合法标识符可省可省: :无名结构体无名结构体 10.1 10.
6、1 结构体变量的定义结构体变量的定义Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C定义义结构体类型时,应注意定义义结构体类型时,应注意成员类型可以是除本身结构体类型之外的任何已有类型,也可以成员类型可以是除本身结构体类型之外的任何已有类型,也可以是任何已有类型是任何已有类型( (包括本身类型在内包括本身类型在内) )的指针类型,即构成嵌套的的指针类型,即构成嵌套的结构。结构。当一个结构体类型定义在函数之外时,它具有全局作用域;若定当一个结构体类型定义在函数之外时,它具有全局作用域;若
7、定义在任一对花括号之内,则具有局部作用域,其作用范围是所在义在任一对花括号之内,则具有局部作用域,其作用范围是所在花括号构成的块。花括号构成的块。 结构体是一种复杂的数据类型,是数目固定、类型不同的若干成结构体是一种复杂的数据类型,是数目固定、类型不同的若干成员的集合,结构体类型的定义只是列出了该结构的组成情况,编员的集合,结构体类型的定义只是列出了该结构的组成情况,编译系统并未因此而分配存储空间,当定义了结构体类型的变量或译系统并未因此而分配存储空间,当定义了结构体类型的变量或数组后,编译系统才会分配存储空间。数组后,编译系统才会分配存储空间。成员名可以与程序中的变量名相同,二者不代表同一个
8、对象。成员名可以与程序中的变量名相同,二者不代表同一个对象。 如果两个结构体的成员类型、名称、个数相同,但结构体名不同,如果两个结构体的成员类型、名称、个数相同,但结构体名不同,也是两个不同的结构类型。也是两个不同的结构类型。 例如,可将日期定义为一个结构体:例如,可将日期定义为一个结构体:struct datestruct date int month; int month; int day; int day; int year; int year;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举
9、类类型型C C结构体变量的定义结构体变量的定义先先定义结构体类型,再定义结构体变量定义结构体类型,再定义结构体变量 先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量例如例如在定义结构体类型的同时定义结构体变量在定义结构体类型的同时定义结构体变量 例如例如直接定义结构体变量直接定义结构体变量 例如例如struct stustruct stu int num; int num; char name20; char name20; char sex; char sex; int age; int age; float score; float score; struct date
10、 birthday; struct date birthday;struct stu boy1,boy2;struct stu boy1,boy2;struct stustruct stu int num; int num; char name20; char name20; char sex; char sex; int age; int age; float score; float score; struct date struct date birthday;birthday;boy1,boy2;boy1,boy2;structstruct int num; int num; char
11、 name20; char name20; char sex; char sex; int age; int age; float score; float score; struct date struct date birthday;birthday;boy1,boy2;boy1,boy2;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结
12、构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体变量的引用结构体变量的引用引用方式:引用方式: 结构体变量名结构体变量名. .成员名成员名其中点号其中点号“.”.”称为成员运算符,它在所有的运算符称为成员运算符,它在所有的运算符中优先级最高。中优先级最高。引用结构体变量时,应注意以下几点引用结构体变量时,应注意以下几点不能将一个结构体变量作为一个整体进行输入输出不能将一个结构体变量作为一个整体进行输入输出 如果
13、成员本身又是一个结构体类型,则要用若干个成如果成员本身又是一个结构体类型,则要用若干个成员运算符逐级找到最低一级的成员才能引用员运算符逐级找到最低一级的成员才能引用 对成员变量可以像普通变量一样进行各种运算对成员变量可以像普通变量一样进行各种运算 可以引用结构体变量成员的地址,也可以引用结构体可以引用结构体变量成员的地址,也可以引用结构体变量的地址变量的地址 10.2 10.2 结构体变量的引用和初始化结构体变量的引用和初始化例如,对前面定义的结构变量例如,对前面定义的结构变量boy1boy1和和boy2boy2,其成,其成员的引用形式如下。员的引用形式如下。boy1.num boy1.num
14、 / /* * 第一个人的学号第一个人的学号 * */ /boy2.sex boy2.sex / /* * 第二个人的性别第二个人的性别 * */ /Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体变量的初始化结构体变量的初始化 本例中,对结构体变量本例中,对结构体变量boy1boy1作了初始化赋值,然后把作了初始化赋值,然后把boy1boy1的值整体赋予的值整体赋予boy2boy2,最后用,最后用printfprintf函数输出函数输出boy2boy2各成员的值。各成员的值。例
15、对结构变量初始化。例对结构变量初始化。#include #include main()main() struct stu struct stu int num; int num; char name20; char name20; char sex; char sex; int age; int age; float score; float score; boy2,boy1=102,Zhang ping,M,20,78.5; boy2,boy1=102,Zhang ping,M,20,78.5; boy2=boy1; boy2=boy1; printf(Number:%dnName:%sn,
16、boy2.num,); printf(Number:%dnName:%sn,boy2.num,); printf(Sex:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,boyprintf(Sex:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,boy2.score);2.score); 运行结果:运行结果:Number:102Number:102Name:Zhang pingName:Zhang pingSex:MSex:MAge:20Age:20Score:78.5Score:78.5Cop
17、yright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.410.5结构体变量的定义结构体变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体数组的定义结构体数组的定义结构体数组的每一个元素都具有相同的结构体类
18、型结构体数组的每一个元素都具有相同的结构体类型 三种形式:三种形式:形式一形式一: : struct student int num; char name20; char sex; int age; ;struct student stu2;形式二形式二: : struct student int num; char name20; char sex; int age; stu2;形式三形式三: struct int num; char name20; char sex; int age; stu2; 10.3 10.3 结构体数组结构体数组Copyright Henan Polytechni
19、c University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体数组初始化结构体数组初始化一个结构体数组的元素相当于一个结构体变量,引用一个结构体数组的元素相当于一个结构体变量,引用结构体数组元素的一般形式为结构体数组元素的一般形式为 结构体数组名结构体数组名 下标下标 . .成员名成员名例如例如#include #include struct stustruct stu int num; int num; char name20; char name20; char sex; char sex; float score; float score
20、;boy5=boy5= 101,Li ping,M,45, 101,Li ping,M,45, 102,Zhang ping,M,62.5, 102,Zhang ping,M,62.5, 103,He fang,F,92.5, 103,He fang,F,92.5, 104,Cheng ling,F,87, 104,Cheng ling,F,87, 105,Wang ming,M,58 105,Wang ming,M,58;main()main() int i,c=0; int i,c=0; float ave,s=0; float ave,s=0; for(i=0;i5;i+) for(i=
21、0;i5;i+) s+=boyi.score; s+=boyi.score; if(boyi.score60) c+=1; if(boyi.score-成员名成员名运算符运算符“-”-”的优先级比较高,高于算术运算符、关系运算符、的优先级比较高,高于算术运算符、关系运算符、逻辑运算符逻辑运算符例如例如 +pstu-num +pstu-num 等价于等价于 +(pstu-num)+(pstu-num)结构体指针访问结构体变量的形式也可以表示为结构体指针访问结构体变量的形式也可以表示为( (* *结构体指针变量结构体指针变量).).成员名成员名例如例如 ( (* *pstu).numpstu).n
22、um应该注意应该注意( (* *pstu)pstu)两侧的括号不可少,因为成员符两侧的括号不可少,因为成员符“.”.”的优先的优先级高于级高于“* *” ” 10.4 10.4 结构体指针变量结构体指针变量存放结构体变量在内存的起始地址存放结构体变量在内存的起始地址以下三种形式是等价以下三种形式是等价结构体变量名结构体变量名. .成员名成员名( (* *结构体指针变量结构体指针变量).).成员名成员名结构体指针变量结构体指针变量-成员名成员名结构指针变量的引用结构指针变量的引用#include #include struct stustruct stu int num; int num; ch
23、ar name20; char name20; char sex; char sex; float score; float score;boy=102,Zhang ping,M,78.5,boy=102,Zhang ping,M,78.5,* *pstu;pstu;main()main() pstu=&boy; pstu=&boy; printf(Number=%dtName=%sn,boy.num,); printf(Number=%dtName=%sn,boy.num,); printf(Sex=%ctScore=%fn,boy.sex,b
24、oy.score); printf(Sex=%ctScore=%fn,boy.sex,boy.score); printf(Number=%dtName=%sn,( printf(Number=%dtName=%sn,(* *pstu).num,(pstu).num,(* *pstu).name);pstu).name); printf(Sex=%ctScore=%fn,( printf(Sex=%ctScore=%fn,(* *pstu).sex,(pstu).sex,(* *pstu).score);pstu).score); printf(Number=%dtName=%sn,pstu-
25、num,pstu-name); printf(Number=%dtName=%sn,pstu-num,pstu-name); printf(Sex=%ctScore=%fn,pstu-sex,pstu-score); printf(Sex=%ctScore=%fn,pstu-sex,pstu-score); 运行结果:运行结果:Number=102 Name= Zhang pingNumber=102 Name= Zhang pingSex=M Score=78.500000Sex=M Score=78.500000Number=102 Name= Zhang pingNumber=102 N
26、ame= Zhang pingSex=M Score=78.500000Sex=M Score=78.500000Number=102 Name= Zhang pingNumber=102 Name= Zhang pingSex=M Score=78.500000Sex=M Score=78.500000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C指向结构体数组的指针指向结构体数组的指针 普通数组可以通过指针变量来访问,同样,也可以通普通数组可以通过指针变量来访问,同样,也可以通过
27、结构体指针访问结构体数组。过结构体指针访问结构体数组。 例如例如 pstu=boy;pstu=boy;或或pstu=&boy0;pstu=&boy0;pstupstu就指向了该结构体数组的首地址(即第一个元素就指向了该结构体数组的首地址(即第一个元素boy0boy0的地址)。结构体指针的地址)。结构体指针pstupstu加加1 1则指向下一个元则指向下一个元素素 用指针变量输出结构体数组。用指针变量输出结构体数组。#include #include struct stustruct stu int num; int num; char name20; char name20;
28、char sex; char sex; float score; float score;boy5=boy5= 101,Zhou ping,M,45, 101,Zhou ping,M,45, 102,Zhang ping,M,62.5, 102,Zhang ping,M,62.5, 103,Liu fang,F,92.5, 103,Liu fang,F,92.5, 104,Cheng ling,F,87, 104,Cheng ling,F,87, 105,Wang ming,M,58 105,Wang ming,M,58 ; ;main()main() struct stu struct st
29、u * *ps;ps; printf(NotNametttSextScoretn); printf(NotNametttSextScoretn); for(ps=boy;psboy+5;ps+) for(ps=boy;psnum,ps-name,ps-sex,ps-score); printf(%dt%stt%ct%4.1ftn,ps-num,ps-name,ps-sex,ps-score); 运行结果:运行结果:No Name Sex ScoreNo Name Sex Score101 Zhou ping M 45.0101 Zhou ping M 45.0102 Zhang ping M
30、62.5102 Zhang ping M 62.5103 Liu fang F 92.5103 Liu fang F 92.5104 Cheng ling F 87.0104 Cheng ling F 87.0105 Wang ming M 58.0105 Wang ming M 58.0numnamesexscoreboy0psboy1boy2ps+1Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.410.5结构体变量的定义结构体
31、变量的定义结构体变量的引用和初始化结构体变量的引用和初始化结构体数组结构体数组结构体指针变量结构体指针变量结构体与函数结构体与函数Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C 结构体变量作为函数参数结构体变量作为函数参数 结构体变量的成员可作为函数的实参,用法和普通变结构体变量的成员可作为函数的实参,用法和普通变量作实参一样量作实参一样 例如例如 10.5 10.5 结构体与函数结构体与函数显示学生的基本信息显示学生的基本信息, ,利用结构体变量作为函数参数编程。利用结构体变量作为
32、函数参数编程。#include #include #include #include struct stustruct stu int num; int num; char name20; char name20; char sex; char sex; float score; float score; ; ;main()main() void list(struct stu student); void list(struct stu student); struct stu student; struct stu student; student.num=101; student.num
33、=101; strcpy(, Zhou ping); strcpy(, Zhou ping); student.sex=M; student.sex=M; student.score=45; student.score=45; list(student); list(student); void list(struct stu student)void list(struct stu student) printf(Number=%dtName=%sn,student.num,); printf(Number=%dtNam
34、e=%sn,student.num,); printf(Sex=%cttScore=%fn,student.sex,student.score); printf(Sex=%cttScore=%fn,student.sex,student.score); 运行结果:运行结果:Number=101 Name=Zhou pingNumber=101 Name=Zhou pingSex=M Score=45.000000Sex=M Score=45.000000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体
35、体共共同同休休及及枚枚举举类类型型C C返回结构体类型数据的函数返回结构体类型数据的函数函数的返回值可以是整型、实型或指针类型等函数的返回值可以是整型、实型或指针类型等 例如例如显示学生的基本信息显示学生的基本信息, ,利用结构体变量作为函数参数编程。输入数据部分用函数实现利用结构体变量作为函数参数编程。输入数据部分用函数实现 #include #include struct stustruct stu int num; int num; char name20; char name20; char sex; char sex; float score; float score; studen
36、t; student;main()main() void list(struct stu student); void list(struct stu student); struct stu newstudent(); struct stu newstudent(); student=newstudent(); student=newstudent(); list(student); list(student); void list(struct stu student)void list(struct stu student) printf(Number=%dtName=%sn,stude
37、nt.num,); printf(Number=%dtName=%sn,student.num,); printf(Sex=%cttScore=%fn,student.sex,student.score); printf(Sex=%cttScore=%fn,student.sex,student.score); struct stu newstudent()struct stu newstudent() struct stu newstu; struct stu newstu; scanf(%d,&newstu.num); scanf(%
38、d,&newstu.num); gets(); gets(); scanf(%c %f, &newstu.sex,&newstu.score); scanf(%c %f, &newstu.sex,&newstu.score); return newstu; return newstu; 运行结果:运行结果:101Li ping101Li pingM 76M 76Number=101 Name=Li pingNumber=101 Name=Li pingSex=M Score=76.000000Sex=M Sco
39、re=76.000000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C结构体指针作为函数参数结构体指针作为函数参数结构体指针作为函数的参数时,传递的只是地址,从结构体指针作为函数的参数时,传递的只是地址,从而减少结构变量作参数时引起的空间和时间上的开销而减少结构变量作参数时引起的空间和时间上的开销 例如例如显示学生的基本信息显示学生的基本信息, ,利用结构体指针变量作为函数参数编程。利用结构体指针变量作为函数参数编程。#include #include struct stustruc
40、t stu int num; int num; char name20; char name20; char sex; char sex; float score; float score; ; ;main()main() void list(struct stu void list(struct stu * *student);student); struct stu student; struct stu student; student.num=101; student.num=101; strcpy(, Zhou ping); strcpy(student.na
41、me, Zhou ping); student.sex=M; student.sex=M; student.score=45; student.score=45; list(&student); list(&student); void list(struct stu void list(struct stu * *p)p) printf(Number=%dtName=%sn,p-num,p-name); printf(Number=%dtName=%sn,p-num,p-name); printf(Sex=%cttScore=%fn,p-sex,p-score); print
42、f(Sex=%cttScore=%fn,p-sex,p-score); 运行结果:运行结果:Number=101 Name=Zhou pingNumber=101 Name=Zhou pingSex=M Score=45.000000Sex=M Score=45.000000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用typedef定义类型定义类型Copyr
43、ight Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C位段结构体类型和位段结构体变量位段结构体类型和位段结构体变量C C语言允许在一个结构体中以位为单位来指定其成员所语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为占内存长度,这种以位为单位的成员称为“位段位段”或或称称“位域位域” ” 定义定义例如例如位段结构体变量的定义与结构体变量定义方式相同位段结构体变量的定义与结构体变量定义方式相同位域的引用位域的引用一般形式为:一般形式为:位段结构体变量位段结构体变量. .位
44、域名位域名例如例如 10.6 10.6 位段结构体位段结构体struct struct 位段结构体名位段结构体名 类型标识符类型标识符 位域位域1 1:位域长度;:位域长度; 类型标识符类型标识符 位域位域2 2:位域长度;:位域长度; . . . . . . 类型标识符类型标识符 位域位域n n:位域长度;:位域长度; struct bsstruct bs int a:8; int a:8; int b:2; int b:2; int c:6; int c:6;data;data;位域的引用位域的引用#include #include main()main() struct bs struc
45、t bs unsigned a:1; unsigned a:1; unsigned b:3; unsigned b:3; unsigned c:4; unsigned c:4; bit, bit,* *pbit;pbit; bit.a=1; bit.a=1; bit.b=7; bit.b=7; bit.c=15; bit.c=15; printf(%d,%d,%dn,bit.a,bit.b,bit.c); printf(%d,%d,%dn,bit.a,bit.b,bit.c); pbit=&bit; pbit=&bit; pbit-a=0; pbit-a=0; pbit-b&a
46、mp;=3; pbit-b&=3; pbit-c|=1; pbit-c|=1; printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c); printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c); 运行结果:运行结果:1 1,7 7,15150 0,3 3,1515Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C本章主要内容本章主要内容10.610.710.810.910.10位段结构体位段结构体链表链表共同体共同体枚举类型枚举类型用用
47、typedef定义类型定义类型Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C链表概述链表概述概述,是一种数据结构,可以动态分配内存,链表由概述,是一种数据结构,可以动态分配内存,链表由结点组成,每个结点有数据域和指针域两个域。结点组成,每个结点有数据域和指针域两个域。 “ “头头指针指针”指向第一个元素结点,指针域指向下一结点。指向第一个元素结点,指针域指向下一结点。结构定义,如结构定义,如形式如右图所示形式如右图所示例如例如 10.7 10.7 链表链表struct stustru
48、ct stu int num; int num; char name20 char name20; struct stu struct stu * * next next; struct stustruct stu int num; int num; char name20; char name20; struct stu struct stu * *next;next;Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C动态内存管理动态内存管理内存空间分配函数内存空间分配函数malloc
49、malloc原型原型 void void * * malloc(unsigned int size) malloc(unsigned int size)例例 float float * * pc; pc=(float pc; pc=(float* *)malloc(5)malloc(5* *sizeof(float);sizeof(float);内存空间函数内存空间函数calloccalloc原型原型 void void * * calloc(unsigned n, unsigned size); calloc(unsigned n, unsigned size);例例 pc=(float p
50、c=(float * *)calloc(8,sizeof(float);)calloc(8,sizeof(float);释放内存空间函数释放内存空间函数free free 原型原型 void free(void void free(void * * p); p);例如例如动态数组的建立和使用。动态数组的建立和使用。#include #include #include #include main()main() float float * *pf;pf; int i,n; int i,n; scanf(%d,&n); scanf(%d,&n); pf=(float pf=(flo
51、at * *)malloc(n)malloc(n* *sizeof(float);sizeof(float); for(i=0; in; i+) for(i=0; in; i+)pfi=1.1fpfi=1.1f* *(i+1); /(i+1); /* * 由后缀由后缀f f指定为指定为floatfloat型常量型常量* */ / for(i=0; in; i+) for(i=0; in; i+)printf(%f ,pfi);printf(%f ,pfi); printf(n); printf(n); free(pf free(pf);/);/* *调用调用freefree函数时,会自动将指针
52、函数时,会自动将指针pfpf的类型转的类型转换为换为voidvoid指针类型指针类型 * */ / 运行结果:运行结果:551.100000 2.200000 3.300000 4.400000 1.100000 2.200000 3.300000 4.400000 5.5000005.500000Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C创建链表创建链表读取数据;读取数据;生成新结点;生成新结点;将数据存入新结点;将数据存入新结点;将新结点插入到链表中。将新结点插入到链表中。例
53、如:从键盘读入学生的信息,包括学号、成绩,当例如:从键盘读入学生的信息,包括学号、成绩,当输入的学号为输入的学号为0 0时,表示建立链表结束。时,表示建立链表结束。流程图如图流程图如图 #include #include #include #include #define LEN sizeof(struct stu#define LEN sizeof(struct stu)/)/* *LENLEN为结构体类型为结构体类型struct stustruct stu的长度的长度* */ /struct stustruct stu int num; int num; float score; floa
54、t score; struct stu struct stu * *next; next; ;struct stu struct stu * *creat()creat() struct stu struct stu * *headhead;/;/* * 用于指向链表的第一个结点,即头指针用于指向链表的第一个结点,即头指针 * */ / struct stu struct stu * *p; p; / /* * 用于指向新生成的结点用于指向新生成的结点 * */ / struct stu struct stu * *tailtail;/;/* * 用于指向链表的最后一个结点用于指向链表的最后一
55、个结点 * */ / int x; int x; tail=head=NULL; tail=head=NULL; scanf(%d,&x); scanf(%d,&x); while(x!=0) while(x!=0) p=(struct stu p=(struct stu * *)malloc(LEN);)malloc(LEN); p-num=x; p-num=x; if(head=NULL) head=p; if(head=NULL) head=p; scanf(%f,&p-score); scanf(%f,&p-score); if(tail!=NULL)
56、tail-next=p; if(tail!=NULL) tail-next=p; tail=p; tail=p; scanf(%d,&x); scanf(%d,&x); if(tail!=NULL) tail-next=NULL; if(tail!=NULL) tail-next=NULL; return(head); return(head); Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C顺序访问链表中的结点顺序访问链表中的结点所谓所谓“访问访问”就是对各结点的数
57、据域中的值进行修改、就是对各结点的数据域中的值进行修改、运算、输出等运算、输出等 例如:编写函数,顺序输出链表中各结点数据域中的例如:编写函数,顺序输出链表中各结点数据域中的内容。顺序输出链表的算法比较简单,只需利用一个内容。顺序输出链表的算法比较简单,只需利用一个工作指针工作指针(p)(p)从头到尾依次指向链表中的每个结点,当从头到尾依次指向链表中的每个结点,当指针指向某个结点时,就输出该节点数据域中的内容,指针指向某个结点时,就输出该节点数据域中的内容,直到遇到链表结束标志为止。如果链表为空,就输出直到遇到链表结束标志为止。如果链表为空,就输出提示信息。提示信息。void list(str
58、uct stu void list(struct stu * *head)head) struct stu struct stu * *p;p; p=head; p=head; if(head!=NULL) if(head!=NULL) printf(The list records are:n); printf(The list records are:n); do do printf(%dt%5.1fn,p-num,p-score); printf(%dt%5.1fn,p-num,p-score); p=p-next; p=p-next; / /* * p p指针后移指针后移 * */ /
59、 while(p!=NULL); while(p!=NULL); else else printf(The list is null); printf(The list is null); main()main() struct stu struct stu * *head;head; head=creat(); head=creat(); list(head); list(head); 运行结果:运行结果:101 90101 90102 89102 8900The list records are:The list records are:101 90.0101 90.0102 89.010
60、2 89.0Copyright Henan Polytechnic University 语语言言第第 10 10 章章结结构构体体共共同同休休及及枚枚举举类类型型C C在链表中插入结点在链表中插入结点 指将一个结点插入到一个已有链表中,因此,创建链表的过程,指将一个结点插入到一个已有链表中,因此,创建链表的过程,也可以理解为将一个个结点插入到空链表中。也可以理解为将一个个结点插入到空链表中。算法过程算法过程 输入数据输入数据 生成新结点生成新结点 将数据存入新结点将数据存入新结点 在链表中寻找第一个大于新结点学号的结点在链表中寻找第一个大于新结点学号的结点 如果链表为空,直接插入新结点,即新结点为链表的唯一的结如果链表为空,直接插入新结点,即新结点为链表的唯一的结点点 查找成功,该结点为链表的第一个结点,将链表的头指针指向查找成功,该结点为链表的第一个结点,将链表的头指针指向新结点,新结点的新结点,新结点的nextne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文件和资料的控制措施
- 2019-2020学年高中数学第2章解析几何初步2-1-5平面直角坐标系中的距离公式课件北师大版必修2
- 二零二五年环保项目违约责任承担合同规定3篇
- 高考专题复习探究走向全球化中的国际关系历程课件教学讲义
- 2024年浙江建设职业技术学院高职单招职业适应性测试历年参考题库含答案解析
- 二零二五年机器人技术授权及合作开发合同3篇
- 2024年陇西县中医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 2024年阜阳市第三人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 二零二五年度股份合作企业四股东合作协议3篇
- 2024年沈阳航空职业技术学院高职单招数学历年参考题库含答案解析
- 深孔钻床设备点检表
- 四年级科学《运动与摩擦力》说课课件
- 诉讼费退费确认表
- 全球变暖视野下中国与墨西哥的能源现状分析
- 新外研版八年级上册英语全册教案(教学设计)
- 2022年(高级)茶艺师职业资格考试参考题库-下(多选、判断题部分)
- 边坡安全施工组织方案
- 【讲座】新高考文言文命题特点及备考策略
- 熔炼系统冶金计算相关知识
- 《环境监测》土壤环境质量监测方案设计
- 关于欧盟新版EMC标准EN55032的解析
评论
0/150
提交评论