C语言 第10章 结构类型与其他构造类型
合集下载
C语言教学课件

{float x=67,y;
y=2*sin(x*PI/180) ;
printf(“y=%f” , y ) ;
}
29返回
第三章 数据类型、运算符与表达式
§3.3 整型数据
1、常量: 十进制 567 ,-789 ,0 八进制 0567, -0753 十六进制 0x567 , -0xa1
2、变量: int i , j ; i=10 ; j= -10 ;
1+2+3+……+100=5050 或 100+1+99+2+98+……+49+51+50= 100+49*100+50=表示算法)
起止框
输入/出框
处理框
流程线
判断框
连接点
注释框
17
第二章 算法
例2.1 计算265的平方根
开始
顺序结构 X=265
1970 B (取BCPL第一个字母)
1972 C (取BCPL第二个字母)
1978 标准C
1983 ANSI C
1987 87 ANSI C 1990 ISO C
7跳转
第一章 C语言概述
§1.2 C语言特点
1、简练、自由、结构化 (32个关键字、9种控制语句)
2、运算符丰富(附录Ⅲ)34种 3、数据结构丰富
22返回
第三章 数据类型、运算符与表达式
第三章 数据类型、运算符与表达式
§3.1
C的数据类型
基本类型
整型 实型 字符型 枚举型
单精度 双精度
C数据类型
构造类型 指针类型
数组型 结构体型 共用体型
空类型 void(无return的函数)
C语言完整资料

2.2.2 常量
2.2.2.1 字面常量(直接常量)
字面常量是直接表示的常量。
2.2.2.2 符号常量
符号常量是用一个标识符代表一个常量,使用编译预处理命令#define定 义,定义格式为:
#define 常量名 字面常量
精选版ppt
2-311
2.2.3 变量
在程序运行过程中,其值可以改变的量称为变量。 C语言规定,变量要先定义后使用。变量的定义一般在函数的声明部分,格式为:
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
1.2.2.3 C语言程序的执行
C语言程序总是从main()函数的第一条执行语句开始执行,执行完main()函数的最后一 条语句,则整个程序执行结束,而其他函精数选则版通pp过t 嵌套调用得以执行。
1-34
1.2.3 C语言程序书写格式 1. 行的书写格式自由,可从一行的任何位置开始书写。 2. 一行可书写多条语句,一条语句也可分写在几行上。 3. 所有语句都必须以分号“;”结束。 4. 允许使用注释。 C语言的注释格式有两种://,/* …… */。 5. 在书写程序时,通常采用缩格形式书写分层结构的程序。
本章主要介绍C语言的特点,C语言程序的结构与书写规则,C程序上机步骤,编译预 处理,算法的概念及表示。
精选返版回pp目t 录
1-12
1.1 语言的特点
1.语言简洁、紧凑,使用方便、灵活 2.运算符丰富 3.数据类型丰富 4.程序设计结构化、模块化 5.语法限制不太严格,程序设计自由度大 6.C语言允许直接访问物理地址,能进行位(bit)操作 7.生成的目标代码质量高,程序执行效率高 8.可移植性好
2.2.2.1 字面常量(直接常量)
字面常量是直接表示的常量。
2.2.2.2 符号常量
符号常量是用一个标识符代表一个常量,使用编译预处理命令#define定 义,定义格式为:
#define 常量名 字面常量
精选版ppt
2-311
2.2.3 变量
在程序运行过程中,其值可以改变的量称为变量。 C语言规定,变量要先定义后使用。变量的定义一般在函数的声明部分,格式为:
2. 函数体: 函数体为函数首部下面的花括号{……}内的部分。 函数体一般由声明部分和执行部分构成:声明部分定义所用到的变量,声明所调用的函数等; 执行部分有若干语句组成。
1.2.2.3 C语言程序的执行
C语言程序总是从main()函数的第一条执行语句开始执行,执行完main()函数的最后一 条语句,则整个程序执行结束,而其他函精数选则版通pp过t 嵌套调用得以执行。
1-34
1.2.3 C语言程序书写格式 1. 行的书写格式自由,可从一行的任何位置开始书写。 2. 一行可书写多条语句,一条语句也可分写在几行上。 3. 所有语句都必须以分号“;”结束。 4. 允许使用注释。 C语言的注释格式有两种://,/* …… */。 5. 在书写程序时,通常采用缩格形式书写分层结构的程序。
本章主要介绍C语言的特点,C语言程序的结构与书写规则,C程序上机步骤,编译预 处理,算法的概念及表示。
精选返版回pp目t 录
1-12
1.1 语言的特点
1.语言简洁、紧凑,使用方便、灵活 2.运算符丰富 3.数据类型丰富 4.程序设计结构化、模块化 5.语法限制不太严格,程序设计自由度大 6.C语言允许直接访问物理地址,能进行位(bit)操作 7.生成的目标代码质量高,程序执行效率高 8.可移植性好
台州学院C语言程序设计课件——结构体

