软件技术基础课件:C程序设计语言

上传人:新** 文档编号:569279219 上传时间:2024-07-28 格式:PPT 页数:137 大小:2.22MB
返回 下载 相关 举报
软件技术基础课件:C程序设计语言_第1页
第1页 / 共137页
软件技术基础课件:C程序设计语言_第2页
第2页 / 共137页
软件技术基础课件:C程序设计语言_第3页
第3页 / 共137页
软件技术基础课件:C程序设计语言_第4页
第4页 / 共137页
软件技术基础课件:C程序设计语言_第5页
第5页 / 共137页
点击查看更多>>
资源描述

《软件技术基础课件:C程序设计语言》由会员分享,可在线阅读,更多相关《软件技术基础课件:C程序设计语言(137页珍藏版)》请在金锄头文库上搜索。

1、C 程 序 设 计第一章第一章 C语言初步语言初步1.1 C语言概述1、计算机已经深入到人类生活的各个领域,但 是计算机的工作必须按照人们为其设计好的 步骤去执行,这些步骤由程序来体现。2、计算机语言是程序设计的载体。3、C语言是一种高级程序设计语言。4、C语言既具有高级程序设计语言的特点、又 具有低级程序设计语言的特点。5、C语言是一种结构化的程序设计语言。1.2 C 程序的结构特点main( ) /* 主函数,是每一个C程序的入口 */ int r=10; /* 声明部分,定义变量r */ float s; /* 声明部分,定义变量s */ s = 3.14 * r * r; /* 执行语

2、句,计算面积 */ printf ( “圆的面积=%f ”, s); /* 执行语句,输出结果 */ 1、一个C 程序中一定要有一个 main 函数,它是该程序 运行的入口;2、C程序书写格式相对自由;3、每个C 语句都应有一个分号作为结束标记;4、可用/* */对程序中的任何部分做注释;5、C程序是由函数组成的,函数是C 程序的基本单位。1.3 C 程序的开发过程编辑:源程序 (*.C)编译:产生目标文件 (*.OBJ)连接:产生执行文件 (*.EXE)执行:运行文件四个步骤:程序编辑源程序area_c.cC的包含文件编译目标文件area_c.objC库连接执行程序area_c.exe第二章

3、第二章 数据类型、运算符与表达式数据类型、运算符与表达式2.1 C 语言的数据类型基本类型 构造类型 指针类型 空类型整型实型字符型枚举型数组结构体共用体void2.2 数据在计算机中的存储数据在计算机中的存储方式:以补码的方式存储。原码:最高位为符号位:0代表正、1代表负 其余位用该数据二进制的绝对值代替。例:33 0 0 0 0 0 0 0 0 ,0 0 1 0 0 0 0 1-33 1 0 0 0 0 0 0 0 ,0 0 1 0 0 0 0 1反码:若一个数为正数,其反码和原码相同; 若为负则符号位为1,其余各位对原码取反。0的表示:00000000 00000000 10000000

4、 00000000不是唯一的补码:若一个数为正数,其补码和原码相同; 若为负则补码为反码加1。原码:-127 1 0 0 0 0 0 0 0 ,0 1 1 1 1 1 1 1反码:-127 1 1 1 1 1 1 1 1 ,1 0 0 0 0 0 0 0补码:-127 1 1 1 1 1 1 1 1 ,1 0 0 0 0 0 0 1例:127 0 0 0 0 0 0 0 0 ,0 1 1 1 1 1 1 1 -127 1 1 1 1 1 1 1 1 ,1 0 0 0 0 0 0 00的表示:00000000 00000000 11111111 11111111不是唯一的0的表示:0000000

5、0 00000000 00000000 00000000唯一的? 思考:-1的补码形式,10000000 00000000十进制是多少?2.3 C语言中的基本符号一、基本符号C语言基本符号的构成:1、26个英文字母,包含大小写(A-Z,a-z);2、10个阿拉伯数字(0-9);3、特殊符号,以运算符为主(+,-,*,/, %,=, !, )。二、标识符 1、 在C语言中用来标识变量名、符号常量名、数组名、函数名、类型名和文件名等的有效字符序列称为标识符(identifier)。2、标识符分为关键字、预定义标识符、用户定义标识符三类。2、标识符的命名原则: 标识符只能由字母(A-Z,a-z),数

6、字(0-9) 和下划线(_)这三种基本符号构成; 标识符只能以字母和下划线开头; 不能用关键字作为用户定义标识符; 标识符的命名应尽量反映其物理意义。关键字:C语言中的关键字是指有特殊意义的标 识符,如:int、float、for等,见教材p375附录II。Zhang.ying zh+ang 9v6 student_name_sum int #33D INT _1_2_3注意:C的标识符命名时字母的大小写是有区别 的, sun, Sun, SUN是三个不同的标识符。2.4 常量和变量一、常量的基本概念: 在程序运行的过程中其值不会发生变化的量称为常量,常量包含直接常量和符号常量两种。#defi

7、ne PI 3.14159 /* 定义符号常量 PI */main( ) int r; float s; r=10; /* 把直接常量10 赋给变量r */ s = PI * r * r; /* 用符号常量PI的值计算面积 */ printf ( “圆的面积=%f ”, s); 使用符号常量的好处在于:含义清楚;一改全改。二、变量的基本概念: 在程序运行过程中值可以发生变化的量称为变量。变量应遵循“先定义后使用”的原则;一个变量被定义后,编译时系统会为该变量名分配一个内存地址。1三、整型常量和变量1、整型常量2、整型变量C 语言中的整型常量有三种形式 十进制:248,10 八进制:以0开头的整

8、数 如 0123 182+28+3=83 十六进制:以0x开头的整数 如 0x123 1162+216+3=291 C语言中的整型变量有基本型、短整型、长整型、无符号型四种形式。基本型:以关键字 int 说明,占两个字节 数的范围: -3276832767 。int a , i; 短整型:以关键字 short int 说明,占两个字节 short x;长整型:以关键字 long int 说明,占四个字节 long x;无符号型:以关键字 unsigned 说明 unsigned a; unsigned short b; unsigned long c;32768(long): 00000000

9、,00000000,10000000,00000000 b(int): 10000000,00000000 -1的补码: 11111111,11111111三、实型常量和变量C语言中的实型常量有两种形式:十进制小数:数字与小数点组成。 如:1.56, 135. , .256 指数形式: 数Ee整型常数。 如:1.56E12 表示1.561012 13e2 表示13102 2.56e-3 表示2.5610-31、实型常量指数形式的使用注意:E(e)之前必须有数字,之后的指数必须为整数;规范化的指数形式是输出的形式。单精度:以关键字 float 说明,占4个字节; 有效数字: 67位; 数的范围:

