C语言程序设计期末复习_第1页
C语言程序设计期末复习_第2页
C语言程序设计期末复习_第3页
C语言程序设计期末复习_第4页
C语言程序设计期末复习_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C程序设计复习软件学院 万琳大家开始复习了吗大家开始复习了吗?本学期所学章节l C语言概述语言概述l 程序的灵魂程序的灵魂算法算法l 数据类型、运算符与表达式数据类型、运算符与表达式l 最简单的最简单的C程序设计程序设计顺序程序设计顺序程序设计l 选择结构程序设计选择结构程序设计l 循环控制循环控制l 数组数组l 函数函数l 预处理命令预处理命令l 指针指针l 结构体与共同体结构体与共同体l 位运算位运算l 文件l 常见错误和程序调试第1章 C程序概述l1.1 语言出现的历史背景l1.2 程序的特点l1.3 简单的语言程序介绍l1.4 运行程序的步骤和方法auto break case cha

2、r constcontinue default do double elseenum extern float for gotoIf int long register returnshort signed sizeof static structswitch typedef union unsigned void volatile while编辑编辑链接链接编译编译执行执行 C程序的上机步骤程序的上机步骤_C程序开发步骤程序开发步骤程序代码的录入程序代码的录入, ,生成源程序生成源程序* *.c.c语法分析查错,翻译语法分析查错,翻译生成目标程序生成目标程序* *.obj.obj与其它目标程

3、序或库与其它目标程序或库链接装配链接装配, ,生成可执行生成可执行程序程序* *.exe.exe源程序目标程序可执行程序内容程序设计语言机器语言机器语言可执行不可以不可以可以文件名后缀.c.obj.exe第2章 程序的灵魂算法l2.1 算法的概念l2.2 简单算法举例l2.3 算法的特性l2.4 怎样表示一个算法l2.5 结构化程序设计方法自然语言传统流程图结构化流程图伪代码PAD图 传统流程图美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流

4、向线流向线连接点连接点 例例2.7 将例将例2.2的算法的算法用流程图表示。打印用流程图表示。打印50名名 学生中成绩在学生中成绩在80分以分以上者的学号和成绩。上者的学号和成绩。顺序结构顺序结构选择结构选择结构当型当型(While型型)循环结构循环结构 直到型直到型(Until型型)循环循环 三种基本结构的共同特点:l(1)只有一个入口。 l(2)只有一个出口。(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。)l(3)结构内的每一部分都有机会被执行到。l(4)结构内不存在“死循环”(无终止的循环)。 *第3章 数据类型、运算符与表达式l

5、 3.1 C的数据类型l 3.2 常量与变量l 3.3 整型数据l 3.4 浮点型数据运行l 3.5 字符型数据 l 3.变量赋初值 l 3.7 各类数值型数据间的混合运算 l 3.8 算术运算符和算术表达式 l 3.9 赋值运算符和赋值表达式 l 3.10 逗号运算符和逗号表达式 3.1 C的数据类型C语言提供了以下一些数据类型。 3.2 常量和变量l 在程序运行过程中,其值不能被改变的量称为常量l 变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。 变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必

6、须为字母或下划线。补充示例示例:(75)10= (1001011)27537189421011110002222222最低位最低位最高位最高位0.6 不同计数制之间的转换十进制数转换为非十进制数十进制数转换为非十进制数补充进位法进位法:用十进制小数乘基数,当积为0或达到所要求的精度时,将整数部分由上而下排列。示例:示例:(0.3125)10 =(0.0101)20. 3125 20. 6250 20. 2500 20. 00000. 5000 2最高位最高位最低位最低位0110十进制数十进制数 转化为非十进制数小数转化为非十进制数小数补充一位拆三位一位拆三位一位拆四位一位拆四位整数从右向左整数

7、从右向左 小数从左向右小数从左向右三位并一位三位并一位四位并一位四位并一位二进制与八、十六进制之间的转换二进制与八、十六进制之间的转换补充0001 1011 0110.0100( 1 B 7 . 4 )16示例:示例:100 110 110 111 . 010 100( 4 6 6 7 . 2 4 )83.3 整型数据整型常量即整常数。在语言中,整常数可用以下三种形式表示:(1)十进制整数。 如:如:123, -456.4。(2)八进制整数。以0头的数是八进制数。 如:如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0 x开头