例: struct Grade_Info { int score; struct Grade_Info *next; }; typedef struct Grade_Info NODE; NODE;
2、线性链表的基本操作 基本操作有:创建、插入、删除、输出和销毁等 基本操作有:创建、插入、删除、输出和销毁等。 链表的创建操作 含义:从无到有地建立起一个链表, 含义:从无到有地建立起一个链表,即往空链表中依次 插入若干结点,并保持结点之间的前驱和后继关系。 插入若干结点,并保持结点之间的前驱和后继关系。 基本思想:首先创建一个头节点,让头指针head和尾指 基本思想:首先创建一个头节点,让头指针head和尾指 tail都指向该节点 并设置该节点的指针域为NULL( 都指向该节点, 针tail都指向该节点,并设置该节点的指针域为NULL(链尾 标志);然后为实际数据创建一个节点,用指针pnew指向它 );然后为实际数据创建一个节点 指向它, 标志);然后为实际数据创建一个节点,用指针pnew指向它, 并将实际数据放在该节点的数据域,其指针域置为NULL; 并将实际数据放在该节点的数据域,其指针域置为NULL;最 后将该节点插入到tail所指向节点的后面 同时使tail指向 所指向节点的后面, 后将该节点插入到tail所指向节点的后面,同时使tail指向 pnew所指向的节点 pnew所指向的节点。 所指向的节点。
以分号; 以分号;结尾
//学号 //学号 //姓名 //姓名 //性别 //性别 //年龄 //年龄 //班级 //班级 //成绩 //成绩
例 2: struct Date { int year; //年 //年 int month; //月 //月 int day; //日 //日 };
2、结构体变量的定义和引用 结构体变量的定义 间接定义法:先定义结构类型,再定义结构变量 间接定义法:先定义结构类型,
C语言第2讲-C语言基本概念

注意事项:
①键入数据可用一个或多个空格、Tab、回车键分隔; ②指定宽度时,键入就不要分隔符,按 个数读 ③当含有其它普通字符时,则键入时必须一一对应完全相同;
①scanf ( " %d %d %d " , &a , &b , &c ) ; 键入3 _ 4 _ 5 ②scanf ( " %3d%3d " , &a , &b ) ; 键入 123 456 7 ③scanf ( " %3c " , &ch) ; 键入abc ④scanf ( " %2d %3d%2d " , &a , &b ) 键入12345678 ⑤不能写成scanf ( " %7.2f " , &x ) ; ⑥scanf ( " %d , %d " , &a , &b ); ⑦scanf ( " %c %c %c " , &c1 , &c2 , &c3 ) ;
3.实数:(实型常量、实型常数)又称之为浮点数; (1)小数表示法:用十进制小数形式表示实数:如:12.34、2.0、0.234等 (2)指数表示形式:如:2E2 或2e2,2.341E-4等等。 注意:①e(E)之前必须有数字;②e之后必须是整数; 4.字符型常量 (1)用一对单引号(单撇)括起来的一个字符;如:‘a‟、‘A‟、 ‘#‟;这种方式表示可显示的字符。 (2)转义字符:用一反斜杠\将后面的字符转变为另一些特殊字符 (非显示/打印字符); 一个字符常量放到一个字符变量中时,是将该字
地址表列:必须是变量的地址; 即:输入项为:&变量;
注意:格式控制中格式描述符应与地址表
C语言程序设计 - 结构体和共用体-样本教案

2)通过结构指针引用结构成员变量时,++和--运算对结果的影响:
用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:
用以下实例来分析:
struct
{int a;
int *s;
}*p;
第一组引用:对成员变量a的引用
++p->a++(p->a)
说明:成员变量a自增加1.
(++p)->a
说明:指针p先移动一个单位,然后引用对应的成员变量a.
注意: p每移动一个单位要移动多少字节?
格式一:先说明结构类型,再单独进行结构变量定义.
例:
struct student
{ char name[12];
char sex;
sturct date birthday;
float sc[4];
};
struct student std,pers[3],*pstd;
说明:这个例子定义了三个结构类型名为student的结构变量:
这种结构类型变量定义的方式与不省略"结构名"的方式相比,不同之处在于:这种格式定义结构变量以后无法再定义此结构类型的其它结构变量,而带有"结构名"的格式则可以.
格式三:使用typedef说明一个结构类型名,再用新类型名定义结构变量.
例:
typedefstruct
{ char name[12];
char sex;
{"Wang wu" , "F",1983, 3, 3,93,83,73,63}
};
有时结构数组长度可以省略,而由初值个数来暗示.
(4)结构变量成员的引用和操作:
1)对结构变量成员的引用和操作:
第10章 位运算与枚举类型