10、 10-37 1038 float a , x = 1.23456789 ; 双精度:以关键字 double 说明,占8个字节 有效数字: 1516位 double x;长双精度:以关键字 long double 说明,占16个字节 long double x;2、实型变量 C语言中的实型变量有单精度、双精度、长双精度三种形式:注意:实型数据的舍入误差(p47)。3、 实数的存放以单精度为例,占4个字节,32位符号符号小数部分小数部分指数指数实数是以指数形式存放的四、字符型常量和变量字符型常量有两种形式:字符型常量:以单撇号括起来的一个字符; 或以开头的转义字符。占一个字节。 如:a, m ,

11、 2, # 普通字符 n, t ,102, h55 转义字符 字符串常量:以双撇号括起来的一串字符。 如:“china” 占6个字节 “a” 占2个字节 1、字符型常量 c h i n a 02、字符型变量 C语言中只有字符型变量,以关键字 char 说明,而没有字符串变量。 char a,b; a=A; b=a;注意:字符量与整型量可以互用。字符量与整型量可以互用。A 65a 97五、各类型数据间的混合运算char,shortintunsignedlongdoublefloat低高24*0.5 不同类型数据进行运算时,均要先转换为同一类型,再进行运算。16+a+6/4结果:双精度 12.00

12、0000整型 1142.5 运算符和表达式一、算术运算符与算术表达式一、算术运算符与算术表达式1、基本算术运算符:、%(整数相除,结果为整;0不能作为除数。) %:求余运算符,只能整型数参加常见的运算符见本教材的附录II。2、强制类型转换运算符 形式: (类型名)(表达式)(int)(x+y)(int)x%y(float)2*4(float)a3、自增自减运算符作用: 使变量的值自动增加1或减少1+ + i, i 使用i之前,先使i的值增加1或减少1例:m=3; +m;j=m+;printf(“%d,%d”,j,m); i+ +, i 使用i之后,再使i的值增加1或减少1m+n m+注意: 自

13、加、减运算符只能用于变量,而不能 用于常量和表达式; 自加、减运算符的结合方向是从右到左。 单目运算符:+ +, , ,(强制转换)双目运算符:+ ,*,/,% 关系运算就是比较运算,将两个值进行比较,判断比较结果的真和假。关系运算符是一种双目运算符。 、 = 、= = 、!=2、关系表达式:格式:(表达式)(关系运算符)(表达式)表达式的类型:算术表达式、赋值表达式、 关系表达式或逻辑表达式表达式的值:0 或1关系表达式的结合性:自左至右二、关系运算符和关系表达式二、关系运算符和关系表达式1、关系运算符:关系表达式中前四种运算符的优先级高于后两种例如:若a=5,b=6,0表达式 c=a+b5