8、的数是16进制数。 如:如:0 x123,代表16进制数123,等于十进制数 291。 -0 x12等于十进制数18。 3.3 整型数据整型变量的分类和存储3.3 整型数据例3.3 整型数据的溢出#include #include void main()void main()int a,b; int a,b; a=32767; a=32767; b=a+1; b=a+1; printf(“%d,%dn”,a,b); printf(“%d,%dn”,a,b); 数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“

9、溢出”。运行结果:运行结果: 32767,-3276832767,-3276801 11 11 11 11 11 11 11int型:最大:3276710 00 00 00 00 00 00 00最小:-3276811 11 11 11 11 11 11 11unsigned int型:最大:6553500 00 00 00 00 00 00 00最小:03.4 浮点型数据类型 位数 数的范围 有效数字float 32 10-37 1038 67 位double型 64 10-30710308 1516位long double 128 10-4931104932 1819位浮点型变量分为单精度

10、(float型)、双精度(double型)和长双精度型(long double)三类形式。3.4 浮点型数据l 单精度(float型)的存储31 30 24 23 22 31 30 24 23 22 0 0如:如:0.27E-2 + 0.27 0.27E-2 + 0.27 * * 10 10-2-2阶符阶符 阶码阶码 数符数符 尾数尾数 阶码部分阶码部分 尾数部分尾数部分 3.5 字符型数据 有些以有些以“ ”开头的特殊字符称为转义字符开头的特殊字符称为转义字符n 换行,将当前位置移到下一行开头t 横向跳格(跳到下一个Tab位置)b 退格,将当前位置移到前一列r 回车,将当前位置移到本行开头

11、反斜杠ddd ddd表示1到3位八进制数字xhh hh表示1到2位十六进制数字3.5 字符型数据例3.5 转义字符的使用#include void ()() printf ( ab ct derftgn); printf(htibbj kn); printf(ta018bc); l 打印机上的显示结果:打印机上的显示结果: fab c gde h jikl 显示屏上的运行结果:显示屏上的运行结果: f gde j kfabcgdefgdehjikhjk3.5 字符型数据字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法l 将一个字符常量放到一个字符变量中,实际上并不是

12、把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。c197c298c10110001c201100010a 01100001“%c” a, “%d” 97附录A ASCII对照表3.5 字符型数据l字符串常量:字符串常量:一对双撇号括起来的字符序列l合法的字符串常量:“How do you do.”, “CHINA”, “a” , “$123.45”l 规定:在每一个字符串常量的结尾加一个 “字符串结束标志”,以便系统据此判断字符串是否结束。规定以字符作为字符串结束标志。CHINA0*3.7 各类数值型数据间的混合运算整型(包括int,short,long)、浮点

13、型(包括float,double)可以混合运算。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。上述的类型转换是由系统自动进行的低高Double float LongUnsignedInt char,shortdoublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例 char ch; int i; float f; double d;ch/i + f*d - (f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubl

14、edouble10+a +i*f - d/l例 int i; float f; double d; long l;3.8 算术运算符和算术表达式l主要是运算符的运算方法和优先级的问题,详细见课本P365*类型转换问题l一般形式:(类型名)(表达式)例 (int)(x+y) (int)x+y (double)(3/2) (int)3.6 l说明:强制转换得到所需类型的中间变量,原变量类型不变 例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3精度损失问题较高类型向较低类型转换时可

15、能发生3.9 赋值运算符和赋值表达式l主要存在一个类型转换的问题丢失精度(截断)扩展(符号扩展,无符号扩展)v符号扩展根据符号位v无符号扩展直接补03.9 赋值运算符和赋值表达式赋值表达式也可以包含复合的赋值运算符。 如:如:a+=a-=a*a分析分析: :此赋值表达式的求解步骤如下 先进行“*”的运算, 它相当于*,a的值为144132。再进行“”的运算,相当于=a+(-132),a的值为132-132-264。3.9 赋值运算符和赋值表达式l 设x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)-5后, x,y,z的值是多少?l 设x和y 均为float型变量,则以下不合法