运算结果:x>>2= -32
例10-6 右移运算示例。
位运算应用举例
例10-7 编程序实现将一个无符号整型数据二进制代码中8~ 11位取出的功能。 问题分析: 对处理的数据num通过num >>= 8将其本身的0~7位移出, 移位后num中原来的8~11位成为移位后数据的低4位; 通过mask=~(~0<< 4)表达式构造一个除低4位为1,其余 位都为0的整型数据mask; 通过表达式num&mask得到一个低4位保留了num低4位值 (即num最初的8~11位值)的整型数据并输出。
struct control { int x; char name[8]; unsigned a:3; unsigned :0; unsigned b:1; unsigned c:3; }control_data;
要求c占3个二进制位 struct control { unsigned a:3; unsigned b:3; unsigned :0; unsigned c:3; }control_data;
位段及应用
位段的概念和定义方法
在结构体类型中可以混合 定义位段和一般的结构体 成员。 定义位段时,可以跳过某 些位不用,方法是在结构 体类型中定义只指定了所 占用二进制位数的特殊成 员项。由于被跳过的这些 位段没有名字,所以在程 序中无法使用。
struct control { int x; char name[8]; unsigned a:3; unsigned b:1; unsigned c:3; }control_data; struct control { int x; char name[8]; unsigned a:3; unsigned :4; unsigned b:1; unsigned c:3; }control_data;
C语言程序设计教程(电子教案)