14、 等效为 c=(a+b)5) 即 c=1表达式 c=a=b5等效为 c=(a=(b5) c=0表达式 c=5b=a等效为 c=(5 b 的值为混合运算的优先级: 算术运算符 关系运算符 赋值运算符三、逻辑运算符和逻辑表达式三、逻辑运算符和逻辑表达式& 与 双目运算符 同时为真时则逻辑运算的值为真 | 或 双目运算符 之一为真时则逻辑运算的值为真! 非 单目运算符 取反优先级: ! & | |混合运算的优先级: ! 算术运算 关系运算 & 、 | |1、逻辑运算符: 赋值运算参与逻辑运算的是逻辑量和逻辑运算符:2、逻辑表达式: 例:a=0.1,b=2, c=0 则:a|b & c 的值为:逻辑表

15、达式的值为 0 或 1,逻辑量非 0 即 1。 1!(ba)&!c|1的值为: 1注意: 多个与运算:表达式1&表达式2& 若表达 式1为“假”,则后面的表达式不再运算; 多个或运算:表达式1 | | 表达式2 | | 若表达 式1为“真”,则后面的表达式不再运算;例如: x=4 ; y=5; i=1; if (x+=5)&(y+=6) i+; 执行完后的结果为:x=5 , y=5 i=1四、赋值运算符和赋值表达式四、赋值运算符和赋值表达式1、赋值和赋值表达式的概念:赋值就是将一个确定的值赋给一个变量。赋值表达式:变量 = 运算表达式常量、变量和函数调用例如: a = 3 a = b a =

16、f ( ) 2、赋值的类型转换问题:、实型变量 整型变量:取整数部分 整型变量 实型变量:加上小数点后的 0 , 并符合有效位数。、整型变量 字符变量:只需将其低 8 位赋给字符变量。、整型数据间的转换:按其存储单元中的存储形式直接传送。3、复合赋值运算符 在赋值运算符前加上一个二元运算符就构成复合赋值运算符。例如:x * = y+1x = x * (y+1)x = x * y + 1、字符型变量 整型变量:若字符的最高位为0,高位补0; 若字符的最高位为1,高位补1;4、嵌套赋值 有多个赋值号“ = ”的赋值语句称为嵌套赋值语句。a = ( b = 6 ) + 7 ; b = 6 ; a =

17、 b + 7 ;a + = a - = a * a; 若 a = 2 ,则表达式的值为:-4由此可知嵌套赋值的结合性为:自右自左。a = b = c = 3 ;a = ( b = ( c = 3 ) ) ;逗号有两种用途:分隔符和运算符。分隔符:int x , y , z ; 运算符:将若干个表达式用逗号串接起来,构 成逗号表达式,并以最后一个表达式 的值作为整表达式的值。 表达式1,表达式2 ,表达式n 五、逗号运算符和逗号表达式五、逗号运算符和逗号表达式例:3 + c , b + 5这是一个逗号表达式,表达式的值为(b+5)逗号表达式的一般形式:x = 3 + 7 , x * 8 a =

18、2 * 4,a + 5 a =(2 * 4 ,a + 5) 这是一个赋值表达式,右边为一个逗号表达式,是把逗号表达式的值赋给变量a。 此逗号表达式的前一个表达式为赋值表达式,x的值为10,逗号表达式的值为80 此逗号表达式的前一个表达式为赋值表达式,同上面表达式有何区别呢?注意:逗号表达式的优先级最低。见附录III 数据输出一般是指把程序中的执行结果或提示语句输出到计算机的屏幕上。C语言中没有“输出命令”,一切输出功能都是利用系统提供的函数来完成的。2.6 数据的输入和输出1、格式输出函数(printf函数) 此函数是按指定的格式完成输出功能,它可以向屏幕输出字符、字符串、数值以及空行等,在中

19、文操作系统中还可输出汉字。printf (“输出格式”,输出项列表);使用格式:输出格式中有三类符号: 转换说明符 转义字符 普通字符 转换说明符用于对各输出项的输出形式进行控制,每个说明符是和每个输出项一一对应的。转换说明符以百分号开头,后跟一个字母,共有以下七种: % c 单个字符 % d 有符号的十进制整数 % f 实型数据 % o 无符号八进制整数 % s 字符串 % x 无符号十六进制整数 % % 输出百分号 转义字符是字符常量的特例,以反斜线打头。一些无法象一般字符一样可明确写出来的专用字符:如键盘上的回车、退格等,另外如逗号、反斜线、单引号、双引号等字符在C语言中都可转义字符来表

20、示,才可在屏幕上输出。常用的转义字符有以下几类: n 回车换行; t 换列;(8个二进制1列) b 退格; a 响铃; f 换页; r 回车不换行,光标至当前行的开始; 反斜线; 单引号; “ 双引号;输出项也有三类: 变量 ; 字符数组名; 表达式 当输出一个字符串数组时,在输出项列表中可直接用数组名表示数组,对应的转换说明符为 % s 。如: char ch10; printf ( “ % s ”, ch ) ;2、putchar ( ) 、puts ( ) 函数请大家自学。 普通字符是指“格式输出”中的非转换说明符、非转义字符。其主要是输出一些提示符号,这些字符可按实际的形式输出到屏幕上

21、。如: printf ( “ hello world n” ) ; 数据输入数据输入:许多程序都要进行数据输入,不同的输入值,经过程序的运算得到不同的输出结果。同输出功能一样,在C语言中数据的输入也是利用系统提供的函数来完成的。1、格式输入函数(scanf ( ) 函数)scanf函数是C语言中使用较多的一种输入函数。使用格式:scanf ( “转换说明符”,变量地址列表 ); 这里的“转换说明符”和格式输出函数printf ( ) 中的“转换说明符”是一致的,主要用于对输入数据的数据类型的控制。如: scanf(“%d”,&a); /* 向变量a中输入一个整形数值*/printf(“ %d

22、”,a); /* 输出变量a 的值 */scanf(“%d%c”,&a,&c);/* 向变量a,c输入确切的值 */printf(“%d%c”,a,c); /* 输出变量 a , c 的值 */scanf(“%s”,&ch); /* 向数组 ch 输入确切的值 */printf(“%s”,ch); /* 输出数组 ch 中各元素的值 */ 2、getchar ( ) 和 gets ( ) 函数自学课堂习题Page 65 3.10第三章第三章 C 语言的控制结构语言的控制结构 3.1 概述:一、流程图: 流程图是描述程序算法的工具。起止框:用于表示程序的开始和结束。处理框:用于表示赋值,“加减乘

23、除”等操作。判断框:根据条件决定执行几条路径中的一条。输入输出框:用于表示数据的输入和输出。流程线:用于表示程序的执行方向。连接点:用于将不同地方的流程线连接起来。 用流程图表示程序流向的好处是:用图形表示程序流程,形象直观,各操作一目了然,而且不会产生“歧义性”,因此流程图成为描述程序的强有力工具。二、N-S图(自学)。三、结构化程序设计结构化程序设计方法的要点:1、要求程序清晰、可读性强。2、要求程序设计者按一定的规范编写,而不能随 心所欲的设计程序。3、结构化程序设计方法规定了几种具有良好特性的 “基本结构”,用它们作为构成程序的基本单元。 “基本结构”具有以下特点: 只有一个出口。 只

24、有一个入口。 没有永远执行不到的语句。 没有死循环。 顺序结构、选择结构和循环结构是符合以上特点的基本结构。已经证明,由这三种基本结构构成的程序可以处理任何复杂问题。4、程序开发应当采用“自顶向下,逐步模块化”的 方法,即将一个大任务先分成若干个子任务,每 个子任务就是一个模块(函数)。3.2 顺序结构: 顺序结构是我们最常用的一种程序结构,它 的特点是:程序按语句从上到下的排列顺序依次执行,每条语句必须执行且只能执行一次,没有执行不到或多次执行的语句。 例1:已知一个圆柱体的半径为6,高为 7,求圆柱体的体积。hrs = r 2v = s h开始给 r , h 赋值计算面积 s = r2计算

25、体积 v = s * h输出结果结束 定义符号常量PI,其值为3.14159; 写 main ( )主函数头 函数体开始 “ ” 定义浮点型变量r,h,s,v; 给半径r和h高赋值; 求底面积:s=PI*r*r; 求体积:v=s*h; 用printf函数输出v的值; 函数体结束。 “ ”例2、输入两个整数a,b,交换它们的值,最后输出(提示: 要交换a,b需借助一个中间变量temp,首先让temp存放 a的值,再把b存入a, 再把temp存入b即可)。#include main ( ) int a,b,temp; printf(“ Please input a and b:”); scanf(

26、“%d,%d”, ); temp = a ; ; ; printf(“a=%d,b=%d”, ); /* 交换 a 和 b 的值 */* 输出a和b的值 */* 定义整型变量 a , b 和 temp */* 输入a和b的值 */* 输入提示 */* 编译预处理:包含头文件 */&a,&b a, ba = bb = temp二、选择结构: 选择结构的特点是:程序的流程是由多条支路构成的,在程序的依次执行过程中,根据不同的情况,只有一条支路被选中执行,而其他支路上的语句被直接跳过。在C语言中,提供了if 语句和 switch 语句来实现选择结构。( (一)一) if if 语句语句1、最基本的i

27、f 语句表达式语句组或语句真假基本 if 语句的通常形式是:if ( 表达式 ) 语句;if ( 表达式 ) 语句; 语句; if ( x y ) /* 简单语句 */ z = x ;if ( x Y ) /* 复合语句 */ z=x; x=x+1; printf(“%dn”,z); 可以为逻辑表达式或关系表达式复合语句:是由一对花括号包围起来的一条或多条语句。复合语句的形式:选择结构循环结构 语句1; 语句2; 语句3; If( 条件 ) 语句1; 语句2; 语句3; while( 条件 ) 语句1; 语句2; 语句3; 复合语句 复合语句在选择结构,循环结构中常常用到。逻辑上我们把复合语句

28、看作是一条语句。 前面我们介绍语句时,包括:保留字、条件表达式和满足条件时要执行的语句在内,都被看作是一条语句,即使它使用复合语句的形式,仍然如此。例1:要求用户输入一个实数,然后程序求出这个实数的绝对值并输出。#include main( ) float x,y; printf(“Please input x:”); scanf(“%f”,&x); y = x; if(y0则y=x,如果x=0”和“x=0”为真后,就意味着“x=0) y=x;if (x=0) 语句1;else 语句2;注意:如果使用了复合语句,一定要用大括号把它们括起来。If( x0 ) printf(“x为正数n”); x

29、=x+1;else printf(“x为负数n”);If( x0 ) printf(“x为正数n”); x=x+1; else printf(“x为负数n”);#include main( ) int x,y; scanf(“%d,%d”,&x,&y); If( xy ) printf(“xyn”); else printf(“x y ) printf(“ x大于yn ”);else if ( x y ) printf(“ x小于yn ”);else printf(“ x等于yn ”);#define RATE1 1.0#define RATE2 0.8#define RATE3 0.7#de

30、fine RATE4 0.5#include main( ) int num; /* 商品的购买量 */ float price,money; /* 商品的单价和应付金额 */ printf(“请输入商品的购买量:”); scanf(“%d”, ); printf(“请输入商品的单价:”); scanf(“%d”, ); If( ) /* 构物少于10件的不打折 */ money=RATE1 * price * num ; else if ( ) /* 10件以上8折 */ money=RATE2 * price * num ; else if ( ) /* 20件以上7折 */ money=

31、RATE3 * price * num ; else /* 50件以上5折 */ ; printf(“应付金额为%.2 f元n”, ); &num&pricenum10num 20num b) max = a ; else max = b ;max = ( a b ) ? a : b含义:先判断a b, 为真 则将 a 赋给 max, 为假则将 b 赋给 max。一般形式:表达式1 ? 表达式2 :表达式3表达式的结果为表达式2或表达式3的结果;运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右