16、的赋值语句是()l A)+x;l B)y=(x%2)/10;l C)x*=y+8;l D)x=y=0;10,15,103.10 逗号运算符和逗号表达式逗号运算符逗号运算符: :将两个表达式连接起来,又称为“顺序求值运算符” 如:如:5, 一般形式一般形式: : 表达式,表达式表达式,表达式求解过程:求解过程: 先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。 逗号表达式 的值为14最简单的C程序设计l4.1 C语句概述l4.2 赋值语句l4.3 数据输入输出的概念及在c语言中的实现l4.4 字符数据的输入输出l4.5 格式输入与输出l4.6 顺序结构程序设计举例4.4 字符数据的输

17、入输出lputchar(c)lgetchar()4.5 格式输入与输出dx,Xoucse,Efg%十六进制无符号整数十六进制无符号整数不带符号十进制整数不带符号十进制整数十进制整数十进制整数指数形式浮点小数指数形式浮点小数单一字符单一字符字符串字符串八进制无符号整数八进制无符号整数小数形式浮点小数小数形式浮点小数e和和f中较短一种中较短一种百分号本身百分号本身int a=567; printf ( %d, a);int a=255; printf(%x, a);int a=65; printf(%o, a);int a=567; printf(%u, a);char a=65; printf(

18、%c, a);printf(%s, ABC);float a=567.789; printf(%e, a);float a=567.789; printf(%f, a);float a=567.789; printf(%g, a);printf(%);567ff101567AABC5.677890e+02567.789000567.789% 说明 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出4.5 格式输入与输出l几种常见的格式符的修饰符:L:用于长整型整数,可加在格式符d,o,x,u前面M(代表一个正整数):数据最

19、小宽度N(代表一个正整数):对实数,表示输出n位小数; 对字符串,表示截取的字符个数:输出的数字或字符在域内向左靠4.5 格式输入与输出l格式输入:l地址表:变量的地址,常用取地址运算符&l格式字符:d,i,o,x,u,c,s,f,e例例 scanf(%d,&a); 输入:输入:10 则则 a=10例例 scanf(%x,&a); 输入:输入:11 则则 a=17格式格式: scanf(格式控制串格式控制串,地址表地址表)功能:按指定格式从键盘读入数据功能:按指定格式从键盘读入数据,存入地存入地址表指定的存储单元中址表指定的存储单元中,并按回车键结束并按回车键结束返值:正常返值:正常,返回输入

20、数据个数返回输入数据个数4.5 格式输入与输出l*输入分隔符的规定例 scanf(%d%o%x,&a,&b,&c); printf(a=%d,b=%d,c=%dn,a,b,c); 输入 123 123 123 输出 a=123,b=83,c=291例例 scanf(%d:%d:%d,&h,&m,&s); 输入输入 12:30:45 则则12 h, 30 m, 45 s一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符4.5 格式输入与输出scanf(%c%c%c,&c1,&c2,&c3); 若输入a b c 则ac1, c2, b c3如如 scanf(%d%c%f

21、,&a,&b,&c); 若输入若输入1234a123o.26 则则 1234 a, a b, 123 c用%c格式符时,空格和转义字符作为有效字符输入:输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车遇宽度结束遇非法输入4.5 格式输入与输出例例 int x; char ch; scanf(%d,&x); ch=getchar(); printf(x=%d,ch=%dn,x,ch);执行:执行:123 输出:输出:x=123,ch=10输入函数留下的输入函数留下的垃圾垃圾:*选择结构l5.1 关系运算符和关系表达式l5.2 逻辑运算符和逻辑表达式l5.3 if语句l5.4 swit

22、ch语句l5.5 程序举例*5.1 关系运算符和关系表达式1.关系运算符及其优先次序1. (小于)2. (大于)4. = (大于或等于)5. = (等于)6. != (不等于)优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符*5.1 关系运算符和关系表达式2.关系表达式用关系运算符将两个表达式(可以是算术表达式或 关系表达式,逻辑表达式,赋值表达式,字符表达式) 接起来的式子,称关系表达式例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值为“真”,表达式的值为1。C C语言中没有专用语言中没有专