实用文档
学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。
学习目标
对C语言有一个概括的了解, 能够编写包含键盘输入、计算和 显示输出等操作的简单C程序。
4
主要内容
• C语言的产生与特点 • 简单C程序的组成 • C语言应用程序开发的基本步骤
5
1.1 C语言的产生及特点
C语言是为了编写系统程序而在1968年开始 研发的计算机高级语言
C语言表达能力强,使用灵活,程序结构清 晰,紧凑,可移植性好
指针 类型
17
基本数据类型说明符
整型:int long
字符型:char 实型:float
double long double
18
2.2 常 量
常量∶在程序运行过程中,其值不能被改 变的量。
一. 不同数制整型常量的表示
例如: 12 :十进制数 12
012 :八进制数 12(等于十进 制数10,用前导符0表示八进制数常量)
计算x+y+z,并将结 8果赋给变量sum
显示变量 sum的值
主函数 main()
一般C程序的组成
【例1-2】采用模块结构,改写例1-1的程序。 add(int x,int y,int z )
{ return(x+y+z);
}
函数add()
调用函数 add()
main() { int x,y,z; printf("Please Input Three Integers:\n "); scanf("%d,%d,%d ",&x,&y,&z);
4. 用‘\’ ’表示字符’ ,‘\”’表示字符”, ‘\\ ’表示字符\ 。
5. 用双引号括起来的字符序列表示字符串常量,其 中最后一个字符是字符串结束符‘\0’,不显式 地表示出来。如:“English” 。
C语言PPT课件_C_13_构造类型

27
结构体作函数参数
3
构造类型
以下程序的运行结果是 typedef struct { char s[5], t; } A; A f(A a) BBm { A b = {"BB",'m'}; a.t = b.t; strcpy(a.s, b.s); return a; } main() { A c = {"CC",'f'}, d = f(c); printf("%s%c", d.s, d.t); }
14
结构体指针
例:(*p).num或p->num都是访问其指向对 象的num成员的形式。 p->num得到p指向的结构体变量中的成 员num的值 p->num++得到p指向的结构体变量中的 成员num的值,用完该值后使它加1 ++ p->num得到p指向的结构体变量中 的成员num的值加1 ,然后再使用它 (++p)->num先使p自加1,然后得到它指 向的元素中的num成员值 (p++)->num先得到p->num的值,然后 使p自加1
结构体 指针p
构造类型
结构体 变量w
w的成员
name
sex
s的成员
p
w h y
s
m
d
18
用户自定义类型
①用原类型名定义变量。 typedef
构造类型
例如:int a; ②在前面加上typedef, 把变量名换成新类型名。 例如: typedef int INTEGER; ③用INTEGER代替int作 整型变量的类型说明。 例如:INTEGER a;
结构体作函数参数
3
构造类型
以下程序的运行结果是 typedef struct { char s[5], t; } A; A f(A a) BBm { A b = {"BB",'m'}; a.t = b.t; strcpy(a.s, b.s); return a; } main() { A c = {"CC",'f'}, d = f(c); printf("%s%c", d.s, d.t); }
14
结构体指针
例:(*p).num或p->num都是访问其指向对 象的num成员的形式。 p->num得到p指向的结构体变量中的成 员num的值 p->num++得到p指向的结构体变量中的 成员num的值,用完该值后使它加1 ++ p->num得到p指向的结构体变量中 的成员num的值加1 ,然后再使用它 (++p)->num先使p自加1,然后得到它指 向的元素中的num成员值 (p++)->num先得到p->num的值,然后 使p自加1
结构体 指针p
构造类型
结构体 变量w
w的成员
name
sex
s的成员
p
w h y
s
m
d
18
用户自定义类型
①用原类型名定义变量。 typedef
构造类型
例如:int a; ②在前面加上typedef, 把变量名换成新类型名。 例如: typedef int INTEGER; ③用INTEGER代替int作 整型变量的类型说明。 例如:INTEGER a;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体嵌套的完整定义
struct date { int year; int month; int day; }; struct student_info { char no[7]; char name[15]; char sex; struct date birthday; }
7.1.2
定义结构体类型变量的方法
例7.3指向结构体变量的指针的应用。
#include <string.h> main() {struct student {long num; char name[20]; char sex; float score; }; struct student stu-1; struct student * p; p=&stu-1; stu-1.num=8971; strcpy(stu-1.name,"Li Lin"); stu-1.sex='M'; stu-1.score=89.5; printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",stu-1.num,,stu1.sex,stu-1.score); printf("No.:%ld\nname:%s\nsex:%c\nscore:%f\n",(*p).num,(*p).name, (*p).sex, (*p).score); }
7.1.4
结构体变量的初始化
结构体变量为全局变量或静态变量时,才能进行初 始化。初始化过程类似于数组。 结构体变量初始化的格式,与一维数组相似: 结构体变量={初值表} 不同的是:如果某成员本身又是结构体类型,则该成员的 初值为一个初值表。 例如,student={"00072", "张三", "男", {1980,9,20}}。
struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; }student1,student2;
7.3.2
指向结构体数组的指针
指针变量不仅可以指向一个结构体变量,也可以指向一 个结构体数组。
例7.4指向结构体数组的指针的应用。 struct student { int num; char name[20]; char sex; int age; }; struct student stu[3]={{7001,”Li lin”,’M’,18},{7002,“Zhangjun”,’M’,19}, {7003,”Wang Ming”,’F’,20}}; main( ) {struct student *p; printf(“ No. Name Sex Age\n”); for(p=stu;p<stu+3;p++) printf(“%5d %-20s %2c %4d \n”, p->num, p-); }
7.1.3 引用结构中的成员
在定义了结构体变量以后,当然可以引用这个变量 了,但要注意以下规则: (1) 不能将一个结构体变量作为一个整体进行输入 和输出。 例如:已定义了的person1和person2为结构体变量 并且它们已有值。不能这样引用: printf(“%s,%c,%ld,%f\n”,person1); 只能对结构变量中的各个成员分别进行输入和输出。 引用结构体变量中成员的方式(C 规定引用的形式) 为:结构体类型变量名.成员名 注意:”.”是成员运算符,它在所有的运算符中优 先级最高。
重点:结构体型变量、数组、指针变量的定义、赋值和成 员的引用方法。 难点:结构体型变量、数组及 指针变量
第7章 结构类型与其它构造类型
7.1 结构体类型
7.2 结构体数组
7.3 结构指针
7.4 共用体和枚举
7.5 位段简介
7.6 用typedef定义类型
7.1 结构体类型
为将不同数据类型、但相互关联的一组数 据,组合成一个有机整体使用,C语言提供一种 称为“结构体”的数据结构体。 例如,一个学生的学号、姓名、性别、年 龄、成绩、家庭住址等都与某一学生相联系。 如果将这些数据分别定义成互相独立的简单变 量,是很难反映它们之间内在联系的。倘若将 它们组织成一个组合项,则能更好地反映问题, 处理起来也很方便。
7.3
7.3.1
结构体指针
结构体变量在内存中的起始地址称为结构体变量的指针。
指向结构体变量的指针
一个结构体变量的指针就是该变量所占据内存段的起 始地址。可以设一个指针变量,用来指向一个结构体变量, 该指针变量的值就是结构体变量的起始地址。 例如:struct student *p1,student1; p1=&student1; 此时p1指向结构体变量student1的首地址。引用结构 体指针以后,可以有三种方式访问结构体变量的各个成员: ① 结构体变量名.成员名; 区别:p->n ② (*p).成员名; p->n++ ③ p->成员名 ++p->n
number
03040120
name
张三
sex
男
age
18
score
75.0
图7-1
struct student { int num; char name[20]; char sex; int age; float score; };
注意不要忽略最后的分号。
声明一个结构体类型的一般形式为: struct 结构体名 {成员表列}; “结构体名” 用作结构体类型的标志,它又称“结构体 标记”(structure tag) 。上面的结构体声明中student就是 结构体名(结构体标记)。大括弧内是该结构体中的各个成员, 由它们组成一个结构体。
例7.2 对候选人得票的统计程序。设有3个候选人,每次输入 一个得票的候选人的名字,要求最后输出各人得票结果。 #include <string.h> struct person 程序如下:
{ char name[20]; int count; } leader[3]={"Li",0,"Zhang",0,"Fun",0}; main() { int i,j; char leader-name[20]; for(i=1;i<=7;i++) {scanf("%s",leader-name); for(j=0;j<3;j++) if(strcmp(leader-name,leader[j].name)==0) leader[j].count++: } printf(“\n”); for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); }
1、先声明结构体类型再定义变量名 法一: 法三: 2、在声明类型的同时定义变量 法二: struct struct struct student student struct 结构体名 { int num; { int int{ num; num; char name[20]; name[20]; { char char name[20]; char sex; 成员表列 char char sex; sex; int int age; int age; age; }变量名表列; char char addr[30]; char addr[30]; addr[30]; 3、直接定义结构类型变量 } }stu1,stu2 ; }; stu1,stu2; ; struct struct student stu1,stu2; { 成员表列 }变量名表列;
7.2 结构体数组
结构体数组的每一个元素,都是结构体类型数据,均 包含结构体类型的所有成员。
7.2.1 定义结构体数组
与结构体变量的定义相似,结构体数组的定义也分直接定 义和间接定义两种方法,只需说明为数组即可。
struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu[3];
第7章
结构类型与其它构造类型
本章的主要内容
1、三种新的复杂数据类型:结构体型、共用体型、枚举型 的概念与作用。 2、结构体的定义方法,结构体型变量、数组、指针变量的 定义、赋值和引用方法。 3、共用体的定义方法,共用体型变量的定义和使用。 4、枚举类型的定义方法,枚举类型变量的定义和引用方法。
本章的重点和难点
说明 ( 1 )结构体类型与结构体变量是两个不同的概念,其 区别如同int类型与int型变量的区别一样。 ( 2 )结构体类型中的成员名,可以与程序中的变量同 名,它们代表不同的对象,互不干扰。 (3) 对结构体中的成员(即“域”)可以单独使用,它的用 法相当于普通变量。 (4) 成员也可以是一个结构体变量。
(2) 如果成员本身又属于一个结构体变量, 则要用若干个成员运算符,一级一级找到最 低一级的成员。只能对最低级的成员进行赋 值或存取运算。例如结构体变量info1,可以 这样访问成员: info1.birthday.year 注意:不能用info1.birthday来访问info1变 量中的成员birthday,是因为birthday本身 就是一个结构体变量。
注意:初值的数据类型,应与结构体变量中相应成员所要 求的一致,否则会出错。