32、自左”。例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a b?a:cd?c:dab?a:(cd?c:d)六、六、 switch switch 语句语句switch 语句是多分支的选择语句又称开关语句。switch 的一般形式为: switch ( 表达式1 ) case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; . default: 语句3; 注意:常量表达式必须 是整型、字符型。switch 语句的工作流程:例: 根据考试成绩的等级“a,b,c,d”,打印出“优”, “良”等评语。#in

33、clude main( ) char grade; printf(“请输入成绩等级(a,b,c,d):”); scanf(“%c”, &grade ); switch(grade) case a: printf(“优秀n”); break; case b: printf(“良好n”); break; case c: printf(“中等n”); break; case d: printf(“差等n”); break; default: printf(“ 输入错误n ”); 例: 根据输入的月份值,打印出1998年的某月有多少天。 case 9: case 11: day=30; break;

34、case 2: day=28; break; default: day=-1; if ( day!=-1) printf(“1998年的%d月有%d 天”,mouth,day); else printf(“月份输入错误!n”); #include main( ) int month; printf(“请输入月份:”); scanf(“%c”, &mouth ); switch(mouth) case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; break; case 4: case 6: 课堂练习 习题Page 10

35、4 5.3,Page 105 5.51*1 + 2*2 + 3*3 = ?int s;s = 1*1 + 2*2 + 3*3 1*1 + 2*2 + 3*3 + . + 100*100 = ? 引入循环结构就可以简化程序大量的重复操作。 在C中,循环结构是由while语句,do while 语句和for 语句来实现的。为了方便地控制程序流程,C语言还提供了两个辅助语句:break 和 contine。第五章第五章 C 语言的语言的循环循环结构结构 一、一、while while 循环循环:while ( 表达式 ) 语句;while 语句的工作流程是: 首先计算括号中的表达式,若表达式的值为真

36、,则执行循环体。循环体中的语句执行完后,返回到 while 语句处,重新计算表达式的值,为真则继续执行循环体,否则退出由while语句和循环体构成的循环结构,执行下面的语句。依此循环,直到while 语句中的表达式的值为假时,跳出while 循环。例: 计算10的阶乘main( ) int i= 10; int s=1; while ( i0 ) s = s * i; i-; printf(“ s=%d ”,s); 循环结构的术语:循环条件、循环体和循环控制变量例: 打印0到9的整数。main( ) int i=0; while ( i10 ) printf( “i=%d ”,i); i+;

37、循环条件:是循环结构中的表达式,如 while ( i10 )循环体: 是每个循环周期均要执行一次的语句序列, 如 while 语句下面用花括号括起来的复合 语句。循环控制变量:是在循环条件中控制条件是真是假 的变量,如 i。 要写出一个正确的循环结构,对控制变量要做三方面的工作:控制变量赋初值;把控制变量写入正确的循环条件;控制变量的更新、调整。例:s=1+2+3+ +100=?s=0; s=s+1; s=s+2 ; s=s+100使用循环来解决:s=s+i; i=1,2,3, ,100;二、二、 do while do while 循环:循环: while 循环表示“当满足条件时,一直做某

38、事”。do while 循环表示“一直做某事,直到条件不满足为止”。Do 语句;while ( 表达式 )do while 循环的工作流程是: 首先执行 do 下面的语句,开始了第一个循环周期,然后计算 while 语句括号中的表达式,若表达式的值为真,则返回到do 语句处,继续执行循环体,否则退出由do 和 while语句构成的循环结构,执行do while下面的语句。依此循环,直到while 语句中的表达式为假。 从流程图可以看出,不管开始时测试条件是否为真, do while 循环都要执行一次。这是do while 循环和 while 循环的主要区别。main( ) int i=0; d

39、o printf ( “i=%d ”,i); i+; while ( i0 ) printf(“ s=%d ”,s); 例: 打印0到9的整数。例: 这是一个猜数游戏,利用 do while 循环,可以让 你猜出程序中的一个神秘数字。#include #define GOAL 39main( ) int data,count=0; do printf(“请输入一个整数:”); scanf(“ %d ”, &data); if(dataGOAL) printf(“%dGOAL”,data); else if ( dataGOAL ) printf(“%d0;i-) s = s * i; prin

40、tf(“ s=%d ”,s); 例: 打印0到9的整数。main( ) int i; for(i=0;i10;i+ ) printf ( “i=%d ”,i); i = 1,s = 0,s = 12 = s + i2;i = 2,s =1,s = 12 +22 = s + i2;i =5,s = 12 +22 +32+42s = s + i2; 实际使用的过程中,应根据具体的情况来选择不同的循环结构。选用的原则如下:如果循环的次数在执行循环体之前就已经确定,一般用for 循环;如果循环次数要根据循环体的执行情况而定,则要用 while 循环或 do while 循环。四、四、whilewhil

41、e、do whiledo while、forfor循环的选用循环的选用main( ) int a10,i,n=10; for(i=0;in;i+ ) printf ( “%d ”,ai); 例:打印数组a10中各元素的值。main( ) char c; do scanf(“%c”,&c); printf ( “c=%cn”,c); while( c!=q&c!=Q); 例: 打印用户从键盘上输入的字符,当输入q或Q时,程序结束。当循环体至少执行一次时,用do while 循环;反 之用while 循环。例: 打印用户从键盘上输入的字符,当输入q或Q时,程序结束,要求打印包括q或Q 的所有字符。