23、用的逻辑值,的逻辑值,1 1代表代表真,真,0 0代表假代表假*5.2 逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)& (逻辑与) 相当于其他语言中的AND(2)| (逻辑或) 相当于其他语言中的OR(3)! (逻辑非) 相当于其他语言中的NOT例:a&b 若a,b为真,则a&b为真。 a|b 若a,b之一为真,则a|b为真。 !a 若a为真,则!a为假。优先次序:!(非)-&()-|()逻辑运算符中的“&”和“|”低于关系运算符,“!”高于算 术运算符*5.2 逻辑运算符和逻辑表达式2.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就 是逻辑表达式。逻辑表达式的值应该是一

24、个逻辑量“真”或“假”。例:设a=4,b=5:!a的值为0 a&b的值为1a|b的值为1 !a|b的值为14&0|2的值为1任何非零的数值被认作任何非零的数值被认作“真真”l下列关系表达式中结果为假的是( )lA)0!=1 B)2b时将a的值赋给max,当ab时将b的值赋给max,可以看到无论ab是否满足,都是向同一个变量赋值。 可以用下面的条件运算符来处理: ()?;5.4 switch语句switch语句的格式:switch (表达式) case常量表达式:语句 case常量表达式:语句 case常量表达式:语句 default :语句 注意:注意:break例例: :要求按照考试成绩的等

25、级输出百分制分数段,用要求按照考试成绩的等级输出百分制分数段,用switchswitch语句实现:语句实现:switch(gradegrade) case printfprintf();); case printf printf ();); case printf printf ();); case printf printf ();); default( printf printf );); 如果如果grade为为A,将输出什么?,将输出什么?*循环结构l 6.1 概述l 6.2 goto语句以及用goto语句构成循环l 6.3 用while语句实现循环l 6.4 用do-while语句实现

26、循环l 6.5 用for 语句实现循环 l 6.6 循环的嵌套l 6.7 几种循环的比较l 6.8 break语句continue和语句l 6.9 程 序 举 例只能用于循环和switch语句只能用于循环语句例例 (for)梯形法求数值积分梯形法求数值积分1011( ()(1) )2( ()(1) )2( ( )( )()20.5* *( ( )( )* (* )(1;1;)ininihsf a ihf aihhSf a ihf aihhf afb ahnbhf a ihshf af bss h f a i hiini 迭代:0yxa a+ha+iha+(i+1)hbf(x)dxxxfba24

27、)(l设有程序段: t=0;while (printf(“*”)t+;If (t0 fun(x/2-2); printf(“%d”,x);Main()fun(20); Printf(“n”);A)20 8 2 -1 B)2 8 20C)8 D)-1 2 8 208.变量的存储类别l自动的(自动的(auto););l静态的(静态的(static););l寄存器的(寄存器的(register););l外部的(外部的(extern)例例87 考察静态局部变量的值#include void main()int (int); int ,; for(; printf( ,(); int (int )aut

28、o int ; static ; ; return(); 8.变量的存储类别l用用static声明外部变量声明外部变量在程序设计中,某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个staitic声明。例如:例如:file1.c file2.cstatic int A; extern int A;void main ( ) void fun (int n) A=A*n; 8.10 内部函数和外部函数根据函数能否被其他源文件调用,将函数区分为内部内部函数函数和外部函数外部函数。如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和

29、函数类型的前面加static。即static 类型标识符 函数名(形参表)例如例如: : static int fun ( int a , int b )8.10 内部函数和外部函数l外部函数(1) 定义函数时,如果在函数首部的最左端加关键字extern,则表示此函数是外部函数,可供其他文件调用。例如,函数首部可以写为extern int fun (int a, int b),这样,函数fun就可以为其他文件调用。如果在定义函数时省略extern,则隐含为外部函数。(2) 在需要调用此函数的文件中,用extern对函数作声明,表示该函数是在其他文件中定义的外部函数 。l下面函数盗用语句含有实参

30、的个数为( )func(exp1,exp2),(exp3,exp4,exp5);A)1 B)2C)4 D)5l凡函数中未指定存储类别的局部变量,其隐含的存储类别为( )A)自动 B)静态C)外部 D)寄存器编译预处理l9.1 宏定义l9.2“文件包含”处理l9.3 条件编译9.1 宏定义 宏定义一般形式为:definedefine 标识符标识符 字符串字符串例如:例如: define PI 3.1415926define PI 3.1415926l 带参数的宏定义一般形式为:definedefine 宏名(参数表)宏名(参数表) 字符串字符串 字符串中包含在括弧中所指定的参数9.2“文件包含”

