C语言教程第8章 结构体.ppt
合集下载
C语言ppt8王春梅
(3) 直接定义结构体变量 struct { char name[10]; long num; char sex; int age; float score[5] ; } student1, student2;
说Fra Baidu bibliotek:
(1) 在定义结构体类型时,系统并不分配内存空间, 仅当定义结构体变量时,系统才为被定义的每 一变量分配相应的存储单元。
(2) 结构体变量的定义一定要在结构体类型定义之
后或同时进行,对尚未定义的结构体类型,不
能用它来定义结构体变量。
结构体变量的初始化
所谓结构体变量初始化,就是对其成员变量赋初值 在赋值时应注意按顺序及类型依次为每个结构体成 员指定初始值。 一般格式: struct 结构体类型名 结构体变量={初始化值列表};
例.在main() 函数中,输入一个学生
返回值为结构体类型的函数
定义返回值为结构体类型函数的一般形式为:
结构体类型名
函数名(形参表)
#include "stdio.h" struct st_type { char num[7]; struct例.main函数中定义一个结构体数组,多次调用 void print(struct st_type s0) st_type input() char name[21]; { { input函数输入各学生的信息,返回值赋给 char struct 结构体数组元素,再多次调用print函数输出。 st_type s0; sex; printf("输出:学号 姓名 性别 年龄 成绩\n"); int ", s0.num); printf("%11sage; printf("请输入姓名(其中可以包含空格):"); float gets(s0.name); s0.name); printf("16s", score; }; printf("%4c", s0.sex); printf("请输入学号、性别、年龄、成绩\n"); scanf("%smain() %f",s0.num,&s0.sex,&s0.age,&s0.score); printf("%8.2f\n", s0.score); %c %d getchar();{ int i; } return s0; struct st_type s[2]; } for(i=0;i<2;i++) s[i]=input(); for(i=0;i<2;i++) print(s[i]); }
C语言第8章的课件
p1
i1
p1
&i1
10
&i1
p2
i2
p2
&i2
20
&i2
运行
i1 20 i2 10
21
注意
*p1表达式表示指针变量p1指向的对象。在访问指针变量 指向对象前,指针变量必需已指向明确。
如:float *pa,a; *pa=3.14; /*错误,因为pa尚未指向任何变量*/ pa=&a; *pa=3.14;/*给pa指向变量赋值*/
&取地址运算符。单目运算符,作用是取操作数地 址。
*指针运算符。单目运算符,作用是对操作数作指 向运算。其操作数必需是一个指针。
如:*p=1表达式表示根据变量p的值,找到其对应 的存储单元,给该单元赋值1。
*(&a)表达式等价于a
16
int * pa,a; pa=&a;
&a
5
pa
a
scanf("%d",pa);/*输入变量a的值,或写为:
10
可以看到,*i_pointer也代表一个变量, 它和变量i是同一回事。下面两个语句作用相 同: ① i=3; ② *i_pointer=3; 第②个语句的含意是将3赋给指针变量 i_pointer所指向的变量。
11
8.2.1 定义指针变量
《C语言程序设计》2教学课件 第8章 结构体及其他构造数据类型
struct emp {
int no; char name[20]; int age; char sex; float salary; char addr[30];
/*声明结构体类型的同时定义变量*/
— 22 —
8.1 结构体
➢ 8.1.3 结构体变量的引用
char state;
}emp1,emp2;
#define EMP struct emp EMP emp1,emp2;
— 11 —
8.1 结构体
➢ 8.1.2 结构体变量的定义
2
在声明结构体类型的同时定义变量
其一般形式为:
struct 结构体名 {
数据类型 成员1的名字; 数据类型 成员2的名字; 数据类型 成员3的名字; … }结构体变量名列表;
printf("sex=%c salary=%f addr=%s\n",emp2.sex,emp2.salary, emp2.addr);
return 0;
}
— 23 —
8.1 结构体
➢ 8.1.3 结构体变量的引用
程序运行的结果为:
input sex salary addr state F 8900 Beijing Y↙ no=1001 name=Zhangping age=20 sex=F salary=8900.000000 addr=Beijing
int no; char name[20]; int age; char sex; float salary; char addr[30];
/*声明结构体类型的同时定义变量*/
— 22 —
8.1 结构体
➢ 8.1.3 结构体变量的引用
char state;
}emp1,emp2;
#define EMP struct emp EMP emp1,emp2;
— 11 —
8.1 结构体
➢ 8.1.2 结构体变量的定义
2
在声明结构体类型的同时定义变量
其一般形式为:
struct 结构体名 {
数据类型 成员1的名字; 数据类型 成员2的名字; 数据类型 成员3的名字; … }结构体变量名列表;
printf("sex=%c salary=%f addr=%s\n",emp2.sex,emp2.salary, emp2.addr);
return 0;
}
— 23 —
8.1 结构体
➢ 8.1.3 结构体变量的引用
程序运行的结果为:
input sex salary addr state F 8900 Beijing Y↙ no=1001 name=Zhangping age=20 sex=F salary=8900.000000 addr=Beijing
2019C语言程序设计PPT第8章结构体程序设计.ppt
C语言程序设计(第3版)张磊编著 清华大学出版社
8.2.3 结构体变量的定义及使用
#include<stdio.h> struct student 2. 引用结构体成员 { int num; char name[20]; 引用结构体成员的一般格式 char sex; int score; 结构体变量名 .成员名称 }stu1,stu2; void main() student1.age 例如: { printf("Data1: "); 例8-2 输入两个学生的信息,然后输出学习成绩高的学生的 scanf("%d %s %c %d",&stu1.num,stu1.name,&stu1.sex,&stu1.score); 姓名和成绩信息。若成绩相同时,只输出第 1个学生的信息。 printf("Data2: "); scanf("%d %s %c %d",&stu2.num,stu2.name,&stu2.sex,&stu2.score); if(stu1.score>=stu2.score) printf("%s,%d\n",stu1.name,stu1.score); else printf("%s,%d\n",stu2.name,stu2.score); }
8.2.3 结构体变量的定义及使用
#include<stdio.h> struct student 2. 引用结构体成员 { int num; char name[20]; 引用结构体成员的一般格式 char sex; int score; 结构体变量名 .成员名称 }stu1,stu2; void main() student1.age 例如: { printf("Data1: "); 例8-2 输入两个学生的信息,然后输出学习成绩高的学生的 scanf("%d %s %c %d",&stu1.num,stu1.name,&stu1.sex,&stu1.score); 姓名和成绩信息。若成绩相同时,只输出第 1个学生的信息。 printf("Data2: "); scanf("%d %s %c %d",&stu2.num,stu2.name,&stu2.sex,&stu2.score); if(stu1.score>=stu2.score) printf("%s,%d\n",stu1.name,stu1.score); else printf("%s,%d\n",stu2.name,stu2.score); }
C语言结构体PPT课件
chaNrumaddnra[m3e0]s;ex};age
§M图o11n-t3h day year
3 结构体变量的初始化
形式一:
struct 结构体名
{ 类型标识符 成员名; 类型标识符 成员名;
……………. }; struct 结构体名 结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; };
20字节 1字节 2字节
score
4字节
…..
addr
30字节
(2)在声明类型的同时定义变量 这种形式的定义的一般形式为: struct 结构体名 { 成员表列 }变量名表列;
例如: struct student
{ int num; char name[20]; char sex;
它的作用与第一种方 法相同,即定义了两 个struct student 类型 的变量:
{int num;
将成员birthday指定为
char name[20];
struct date类型。
char sex;
已声明的类型 struct date
int age;
与其他类型一样可以用来
struct date birthday; /*birtbhirdtahyd定是ay义st成ruc员t d的aat类ded类型r 型。*/
C语言第八章课件
【例8.7】计算最高分
8.4排序和查找
排序(Sorting)算法 – 交换法排序 – 选择法排序
交换法排序
2019/5/12
38/49
交换法排序
2019/5/12
39/49
【例8.8】交换法从高到低排序
交换法排序
for (i=0; i<n-1; i++) {
for (j=i+1; j<n; j++) {
00 00 00 00
3500
④当对二维数组的全部元素或部分赋初值时,定义数 组时第一维的长度可省略,但第二维的长度必须给出 ,系统会根据数据的总个数分配存储空间。如: int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int a[ ][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int a[ ][4]={{1,2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}}; int a[ ][4]={{0,0, 4},{0},{0, 10}};
例:以下不能正确定义二维数组的语句是
。
A) int a[2][2]={{1},{2}}; B) int a[ ][2]={1,2,3,4} ;
C) int a[2][2]={{1},2,3}; D) int a[2][ ]={{1,2},{3,4}};
C语言程序设计课件第8章09110133页PPT
结构类型的型各的个定成义员格式: 成员类型名 成员名;
struct 结构类型名
相同类型的成员名可以
{
共用一个成员类型名
结构体成员表列;
};
必须以分号结束
2020/5/18
3
结构——类型定义
结构类型的定义举例:
struct Date
//表示日期的结构
{
int yr;
//年
iinnttyrm,om; o, da; int da;
• 例:typedef struct D变at量e dDtate;
•
Date dt;
• ((32))在定义结构类型的同时定义其别名 ,结结构构类类型型名名不
省略,将结构类型别名写在结构类型定义结束的右大括号之
后、分号之前
• 例: typedef struct Date //不结省构略类结型构名类省型略名
•{
int yr,mo,da;
//年、月、日
• } Date;
//定义结构类型别名Date
2020/5/18
6
结构变量的访问
结构变量的初始化:与其他类型的变量类似,结构变 量在定义时也可以进行初始化,常用两种方式:
•
(1)将初值用一对大括号括起,依次列出各个成员的值, 所列出的值可以少于成相员当个于数: ,Da默te认d用t2=0填{2充009,4,0};
struct 结构类型名
相同类型的成员名可以
{
共用一个成员类型名
结构体成员表列;
};
必须以分号结束
2020/5/18
3
结构——类型定义
结构类型的定义举例:
struct Date
//表示日期的结构
{
int yr;
//年
iinnttyrm,om; o, da; int da;
• 例:typedef struct D变at量e dDtate;
•
Date dt;
• ((32))在定义结构类型的同时定义其别名 ,结结构构类类型型名名不
省略,将结构类型别名写在结构类型定义结束的右大括号之
后、分号之前
• 例: typedef struct Date //不结省构略类结型构名类省型略名
•{
int yr,mo,da;
//年、月、日
• } Date;
//定义结构类型别名Date
2020/5/18
6
结构变量的访问
结构变量的初始化:与其他类型的变量类似,结构变 量在定义时也可以进行初始化,常用两种方式:
•
(1)将初值用一对大括号括起,依次列出各个成员的值, 所列出的值可以少于成相员当个于数: ,Da默te认d用t2=0填{2充009,4,0};
c语言课件第8章
例:#define G 9.8 main( ) {…… } #undef G f1( ) …… 例:#define R 3.0 # define PI 3.1415 # define L 2*PI*R main( ) { printf(“L=%f\n”,L); }
•
用标识符替换一个常量;该标识符称“ 用标识符替换一个常量;该标识符称“ #define PI 3.141592636 #define MESG “ This is a string\n”
第八章 编译预处理
• 预处理是 语言的一个独特的优点。 预处理是C语言的一个独特的优点。 语言的一个独特的优点
易开发、阅读、修改、移植
• 预处理程序是一个正文处理程序,属于C语言 预处理程序是一个正文处理程序,属于C 编译程序的一部分。 编译程序的一部分。 • C编译预处理程序是在编译第一遍扫描时就处 编译预处理程序是在编译第一遍扫描时就处 源程序文件中使用的几种特殊命令行(#开 理C源程序文件中使用的几种特殊命令行 开 源程序文件中使用的几种特殊命令行 头)。 。
例3: : 以下宏定义: 以下宏定义: #define X 5 #define Y X+1 #define Z Y*X/2 则执行以下printf语句后,输出结果是: A 语句后, 则执行以下 语句后 输出结果是: int a;a=Y; printf(“%d\n”,Z); printf(“%d”,--a); A)7 B) 12 C) 12 D)15 ) ) ) ) 5 6 5 5
c语言结构体.ppt
scanf("%d/%d/%d",&today.year,&today.month,
&today.day);
printf("Today:%d/%d/%d\n",p->year,p->month,
p->day);
}
2020/4/12
1 结构体
22
结构体的指针
tab数组
3). 指向结构体数组的指针
【例】利用结构体指针输出一组化学 元素名称及其原子量。
的数据类型决定
{ char num[8], name[20], sex; struct date birthday; float score; }a;
a.birthday.year a.birthday.month a.birthday.day
结 构 体 变 量 a 的 各 成 员 可 分 别 表 示 为 a.num、 a.name、a.sex、a.birthday、a.score
2020/4/12
1 结构体
15
结构体变量的定义与初始化
“.”是分量运
4). 结构体变量成员的引用
算符,运算级
别最高。
结构体变量成员引用的一般形式:
结构体变量名.成员名
struct date { int year, month, day;}; struct student
中职教育-《C语言程序设计》课件:第8章 结构体(白俊峰 主编 高教版).ppt
▪ (1) struct 结构体标识符 { 成员变量列表; }; struct结构体标识符 变量名={初始化值1,初始化 值2,…, 初始化值n };
C语言程序设计
▪ (2) struct 结构体标识符 { 成员变量列表; } 变量名={初始化值1,初始化值2,…, 初始化值 n };
C语言程序设计
C语言程序设计
▪ 结构体变量的定义有以下三种方式 • 先定义结构体,再定义结构体变量
C语言程序设计
• 在定义结构体的同时定义结构体变量
C语言程序设计
• 直接定义结构体变量
C语言程序设计
8.1.2 结构体变量的引用
在程序中使用结构变量时,往往不把它作为一 个整体来使用。在ANSI C中除了允许具有相同类 型的结构变量相互赋值以外,一般对结构变量的使 用,包括赋值、输入、输出、运算等都是通过结构 变量的成员来实现的。
在内存中,编译器按照成员列表顺序分别为每 个结构体变量成员分配内存,如果想确认结构体占 了多少存储空间,则使用关键字sizeof
结构体变量作为函数参数的函数定义方 式为:
返回类型 函数名称(struct 结构体名称 结构体 变量名) {
函数体; }
C语言程序设计
❖ 8.3.2 结构体变量的成员作为函数参数
▪ 结构体变量的成员作为参数的用法和普通变量作为参数一样 如:有如下结构体变量的定义:
C语言程序设计
▪ (2) struct 结构体标识符 { 成员变量列表; } 变量名={初始化值1,初始化值2,…, 初始化值 n };
C语言程序设计
C语言程序设计
▪ 结构体变量的定义有以下三种方式 • 先定义结构体,再定义结构体变量
C语言程序设计
• 在定义结构体的同时定义结构体变量
C语言程序设计
• 直接定义结构体变量
C语言程序设计
8.1.2 结构体变量的引用
在程序中使用结构变量时,往往不把它作为一 个整体来使用。在ANSI C中除了允许具有相同类 型的结构变量相互赋值以外,一般对结构变量的使 用,包括赋值、输入、输出、运算等都是通过结构 变量的成员来实现的。
在内存中,编译器按照成员列表顺序分别为每 个结构体变量成员分配内存,如果想确认结构体占 了多少存储空间,则使用关键字sizeof
结构体变量作为函数参数的函数定义方 式为:
返回类型 函数名称(struct 结构体名称 结构体 变量名) {
函数体; }
C语言程序设计
❖ 8.3.2 结构体变量的成员作为函数参数
▪ 结构体变量的成员作为参数的用法和普通变量作为参数一样 如:有如下结构体变量的定义:
C语言程序设计 第8章 结构体
本例中,struct student结构体 中又嵌套了stuct birthday结 构体,如图8-1所示:
8.2结构体变量
❖ 8.2.1 结构体变量的定义
▪ 定义结构体变量有以三种方法。 ▪ 1.先定义结构体类型,再定义结构体变量 ▪ 一般形式为: ▪ struct 结构体类型名 ▪{ ▪ 类型说明符 成员名; ▪ }; ▪ struct 结构体类型名 结构体变量名表列;
8.2结构体变量
8.2.3 结构体变量的初始化无参函数举例
#include<stdio.h>
void main()
{struct student
{long int num;
char name[20];
char sex;
char addr[20];
}a={100101,“Li Lin”,‘M’,“123 BeiJing Road”}; //对结构体变量a
student1和student2。
8.2结构体变量
❖ 8.2.1 结构体变量的定义
▪ 3.无名定义,缺省了结构体类型名,直接定义结构体类型变量
▪ 一般形式为: ▪ struct ▪{ ▪ 类型说明符 成员名; ▪ }结构体变量名表列; ▪ 例如: ▪ struct ▪ {int num; ▪ char name[15] ▪ char sex; ▪ int age; ▪ float score; ▪ char addr[30]; ▪ }student1,student2;
C语言第八章PPT课件
18
第18页/共38页
8.3 通过指针引用数组
• 8.3.2 通过指针引用数组元素
• 不同方式访问的程序
int i,a[5]={6,7,8,9,0},*p=a;
for(i=0;i<5;i++)
{
printf("a[%d]=%-4d",i,a[i]);
printf("*(a+%d)=%-4d",i,*(a+i));
3
第3页/共38页
8.2 指针变量
• 8.2.1 使用指针变量的一个例子
• 程序:
void main() {
int a;
int *p;
//定义指针变量,变量前面加*
a=100;
p=&a;
//将变量a的地址赋给指针p
printf("a=%d\n",a);
printf("*p=%d\n",*p) //通过指针访问数据
8.1 什么是指针
• 学习指针的几点建议 • 弄明白存放在内存中的数据是如何访问的 • 这是学习指针的基础 • 清晰的记住指针和变量的几个关系: • 指针的内容,指针指向的内容等等 • 明白指针作为函数参数、返回值的作用 • 将地址传递到函数,使得几个函数变量共同操作一个数据地址,实现 数据交换
1
第18页/共38页
8.3 通过指针引用数组
• 8.3.2 通过指针引用数组元素
• 不同方式访问的程序
int i,a[5]={6,7,8,9,0},*p=a;
for(i=0;i<5;i++)
{
printf("a[%d]=%-4d",i,a[i]);
printf("*(a+%d)=%-4d",i,*(a+i));
3
第3页/共38页
8.2 指针变量
• 8.2.1 使用指针变量的一个例子
• 程序:
void main() {
int a;
int *p;
//定义指针变量,变量前面加*
a=100;
p=&a;
//将变量a的地址赋给指针p
printf("a=%d\n",a);
printf("*p=%d\n",*p) //通过指针访问数据
8.1 什么是指针
• 学习指针的几点建议 • 弄明白存放在内存中的数据是如何访问的 • 这是学习指针的基础 • 清晰的记住指针和变量的几个关系: • 指针的内容,指针指向的内容等等 • 明白指针作为函数参数、返回值的作用 • 将地址传递到函数,使得几个函数变量共同操作一个数据地址,实现 数据交换
1
C语言 第八章 结构体
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
方式二:类型和变量同时定义
enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat}w; 方式三:直接定义枚举变量,省略枚举类型名 enum {Sun,Mon,Tue,Wed,Thu,Fri,Sat}w;
一个结构体数组的元素相当于一个结构体变量。
例:struct student{
long int number; char name[8]; float score[2];
} stud[3]; 引用方式:stud[i].number stud[i].name stud[i].score[ j]
4结构体指针
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
相关主题