42、例: 打印用户从键盘上输入的字符,当输入q或Q 时,程序结束,要求打印除q或Q 之外的所 有字符。#include main( ) char c; scanf(“%c”,&c); while ( c!=q&c!=Q) printf (“c=%cn”,c); scanf(“%c”,&c); #include main( ) char c; do scanf(“%c”,&c); printf ( “c=%cn”,c); while( c!=q&c!=Q); main( ) char i; for(i=0;i7;i+) printf ( “*”); printf(“n”); for(i=0;i7;i

43、+) printf ( “*”); printf(“n”); . for(i=0;i2)层循环体称为多重循环。 前面介绍的三种循环结构while、do while、for 都可以互相嵌套自由组合。什么是循环嵌套? 一个循环体中套有另一个循环叫循环嵌套。这种嵌套可以一直重复下去。下面我们用二重循环来解决刚才打印星号的问题。 如果将上面打印星号矩形的问题改为打印星号三角形,程序该如何修改呢?只须将程序中的 k 7 改为 k i 即可。main( ) char i,k; /* 外循环控制星号矩形的行 */ for(i=0;i8;i+) /* 内循环打印每一行的7个星号 */ for(k=0;k7;k

44、+) printf ( “*”); printf(“n”); /* 换行 */ 六、循环的辅助语句六、循环的辅助语句 有时,需要在循环体中提前跳出循环,或是在满足某种条件时,不执行循环体中的所有语句而提前开始下一轮循环。这时就要用到两个循环的辅助语句:break 和continue 语句。例: 计算输入的所有正数的和,当用户输入0时结束,输入负数时不考虑。#include main( ) float f,s; s=0; do scanf(“%f”,&f); if ( f0.0) continue; s=s+f; while(f!=0.0) printf(“s=%fn”,s); 例: 打印半径为

45、1到10的圆的面积,若面积超过100,则不予打印。#define PI 3.14159main( ) char r; float area; for(r=0;r100.0) break; printf(“area=%fn”,area); printf(“r=%dn”,r); break语句的作用是在循环或选择结构中,中断循环结构的运行,而跳出循环。如果存在两个独立的理由要离开循环,则应使用break语句。 break语句只影响包含它的最内层循环。 continue 语句只作用在循环结构中,当满足某种条件时,忽略循环结构中本次循环体的运行,而进行下一次循环。 continue 语句和 break

46、语句一样也只影响包含它的最内层循环。循 环 结 构 小 结 循环结构是结构化程序设计的基本结构之一,主要包含 while、do while、for 三种循环语句。不同的循环语句特点存在差异,但原则上可以相互替代。使用break和continue语句可使循环的使用更加灵活,而且循环可以嵌套使用。 通过本章的学习要求大家掌握三种循环语句的流程、特点和使用方法;掌握构造一个循环的三个基本要素,能够使用循环方式搭建自己的程序。习题:6.4,6.8,6.14#include main( ) int w1,w2,w3,w4,w5,w6,w7,w8,t;/*定义8个变量存放体重*/ scanf(“%d”,&

47、w1); /* 输入8个体重值 */ scanf(“%d”,&w2); . scanf(“%d”,&w8); t=w1+w2+w3+w4+w5+w6+w7+w8; /* 求平均体重 */ t=t/8; if(w1t)printf(“%dn”,w1); /*打印高于平均体重的值*/ if(w2t)printf(“%dn”,w2); . If(w8t)printf(“%dn”,w8); 例: 已知8个儿童的体重,要求计算平均体重并打印出高 于平均体重的值。第六章第六章 数组数组 8次8次#include main( ) int w8,t=0; /* 定义一个数组来存放8个体重值 */ int i;

48、 for(i=0;i8;i+) /* 输入体重值 */ scanf(“%d”,&wi); for(i=0;i8;i+) /* 求平均体重 */ t=t+wi; t=t/8; for(i=0;it) printf(“%dn”,wi); 数组是一组有序的、类型相同的数据的集合,这些数据称为数组的元素。车厢名车厢号数组名数组下标一、什么是数组:每个数组都有一个名字称为数组名,数组命名 的方法和其他变量的命名一样,应该遵循标识 符命名的规则。为标识数组中的每个元素,需对每个元素进行 编号,这种编号称为数组元素的下标(C语言 中规定下标从0开始)。有了下标,元素在数组中的位置就被唯一地确 定下来。因此用

49、数组名加上下标就可以访问数 组中的各元素。1、一维数组指明数组元素的数据类型指明数组所含元素的个数定义一维数组的一般方式:类型标识符 数组名常量表达式;例如:int n; int a n;例如:char name 0; float weigh 10.3; int array-100;定义数组时的长度要用常量表达式,而不是变量。定义数组时常量表达式要用方括号括起来。定义数组的常量表达式的值必须是大于0的正整数。例如:int a 5=2,4,6,8,10;注意:如果初始化数组时给出了所有元素的初值,则数组的下标可以省略,此时系统自动由初始化数据的个数来确定数组的长度。例如:int weight 1

50、0; float a 7; int b 10 ;2、一维数组的初始化:例如:int a = 2,4,6,8,10;初始化的数据个数允许少于数组的长度,但不能多于数组的长度。例如:int a5=2,4,6,8,10,12,14; char a 5 = a,b,c,d,e; 定义一个有5个元素的一维字符型数组,并初始化所有元素。定义一个有5个元素的一维实型数组。 float a 5 = 11.2,23.4; 例如:定义一个实型数组。 float a ; 定义一个有5个元素的一维整型数组,并初始化所有元素。 int a 5 = 1,2,3,4,5; 或 int a = 1,2,3,4,5;数组名代表

51、数组在内存中的首地址,因此可用数 组名表示数组元素a0的地址。 如:scanf ( “ %d ” , a ) ; 和 scanf (“ % d ”, &a0 ) ; 是等价的。在引用数组元素时应注意:数组元素是通过数组名加上数组元素在数组中的位置 (下标)来访问的。下标可以是整型常数或 表达式。数组元素的下标从0开始。an的下标范围:0到n-1。除初始化外,数组元素的赋值是逐个进行的,不允 许整体赋值。即把一个数组作为一个整体赋给另一 个数组或利用花括号列表的形式对数组进行整体赋 值。 int a 2; scanf ( “ %d , %d ”, &a1, &a2 ); int a 2; sca

52、nf ( “ %d , %d ”, &a0, &a1 ); int a 5; a = 2,4,6,8,10;例如: int a10 , b10;将a 的第10个元素赋给b的第一个元素。 int a 10,b 10 ;b 0 = a 9;已知:int a5;请问以下给数组赋值的方法对吗?已知:int a2;以下用scanf语句给数组的各元素赋值的方法对吗?已知:int a10;问以下给数组的各元素 a 3 赋值的方法对吗? int a 10; float i = 3;a i = 10; 由于数组元素具有相同的性质,处理它们往往属于重复操作,因此数组的操作离不开循环。 int a 10;a 4 =