31、处理l 所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。语言提供了#include命令用来实现“文件包含”的操作。其一般形式为: #include #include 文件名文件名 或 #include #include l若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执行以下printf语句后,输出结果是( )Int a;a=Y;Printf(“%dn”,Z);Printf(“%dn”,-a);A)7 B)12 C)12 D)7 6 6 5 5*指针l 10.1地址和指针的概念l 10.变量的指针和指向变量的指针变量l

32、 10.数组与指针l 10.字符串与指针l 10.指向函数的指针l 10.返回指针值的函数l 10.指针数组和指向指针的指针l 10.8有关指针的数据类型和指针运算的小结一个变量的地址称为该变量的“指针指针”。例如,地址2000是变量的指针。如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量指针变量”。上述的i_pointer就是一个指针变量。指针和指针变量的定义:指针和指针变量的定义:10.2 变量的指针和指向变量的指针变量 定义指针变量的一般形式为基类型基类型 *指针变量名;指针变量名;指针变量用作函数的参数例例10 . 3 对输入的两个整数按大小顺序输出对输入的两个整

33、数按大小顺序输出 #include void main()void swap(int *,int *);int ,;int *pointer_,*pointer_; scanf(,);pointer_ ; pointer_2 ; if(swap( pointer_ , pointer_2 );printf(,); void swap(int *,int *) int temp; temp*1; *; *temp; 10.数组与指针引用一个数组元素,可以用:()() 下标法,如形式;下标法,如形式;()() 指针法,如指针法,如*()或()或*()()。其中是数组名,是指向数组元素的指针变量,其

34、初值。多维数组与指针表表 示示 形形 式式含义含义地地 址址a 二维数组名,指向一维数组a0,即0行首地址2000a0,*(a+0),*a0行0列元素地址2000a+1,&a11行首地址2008a1,*(a+1)1行0列元素a10的地址2008A1+2,*(a+1)+2,&a121行2列元素a12的地址2012*(a1+2),*(*(a+1)+2),a121行2列元素a12的值元素值为1310.指向函数的指针l函数在编译时被分配给一个入口地址。这函数在编译时被分配给一个入口地址。这个函数的入口地址就称为个函数的入口地址就称为函数的指针函数的指针。 实参函数名 f1 void (int (*x1

35、)(int),int (*x2)(int,int)) int ,; (*)(); *调用函数* (*)(,);*调用函数* 10.返回指针值的函数一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型而已。这种带回指针值的函数,一般定义形式为类型名类型名 *函数名(参数表列)函数名(参数表列);例如:int *(int ,int );10.指针数组和指向指针的指针一个数组,若其元素均为指针类型数据,称为指针指针数组数组,也就是说,指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为一维指针数组的定义形式为:

36、:类型名类型名*数组名数组长度;数组名数组长度;例如:例如:*;10.指针数组和指向指针的指针定义一个指向指针数据的指针变量定义一个指向指针数据的指针变量:*;的前面有两个*号。*运算符的结合性是从右到左,因此*相当于*(*),显然*是指针变量的定义形式。如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量是指向一个字符指针变量的。*就是所指向的另一个指针变量。10.8有关指针的数据类型和指针运算的小结定义定义含义含义 ;定义整型变量定义整型变量* *;为指向整型数据的指针变量为指向整型数据的指针变量int aint an n; ;定义整型数组,它有

