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.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语言程序设计 - 结构体和共用体-样本教案
用以下实例来分析:
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语言PPT课件_C_13_构造类型
结构体作函数参数
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;
C语言程序设计(北京邮电大学出版社第二版)主编占跃华算
整型 100,125,-100,0 实型 3.14 , 0.125,-3.789 字符型 ‘a’, ‘b’,‘2’ 字符串 ‘a’, ‘ab’,‘1232’
例3.1 符号常量的使用 #define PRICE 30 #include <stdio.h> 说明:如再用赋值语句给PRICE赋值是错的 void main ( ) PRICE=40; /* 错误,不能给符号常量赋值 { int num, total; num=10; total=num * PRICE; printf(″total=%d\n″,total); } 说明: 程序中用#define命令行定义PRICE 符号常量: 用一个标识符代表一个常量。 代表常量 30,此后凡在本文件中出现的 符号常量的值在其作用域内不能改变 , PRICE 都代表30,可以和常量一样进行运算 也不能再被赋值。
整型数据
3.3
整型数据
(3)十六进制整数。以0x开头的数是16进制数。 如:0x123,代表16进制数123,等于十进制数 291。 -0x12等于十进制数-10。
3.3.2 整型变量 (1)整型数据在内存中的存放形式
数据在内存中是以二进制形式存放的。
如: int i;
i=10;
/* 定义为整型变量 */ /* 给i赋以整数10 */
3.2 常量与变量
变量命名的规定:C语言规定标识符只能由 字母、数字和下划线三种字符组成,且第一 个字符必须为字母或下划线。 例:sum,_total, month, Student_name,
lotus_1_2_3,BASIC, li_ling M.D.John, ¥123,3D64,a>b
山东春考C语言知识点
山东省春季高考C 语言知识点总体上必须清楚的:1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。
2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main 函数。
3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是它的地址. 4)bit 是位是指为0 或者1。
Byte 是指字节, 一个字节= 八个位(1B=8b )。
概念常考到的:1、编译预处理不是C 语言的一部分,不占运行时间,不要加分号。
C 语言编译的程序称为源程序,它以ASCII 数值存放在文本文件中。
2、define PI 3.1415926; 这个写法是错误的,一定不能出现分号。
3、每个C 语言程序中main 函数是有且只有一个。
4、在函数中不可以再定义函数。
5、算法:可以没有输入,但是一定要有输出。
6、break 可用于循环结构和switch 语句。
7、逗号运算符的级别最低,赋值运算符的级别倒数第二。
8、程序设计语言:机器语言、汇编语言、高级语言。
C 语言属于高级语言。
9、C 语言的产生及发展:UNIX 操作系统第一章C 语言的基础知识第一节、对C 语言的基础认识1、C 语言编写的程序称为源程序,又称为编译单位。
2、C 语言书写格式是自由的,每行可以写多个语句,可以写多行。
3、C 程序是有若干函数构成的,函数可以嵌套调用,不能嵌套定义,一个C 语言程序有且只有一个main 函数,是程序运行的起点。
4、一条复杂语句分行书写,应用反斜杠(\)续行。
5、c 语言特点:(1)简洁紧凑,灵活方便。
(2)运算符丰富。
(3)数据类型丰富。
(4)c 语言是结构化语言。
(5)语法限制较少、程序设计自由度较大。
(6)c 语言允许直接访问物理地址,可以直接对硬件进行操作。
(7)c 语言程序代码生成质量高,程序执行效率高。
(8)c 语言适用范围广,可移植性好。
6、c 语言共有32个关键字,9种控制语句。
C语言讲义第07章-结构体与其他构造数据类型(原)
atoi(char*str);将数字字符串转换为整型。
atof(char*str);将数字字符串转换为双精度的 实型。 atol(char*str);将数字字串转换长整型。 使用上述函数,要包含头文件"stdlib.h"。
7.1 结构体
• 例7-1类型转换函数在结构体变量数据输 入中的应用示例。定义结构体类型及变 量,输入一个学生的有关信息并输出。 例7-1源程序
7.1 结构体
结构体变量一旦进入其作用域,系统便根据结构体类 型定义时成员排列的先后,自动为结构体变量的每一 个成员分配相应的存储空间。结构体变量的各个成员 均有自己的存储空间,结构体变量所占存储空间的大 小为各成员所占空间之和。 例如:student1 所占空间大小为:8 + 10 + 1+ 4 * 2 = 27(字节)。
例如:指针变量p1,p2指向结构体变量x。
p1 = p2 = &x; 例如:通过结构体指针p1和p2来引用结构体变量x成员。以下三种 方式是等价的。 x.no、、x.score[0] p1->no、p1->name、p1->score[0]
(*p2).no、(*p2).name、(*p2).score[0]
7.2 结构体数组的定义和引用
• 结构体数组的输入与输出一般在循环结构中进行, 一次循环可以输入或输出一条结构体记录。 • 例7-3定义一个结构体数组用于存储和显示三个学 生的基本信息。
例7-3源程序
• 程序运行结果如下:
no. 06030217 06050105 06010116 name zhang san li si wang wu sex m m f age 19 18 18 depart Economy & Commerce engineering Computer science
C语言(1-10)
处理框
输入/输出框 输入 输出框
注释框
流向线
连接点
将求5!的算法用流程图表示 例2.6 将求 的算法用流程图表示
如果需要将最后结 果打印出来,可在 菱形框的下面加一 个输出框。
第三章
§ 3.1 C的数据类型
C语言提供了以下一些数据类型。
整型
int char 单精度实型 float 双精度实型 double struct union enum
§3.5字符型数据
有些以“ 开头的特殊字符称为转义字符 有些以“\”开头的特殊字符称为转义字符
\n \t \r \\
换行 横向跳格 回车 反斜杠
•
•
fab c gde f jik gde h
显示屏上的运行结果: 显示屏上的运行结果:
打印机上的显示结果: 打印机上的显示结果:
h
jk
例3.5 转义字符的使用 #include <stdio.h> void main() {printf(″ c\ de\rf\tg\n″) {printf(″ ab c\t de\rf\tg\n″); printf(″h\ti\ k\ printf(″h\ti\b\bj k\n″); }
§3.5字符型数据 3.5.2字符变量 字符变量 • 字符型变量用来存放字符常量,注意只能放一个字符。 • 字符变量的定义形式如下:char c1,c2; • 在本函数中可以用下面语句对c1,c2赋值: c1=‘a’;c2= ‘b’ ; • 一个字符变量在内存中占一个字节。 3.5.3字符数据在内存中的存储形式及其使用方法 字符数据在内存中的存储形式及其使用方法 • 将一个字符常量放到一个字符变量中,实际上并不是把该 字符本身放到内存单元中去,而是将该字符的相应的 ASCII代码放到存储单元中。 这样使字符型数据和整型数据之间可以通用。一个字符数据既 可以以字符形式输出,也可以以整数形式输出。
C语言_各章_重点知识_总结
C语言各章重点知识总结第一章C语言概述1、C程序的组成和形式的基本特点(P6-7)(1)C程序是由函数构成的,一个C源程序至少且仅包含一个main函数,也可以包含一个main函数和若干个其他函数。
(2)一个函数由两部分组成①函数的首部:即函数的第一行,包括函数名、函数类型、函数属性、函数参数名、参数类型例:int max (int x,int y)一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。
函数可以没有参数,如main()。
②函数体:即函数首部下面的花括号内的部分。
如果一个函数内有多个花括号,则最外层的一对花括号为函数体的范围。
函数体一般包括:声明部分、执行部分2、运行C程序的步骤及每个步骤生成文件的类型及特点(P7)第二章算法1、算法的定义一个程序应包括①数据结构即对数据的描述;②算法也就是操作步骤。
计算机算法可分为两大类:数值运算算法和非数值运算算法。
2、算法的特性(P19)1.有穷性;2.确定性;3.有零个或多个输入;4.有一个或多个输出;5.有效性。
3、描述算法的常用方法(P20-33)1.自然语言;2.用流程图表示算法。
3.N—S图4.计算机语言5.伪代码4、C程序算法的3种基本结构及其共同特点(P24-25)三种基本结构:1.顺序结构:最基本;2.选择结构:又称选取结构或分支结构;3.循环结构:又称重复结构;①当(while)型循环;②直到(until)型循环。
共同特点:1. 只有一个入口;2. 只有一个出口;3. 结构内的每一部分都有机会被执行到;4. 结构内不存在“死循环”。
5、结构化程序设计的设计原则(P34)1.自顶向下;2.逐步细化;3.模块化设计;4.结构化编码。
第三章数据类型、运算符与表达式1、C语言的基本数据类型和构造数据类型(P37)在程序中对用到所有数据都必须制定其数据类型。
数据有常量和变量之分,它们分别属于以上这些类型。
2、字面常量和符号常量(P37-38)在程序运行过程中,其值不能被改变的量称为常量,常量区分为整型常量和实型常量,常量一般从其字面形式即可判别,这种常量称为字面常量或者直接常量。
C语言复习提纲(含答案)
5.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。
A) float
Logo
B) char
C) int
D) double
14
表达式
不同类型数据间的转换与运算。 例如:int a=123; 则a/100的值为(1),
2、找出最大数、最小数和平均数 3、判断某一年是否为闰年 4、判断某个数是否为素数 5、冒泡、选择、插入排序
6、求多项式的值
Logo
7
第3章 顺序程序设计
常量:整型、实型、字符(普通、转义)、字符串、 符号
字符常量:ASCII码存储 空格为32
字符变量: char c1=100; 与c1=„e‟等价 字母小写→ 大写 c=c-32;或c=c-„a‟-„A‟;
Logo
18
数据的输入与输出
printf(格式控制,输出表列) 例如:
printf("i=%d,ch=%c\n",i,ch);
(1)“格式控制”是用双撇号括起来的字符串,也称“转换控制字 符串”,它包括两种信息:
①格式说明:由“%”和格式字符组成,它的作用是将输出的
数据转换为指定的格式输出。 ②普通字符,即需要原样输出的字符。
} 4. 假设变量a和b均为整型,以下语句可以不借助任何变量把a、 b中的值进行交换。请填空。 a+=【4】; b=a-【5】; a-=【6】;
b
b
b
Logo
23
第4章 选择结构
用if语句实现选择结构。 用switch语句实现多分支选择结构。根据表达式的 具体值进行多分支选择、表达式的类型要求、语句中 的break。 选择结构的嵌套
c语言第11章-结构体与共用体
}
§11.6 构造体和指针
ma指in向() 构造体变量旳指针
{ s❖tr定uc义t st形ud式en:t struct 构造体名 *构造体指针名; { 例lonsgtruicntt sntuudmen;t *p; char name[20]; ❖使str用ucch构tars造tsued体xe;n指t 针变存量储引构用造组体p员变形量式在内存旳起始地址
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Roa
形式二:
struct 构造体名
{ 类型标识符 组员名; 类型标识符 组员名;
……………. }构造体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”
❖用构造体变量旳组员作参数----值传递 ❖用指向构造体变量或数组旳指针作参数----地址传递 ❖用构造体变量作参数----多值传递,效率低
例 用构造体变量作函数参数
(main)
struct data { int a, b, c; };
accacbbb::::::::2332333370070
main()
}
指向构造体数组旳指针
例 指向构造体数组旳指针
struct student { int num;
char name[20]; char sex; int age;
p num
name
sex
p+1
age
C语言课后习题答案(最终)
C语言课后习题答案(最终)第0章习题1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数:(1)128 (2)511 (3)1024 (4)65535 (5)1048575 答:(1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400(4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF2. 将下列二进制数转化为十进制数和十六进制数:(1)1100110101B (2)101101.1011B 答:(1)821、335 (2)45.6875、2D.B3. 写出下列数的原码、反码、补码:15、-20、-27/32 答:(1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.00101004. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少?答:5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。
答:结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么?答:0~65535、-128~127、-32768~32767C语言程序属于应用程序,程序代码本身存放在应用程序区,程序运行时处理的数据存计算机的内存空间主要分为3个区:系统程序区、应用程序区和数据区,其中数据区放在应用程序数据区。
C语言之struct--(结构体数组)
C语⾔之struct--(结构体数组)C语⾔的结构体是⼀种特殊的数据类型,或者称之为⾼级的数据类型,我们常说的int,long,float,double都属于基础类型,基础类型只能存储类型⼀致的数据。
⽽结构体则能够存储不同的类型,它能够存储int ,char ,long 的复合类型。
下⾯是⼀个我⽤结构体写的简单的实例,使⽤结构体先构造⼀个book类型的结构体,可以存储多个book类型的值,这个称为结构体数组,代码的第22⾏声明了⼀个结构数组,顾名思义,结构数组是指能够存放多个结构体类型的⼀种数组形式。
1/**2该程序使⽤结构体构造了⼀个简单的书籍结构体3主要是结构体数组的使⽤⽅法4*/5 #include <stdio.h>6#define MAX_TITLE_SIZE 307#define MAX_AUTHOR_SIZE 408#define MAX_SIZE 29//构造⼀个BOOK结构体,⽤于存放title,author,price10struct book11 {12char title[MAX_TITLE_SIZE];13char author[MAX_AUTHOR_SIZE];14float price;15 };16int main()17 {18//设置⼀个计数器,⽤来计数输⼊的次数19int count=0;20//设置另外⼀个计数器,⽤来遍历显⽰输⼊的book21int index=0;22struct book lib[MAX_SIZE];23 printf("Set Book Title \n");24//对相关的参量进⾏数据输⼊25while(count<MAX_SIZE&&26 printf("title is:")&&gets(lib[count].title)!=NULL && lib[count].title[0]!='\n')27 {28 printf("SET Your AUthor : \t");29 gets(lib[count].author);30 printf("SET BOOKS price: \t");31 scanf("%f",&lib[count].price);32 count++;33//如果不为\n,就继续下⼀次的数据输⼊34while(getchar()!='\n')35 {36continue;37 }3839if(count<MAX_SIZE)40 {41 printf("Enter to next LINE to set title\n");4243 }44 }45if(count>0)46 {47 printf("Here are book lists \n");48//遍历结构体数组49for(index=0;index<count;index++)50 {51 printf("The Title is %s And The Author is %s And price is %f \n"52 ,lib[index].title,lib[index].author,lib[index].price);53 }54 }55return0;56 }以下是代码的运⾏结果。
- 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本身 就是一个结构体变量。
注意:初值的数据类型,应与结构体变量中相应成员所要 求的一致,否则会出错。