53、 8;例如:已定义整型数组 int a10 ; 对数组 a 的第5个元素赋值为8。例如:在一个数组 a 中寻找和 x 相同元素的位置。否则报告 “没有找到x”,假定数组中的元素互不相同。假定 a=(5,3,2,6,1,7,4,9,8,11。#include main( ) int a10=5,3,2,6,1,7,4,9,8,11; /* 定义数组并初始化 */ int i,x; /* 定义循环变量 i 和待查找元素 x */ printf(“请输入 x 的值”); scanf(“%d”,&x); for(i=0;i10;i+) /* 依次查找 x 是否在数组中 */ if(ai=x) brea

54、k; if(iy) z=x; else z=y; return z; 此程序由两个函数组成,一个是main( ) 函数,一个是自定义的函数 max( )。max( ) 有两个参数,即x 和 y。max( )函数的功能是比较x和y的大小,并返回其中大数的值。main( ) 函数调用max( ) 函数时,将实际参数 num1和 num2的值分别传送给 x和 y,用变量 a 来接收函数 max( ) 的返回值。函数定义的一般形式:类型标识符 函数名(形式参数表) 函数体; return 函数返回值; 类型标识符:说明了函数的类型即函数返回值的类型,可以是C语言中的任何合法数据类型。 C语言中,若函数

55、的类型为整型时,允许省略函数的类型标识符,若函数没有返回值则定义函数的类型为空类型,用保留字 void 来表示。 上例中,max( )函数的类型为整型,即该函数的返回值为整型。函数名是一个标识符,在程序中标识函数的名称。函数的命名要符合标识符的命名规则。一个好的函数名应该能够反映函数的功能。形式参数表是用来说明调用函数时要传递的参数的个数和参数的类型。其一般格式为: 形参变量类型 形参变量名;如果有多个形参则各形参的说明之间应用逗号隔开。 如例程中的函数名 max 是英文单词 maxnum 的缩写,它反映了函数的功能是用来求最大值的。 如例程中的函数max中有两个整型形参x和y,其说明为:in

56、t max (int x, int y); 。C语言允许函数不带参数,可用保留字void来说明,也可省略。函数体 函数的类型标识符、函数名和形参列表三者构成了一个函数的函数头。在函数头下用一对大括号括起来的部分是函数的函数体。函数体是由实现函数功能的语句序列构成的。在形参列表中已经定义的变量可以在函数体中使用,若函数体中使用了其他变量,仍然要“先说明,后使用”。如:函数 max中变量x和y为形参,可直接使用,而变量z则必须先定义,后使用。return 语句 return 语句的使用格式为: return; 或 return(表达式); 或 return 表达式 ; 应注意:如果函数的类型不为空

57、,则函数在返回前必应注意:如果函数的类型不为空,则函数在返回前必须使用须使用returnreturn语句,且语句,且returnreturn语句中的表达式的值的类型语句中的表达式的值的类型必须与函数的类型一致。反之,可不用必须与函数的类型一致。反之,可不用returnreturn语句,若用语句,若用一定是用第一种格式,表示函数结束一定是用第一种格式,表示函数结束。int min(int x,int y,int z) /* 定义函数头 */ /* 函数体开始 */ int r; /* 定义函数中使用的变量 */ if(xy) r=x; else r=y; /* 求最小值 */ if(zy) z=

58、x; else z=y; return z; 对函数的调用要注意: 函数调用的一般形式:函数调用的一般形式:A.把函数调用作为一个语句。一般形式为: 函数名 (实际参数表); 这种方式常用于调用一个没有返回值的函数。如例程中对scanf 函数和printf 函数的调用。 其中,实际参数表中的参数可以是常量或变量,也可以是各种表达式;参数的个数和类型必须和函数要求的形式参数的个数和类型一致。 函数调用的具体形式:函数调用的具体形式: 这种方式用于调用带返回值的函数,函数的返回值将参与表达式的运算。如例程中的: a = max (num1,num2); 函数名(实际参数表)B. 函数调用出现在表达

59、式中,这种表达式称为函数表达式。其一般形式为: 变量 = 函数表达式 ; 对被调用函数的说明:对被调用函数的说明: 同变量一样,函数的调用也应遵循 “先说明,后使用” 的原则。函数的说明形式就是写出函数的函数头,在其后加上一个分号。如例程中:int max( int x,int y); 就是对函数 max ( )的说明。三、函数的参数传递 一般情况下,调用函数时,主调函数与被调函数之间有数据传递的关系。主调函数通过函数的参数进行数据传递;被调函数通过return语句返回数据到主调函数中。 下面通过一个例子来观察一下,在函数的调用过程中参数是如何进行传递的。 在函数的参数传递中,被调函数对于形参

60、变量值的改变是否会导致主调函数中实际参数值的改变呢?ab100200xy100200temp100200100当需要传递大量数据给一个函数时,用前面的把实参的值一个个复制给形参的方法就显得繁琐了。由于C语言中允许对变量的地址进行操作,于是我们可以把待传递的数据集中放在一块内存区域中,传递时就只须把这块内存的首地址传递给函数即可。函数可根据这个地址找到它需要处理的数据。这种方法的优点在于: 1、由于只须复制一个地址,而无须复制全部待处理的数据,因此可以节约存储空间并提高效率。 2、由于主调函数和被调函数是在相同的内存区域内对数据进行操作,因此可以实现数据的同步更新。 我们已经知道,数组名代表的就

61、是数组在内存中存放区域的首地址。把数组名作为函数参数来实现大量数据的传递就是很自然的事情了。例1:已知10个学生的考试成绩,放在一个数组score中,求考试平均成绩。求平均成绩用函数average( )来实现。四、函数的嵌套调用和递归调用 函数的嵌套调用是指在调用一个函数A的过程中,函数A又可调用另一个函数。 函数的递归调用是指在一个函数在运行过程中直接或间接地调用自己。1、函数的嵌套调用:如果在实现一个函数的功能时需要用到其它函数的功能,这时使用函数的嵌套调用就显得很自然了。例1:求三个数中的最大数和最小数的差值。 编写这段程序时,可用到三个函数:dif()求差值、max()求最大值min(

62、)求最小值,而在调用函数dif()的过程中,需要进一步调用函数max()和函数min()来分别求三个数的最大值和最小值。2、函数的递归调用:递归调用的优点是使程序代码简洁、紧凑,但在使用递归调用时要注意避免无穷递归,此时需要设定一个条件,只有在满足条件时才进行递归调用,否则就不再继续进行递归调用。 解决这个问题函数的递归调用是方法之一。其实现思路为:n的阶乘等于n乘以n-1的阶乘。注意:只有在参数n大于0时才进行递归调用,这是避免无穷递归的条件。例2:求一个整数的阶乘。四、全局变量和局部变量四、全局变量和局部变量 凡是在函数外部定义的变量称为全局变量。 凡是在函数内部(包括 main( )函数

63、)定义的变量称为局部变量。 全局变量和局部变量是从作用域的角度来区分变量的类别。#include int g1=0,g2=0; /* 定义全局变量 */void newvalue( ); /*说明函数 */main( ) int i=1,j=2; g1=i;g2=j; printf(“g1=%d,g2=%dn”,g1,g2); newvalue(); printf(“g1=%d,g2=%dn”,g1,g2); void newvalue( ) int i,j; i=2*g1; j=2*g2 g1=I;g2=j; 本例中,g1,g2是在函数外部定义的,是全局变量,它们对于源程序中所有函数都是可见

64、的。 在main( )函数中定义了整型变量 i,j,它们是main( )中的局部变量,只能在main( )中使用。在newvalue( )函数中也定义了整型变量 i , j, 它们与 main( ) 中的 i , j不同,只能在newvalue()中使用。是该函数的局部变量。1.习惯将全局变量的第一个字母大写;2.建议不必要时不要定义全局变量:全局变量在程序的全部执行过程都占用存储单元,而不是仅在需要时才开辟单元;使函数的通用性降低,因为函数在执行的过程中依赖于其所在的外部变量,可移植性差;使用全局变量过多,会降低程序的清晰性;如果在同一源文件中,外部变量与局部变量同名,则在局部变量的作用范围

65、内,外部变量被“屏蔽”,即它不起作用。几点说明:函 数 小 结 在本章中,要掌握函数的说明、定义、调用的一般规则;掌握主调函数和被调函数在调用函数时参数传递的方式:传值调用和传地址调用;掌握变量的作用域(空间和时间)的含义和相关概念。习题:8.3、8.4、8.5、8.10、8.13 函数是C语言实现结构化程序设计的工具,使用函数不仅可以实现模块化编程设计,还可以提高函数的复用性。第八章 指针 1、内存:即是内部存储器,由存储单元组成。它的特点是存储单元是线性连续的。存储单元的最小单位是 字节。2、内存地址:正如我们的住房都有门牌号码一样,为了访问内存中的某个存储单元,我们也要为它编号,这种编号

66、称为内存地址。利用内存地址我们可以访问该地址标识的存储单元。3、程序中一旦定义了一个变量,该变量在内存中就将占用一定的存储单元。变量占用的存储单元总是n(n0)个连续的字节,开始字节的地址,就是变量的地址也可成为该存储单元的首地址。一、和指针相关的基本概念:从右图可知,指针变量和一般变量一样,仅仅是变量的内容为变量地址的变量而已。 一般而言,指针变量只能存放某一种数据类型的变量的地址,由此可将指针变量分为:整型指针变量、实型指针变量和字符型指针变量等等,指针变量表明了其指向的存储单元中存放的数据的类型。 当把变量的地址存入指针变量后,我们就认为 这个指针指向了该变量。二、指针的基本概念: 指针

67、就是变量的地址。与此对应,在C语言中使用一类专门的变量即指针变量来存放变量的地址。即是说:指针变量是存放地址数据的变量。 指针的定义方式如下: 数据类型名 * 指针变量名;在定义指针时要注意以下几个问题: 变量前面的“*”不能省略,如果写成:则表示 ptr2 被定义为整型变量而非整型指针变量。 int *prt1,ptr2; int *prt1,*ptr2; 定义中的“*”表示所定义的变量是指针变量,但指针变量名 ptr1、ptr2而非* ptr1、* ptr2。 指针变量只能指向定义时所规定类型的变量。如ptr1、ptr2 只能指向整型变量而不能指向实型或字符型变量。 定义指针变量后,并未确

68、定该变量指向何处。即是说该变 量的值是不确定的,在引用该指针变量前,必须先让它指 向一个变量或在内存中为其分配一个相应的存储单元。三、指针变量的定义: 取地址运算符&的作用是取变量的地址。如:& i 表示求变量 i 的地址。 引用运算符 * 的作用是取指针指向变量的内容。如: * ptr 表示求指针 ptr 所指向变量的内容。& 运算和 * 运算是一对逆运算。先对变量 i 作取地址运算,其地址值赋给 point,point指针就已指向变量 i, *point的值为3。给*point 赋值相当于给 i 赋值。1 、& 取地址运算和 * 引用运算四、指针的“&”、“*”和赋值运算:main( )

69、int i=3; int *point; point=&i; printf(“*point=%d”,*point); *point=15; printf(“i=%d”,i); 2、指针的赋值运算 指针的赋值运算可以是以下两种种方式:把地址的值赋给指针变量;把一个指针的值赋给另一个指针。注意指针的值为空时,C语言中常用一符号常量NULL给其赋值。main( ) int i=3,ary5; int *ptr1,*ptr2; ptr1=&i; ary2=*ptr1; ptr1=NULL; ptr2=ary; ptr1=ptr2; main( ) float flt; float *f_ptr=&fl

70、t; int *i_ptr=NULL; int *c_ptr=NULL; . 例2:下面我们来看一个和“&”“*”和指针赋值语句相关的例子 数组在内存中占用连续的存储单元。指针最常见的一种用途就是指向数组元素。当一个指针指向数组元素后,就可以用它灵活、快速地处理数组元素,从而体现出指针的优势。 C语言中规定数组名代表数组的首地址,即第一个元素的地址。因此:ptr3 = ary 等价于 ptr3 = &ary0;当指针指向数组的首地址时,指针可以象数组一样使用。如指针ptr指向了数组ary的首地址,就有:*(ptr+2)、ptr2、ary2、*(ary+2)这四种形式都表示了数组的第三个元素。m

71、ain( ) int *ptr1,*ptr2,*ptr3; int ary5=2,4,8,16,32; ptr1=&ary0; ptr2=&ary3; ptr3=ary; 五、指针和数组: 但是,指针变量与数组名有区别:指针变量是地址变量,数组名是地址常量。即是说指针变量的内容可以在程序运行的过程中被改变,而数组名一旦被初始化,它的值就不能被改变了。main( ) int *ptr,i,ary10; ptr=*i; ary=&i; #includemain( ) int *ptr; int ary5=2,9,5,45,3; ptr=ary; printf(“*(ptr+2)=%dn”,*(pt

72、r+2); printf(“ptr2)=%dn”,ptr2); printf(“ary2)=%dn”,ary2); printf(“*(ary+2)=%dn”,*(ary+2); 五、指针的加减运算:、指针与整型值的加减的结果是使该指针下移或上移整型值所指定个数的存储单元后的地址。存储单元的大小就是该指针的数据类型所需的内存大小。、指针之间不允许加运算。、指针之间的减运算的含义是计算这两个指针相差几个存储单元,其结果是一个整数,可由下式计算:ptr1-ptr2=(ptr1的值-ptr2的值)/指针的数据类型所占的字节数1、指针的加减运算(+、-):指针的加减运算有两种形式一是指针与整型值的加减

73、运算;另一种是指针与指针的减运算。main( ) int *ptr1,*ptr2,x; int ary5=2,4,6,8,10; ptr1=ary; ptr2=ptr1+3; x=ptr2-ptr1; 2、指针的自加减运算(+、-、+=、- =):指针的+和+=运算是移动指针到下一个或下几个存储单元;指针的-和- =运算是移动指针到上一个或上几个存储单元。六、指针和函数:指针可以作为函数的参数,这同用数组名作为参数的用法是一致的:可传递大量数据;可改变参数的值。例:下面我们来看一个和指针移动运算相关的例子main( ) int *ptr; int ary5=2,4,6,8,10; ptr=ar

74、y; ptr+=3; ptr-; ptr-=2; ptr+; #include void swap(int *p1,int *p2);main() int x1,x2; x1=100;x2=200 printf(”x1_old=%d,x2_old=%d,x1,x2); swap(&x1,&x2); printf(”x1_new=%d,x2_new=%d,x1,x2); void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp; 例:用一个函数来实现交换两个数据。#include void swap(int *p1,int

75、*p2);main() int x1,x2; x1=100;x2=200 ; printf(”x1_old=%d,x2_old=%d,x1,x2); swap(&x1,&x2); printf(”x1_new=%d,x2_new=%d,x1,x2); void swap(int *p1,int *p2) int temp; temp=*p1; *p1=*p2; *p2=temp; #include void swap(int a,int b) int temp; temp=a; a=b; b=temp; main( ) int x1,x2; x1=100; x2=200; printf(x1_