37、个元素定义整型数组,它有个元素 * *;定义指针数组,它由个指向整型数据的指针定义指针数组,它由个指向整型数据的指针元素组成元素组成 (* *););为指向含个元素的一维数组的指针变量为指向含个元素的一维数组的指针变量 ();();为带回整型函数值的函数为带回整型函数值的函数 * *();();为带回一个指针的函数,该指针指向整型数据为带回一个指针的函数,该指针指向整型数据 (* *)();)();为指向函数的指针,该函数返回一个整型值为指向函数的指针,该函数返回一个整型值 * * *;是一个指针变量,它指向一个指向整型数据的是一个指针变量,它指向一个指向整型数据的指针变量指针变量结构体与共用

38、体l 11.1 概述l 11.2 定义结构体类型变量的方法l 11.3 结构体变量的引用l 11.4 结构体变量的初始化l 11.5 结构体数组 l 11.指向结构体类型数据的指针 l 11.7 用指针处理链表l 11.8 共用体 l 11.9 枚举类型 l 11.10 用typedef定义类型结构体嵌套的结构:嵌套的结构:struct date int month; int day; int year; ; struct int num; char name20; char sex; struct date birthday; float score; boy1,boy2;结构体l引用结构体

39、变量中成员的方式为l结构体变量名结构体变量名. .成员名成员名n例如,例如, student1.num表示student1变量中的num成员,即student1的num(学号)项。可 以 对 变 量 的 成 员 赋 值 , 例如:student1.num=10010;“.”是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把student1.num作为一个整体来看待。上面赋值语句的作用是将整数10010赋给student1变量中的成员num。l 结构体一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量

40、,这与数组指针和函数指针的情况是相同的。结构指针变量说明的一般形式为: struct 结构名 *结构指针变量名例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为: struct stu *pstu;结构体其访问的一般形式为: (*结构指针变量).成员名或为: 结构指针变量-成员名例如:(*pstu).num或者: pstu-num应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。结构体三种等价的形式:结构体变量.变量名(*p).成员名p-成员

41、名结构体可在第一个结点的指针域内存入第二个结点的首地址,在第二个结点的指针域内又存放第三个结点的首地址,如此串连下去直到最后一个结点。最后一个结点因无后续结点连接,其指针域可赋为0。这样一种连接方式,在数据结构中称为“链表”。下图为最一简单链表的示意图。结构体库函数提供动态地开辟和释放存储单元的有关函数:malloc函数Calloc函数free函数共用体例如:例如:union data union data int i; int i; char ch; 或或 char ch; float f; float f;a,b,c; ;union data a,b,c;共用体共用体和结构体的比较:共用体

42、和结构体的比较: 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。 共用体变量所占的内存长度等于最长的成员的长度。 l(1)同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。l(2) 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。 l(3) 共用体变量的地址和它的各成员的地址都是同一地址。 枚举类型枚举:将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。申明枚举类型用enumenum weekdaysun,mon,tue,wed,thu,fri,sat; 定义变量:

43、enum weekday workday,week-day;enumsun,mon,tue,wed,thu,fri,satworkday;变量值只能是sun到sat之一 。用typedef定义类型用typedef声明新的类型名来代替已有的类型名。声明INTEGER为整型typedef int INTEGER声明结构类型Typedef struct int month; int day; int year;DATE; 位运算12.1 数值在计算机中的表示12.2 位运算12.3 位段12.1 数值在计算机中的表示存储单元地址存储单元地址0000H0001H0002HFFFFH存储体结构图存储体结构图存储位存储位存储单元存储单元(字节)(字节)存储体存储体12.1 数值在计算机中的表示在计算机系统中,数值一律用补码表示在计算机系统中,数值一律用补码表示(存储),原因在于:使用补码,可以将(存储),原因在于:使用补码,可以将符号位和其它位统一处理;同时,减法也符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进的数相加时,如果最高位(符号位)有进位,则进位被舍弃。位,则进位被舍弃。12.2 位运算1. 只有一个变量参与运算:只有一个变量参与运算: , 2. 有两个变量参与运算:有两个变量参与运算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论