76、old=%d x2_old=%dn,x1,x2); swap(x1,x2); printf(x1_new=%d x2_new=%dnn,x1,y2); 指针的使用在给编程提供了一个强有力工具,但使用不当却又可能带来编程中最难对付的问题。指针操作不当,可能读写一些未知的内存单元,严重的是写操作时,就有可能将数据写入一些重要的内存单元,导致程序或系统受到破坏。因此使用指针的正确方法是:使用前必须弄清该指针指向那里。习题:10.1、10.3、10.6、10.16指 针 小 结 指针是C语言中的一个重要概念,是C语言的特色。指针就是地址,指针除了有“&”、“*”两个单目运算符之外,还可进行加减和自加减

77、等运算。使用指针可:在函数调用的过程中灵活地修改函数中的被调参量(实参);可提高某些程序的效率;指针可用来实现内存空间的动态分配。第七章 预处理命令本章自学内容:掌握宏定义的基本概念。 在学习结构之前,我们来考虑这样一个问题,假定要统计某系同学的基本情况,包括每个学生的姓名、年龄、身高、体重和各科成绩等。可以为每个学生的各项数据分别定义 一个变量,诸如:name、sex、age、sore5等,但是这样之后各项数据之间的紧密联系在程序形式是就无法体现出来了。如当我们知道了某个学生的姓名,要查询出他的年龄性别等就显得很不方便。 实际上,C语言允许我们把一组逻辑是相关联的数据组织起来,作为一个整体使

78、用。这就是结构体的概念。 结构是一组可以整体引用的变量。它与数组的区别在于结构的元素(称为结构成员)不必是相同的数据类型不必是相同的数据类型,并且结构成员可以分别加以引用,利用结构可以组织起复杂紧凑的数据结利用结构可以组织起复杂紧凑的数据结构构。在程序中使用结构,首先要定义结构类型;然后再定义结构变量。结构类型定义描述结构成员的名称和它们的数据类型。结构变量定义则根据结构类型为所定义的变量分配存储单元。第八章 结构体一、结构类型的定义结构类型定义的一般形式:结构类型定义的一般形式:二、结构变量的定义例如:struct date today,tomorrow;结构的定义和结构变量的定义可以结合进

79、行:例如:struct date nextday=2001,11,10;三、结构变量的初始化四、结构的引用 引用的形式: 结构变量名. 成员名对结构变量today而言,有效的结构成员为year、month、day。那么today. year 、today. month、today. day就是对其各个成员的引用。C语言允许将一个结构变量作为一个整体赋值给另一个同一类型的结构变量。C语言不允许将两个结构变量整体比较,只能逐个成员的进行比较。 另一种引用的形式: 结构指针变量名 成员名定义:struct data * today; today 为指向该结构的指针例:结构例程。 可见,“”和“”操作

80、符分别使用在用指向结构的指针和用结构变量来访问结构中的数据项(成员)时。 结构变量初始化例子main( ) struct student int num; char name20; char sex; char addr20; a=98,”LiMing”,M, ”Jianshe Road”; struct student int num; char name20; char sex; char addr20; student1,student2; struct student int num; char name20; char sex; char addr20; ;struct studen

81、t student1,student2; 结构体数组 struct student int num; char name20; char sex; char addr20; ;struct student student13; struct student int num; char name20; char sex; char addr20; student13; struct int num; char name20; char sex; char addr20; student13;上面的三种定义形式均可,其中Student1就是定义的结构体数组。它含有三个元素,其中每个元素都是stru

82、ct student类型的数据。结构体数组的初始化结构体数组的初始化 struct student int num; char name20; char sex; student13=10101,“Liming”,M, 10102,“Zhulin”,F, 10103,“Fanrong”,M; 结构体指针 struct student int num; char name20; struct student stu_1; struct student *p; p=&stu_1;结构体变量的几种引用方式结构体变量的几种引用方式 (1)结构体变量.成员名 (2)(*p).成员名 (3)p-成员名 “-”称为指向运算符。用用typedef定义类型定义类型typedef int INTEGER typedef struct typedef int COUNT COUNT i,j; int month; int year DATE; DATE birthday;结 构 体 小 结 结构体是C语言中的一种复杂(构造)类型,它是一种被命名为一个标识符的各种变量的集合。结构的定义确定了结构变量或结构指针的格式,结构是软件设计中实现数据抽象的基础。 本章要求掌握 结构定义的基本概念和方法,结构变量和结构指针的含义以及利用结构变量或结构指针来引用结构成员的基本方法。习题:11.3、11.4

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号