1、第一章 C 语言概述 1.1 程序与程序设计语言机器语言机器语言汇编语言汇编语言高级语言高级语言 低级语言是计算机能直接识别的语言(机器语言)或符号化的机器语言(汇编语言)。 高级语言是一种通用的, 与特定的机器相分离、语言格式接近于自然语言的语言。 C 语言是即具有高级语言特点又具有低级语言功能的语言。有人称其为中级语言。 1.2 C 语言的主要特点v 程序结构紧凑、简洁、灵活(32个关键字:auto double int struct break else long switch case enum register typedef char extern return union con
2、st float short unsigned continue for signed void default goto sizeof volatile do if while static )v 运算符和数据类型丰富(34种运算符)v 程序设计结构化、模块化函数式语言v 语法限制不太严格,程序设计自由度大。v C C 语言程序可移植性好。1.3 C 程序的结构特点lC 程序由一个或多个函数组成,程序由一个或多个函数组成,顺序可任意。顺序可任意。l必须且也只能有一个主函数必须且也只能有一个主函数main( ),无论,无论main( )在程序在程序中的任何位置,运行时首先中的任何位置,运行时首
3、先被调用。被调用。l每条语句或数据定义的最后每条语句或数据定义的最后必须有一个分号;必须有一个分号;l一行内可以写几个语句,一一行内可以写几个语句,一个语句也可以分写在多行。个语句也可以分写在多行。l可以用可以用/*/对程序中的任对程序中的任何部分作注释。何部分作注释。例 C 语言程序示例/* calculate the sum of a and b*/#include void main( ) int a,b,sum; a=123;b=456; sum=add(a,b) ; printf(sum=%dn,sum) ;int add(int x,int y) int z; z=x+y; ret
4、urn(z) ;预处理命令预处理命令注释注释TEST.C语句结束符语句结束符函数函数1.4 运行 C 程序的步骤和方法 C 文件名的规定 编译与链接过程C C源文件源文件file.c扩展的扩展的C C源文件源文件 头文件头文件stdio.h目标文件目标文件file.obj目标文件目标文件*.obj目标文件目标文件*.obj编辑编译链接预处理预处理 语法分析、检查语法分析、检查file.exe可执行文件可执行文件DOS系统规定:文件名最多由8个有效字符组成文件名中不能含有:1. 空格“ ”2. 通配符“*”3. 限定符“?” 上机编程和调试步骤1). 菜单命令选择:按F10,再按及 键2). 文
5、件操作: 打开或建立文件(File-New)3). 编程并保存为文件:按F2键保存文件(文件名.c)4). 编译和连接: 编译Alt+F9键(Compile),无致命错误 .obj 链接F9键(Make),无链接错误 .exe5). 运行并察看结果:按Ctrl+F9(Run), 按Alt+F5查看执行结果(有无逻辑错误)4.5 数据的格式输入与输出v C 的数据输入输出全部由函数进行。v 输入/输出分别指:来自键盘的数据/由显示器显示数据。 格式输出函数 printf( )printf( )v格式输出函数:向显示器按规定格式输出任意 类型数据。v 调用格式: printf(“(“格式控制格式控
6、制” ” , 参数表参数表); ;例: printf(“%d,%c”, n,ch); v 调用格式: printf(“(“格式控制格式控制” ” , 参数表参数表); ; 参数表缺省时,“格式控制”内是一个字符串(含转义字符)常量,表示输出一个字符串。 “ “格式控制” 包含两种信息: (1). (1).格式说明格式说明: :由 % % 和格式字符组成。如 % %d d,%,%f f 等,它的作用是将 参数表参数表 的数据转换成指 定的格式输出。例: printf(“This is a C program. n); printf(“* n); 运行结果: This is a C program
7、. * (2).(2).普通字符普通字符:即需要原样输出的字符。例: int a=15, b=035; printf(“%d %d”, a,b);运行结果: 15 29例: int a=15; b=035; printf(“a=%d, b=%d”,a,b);运行结果: a=15, b=29 格式输入函数 scanf( ) scanf( ) - 从键盘读取数据。v 调用格式:scanf(“格式控制格式控制”, 参数地址表参数地址表 ); “格式控制格式控制”的作用与 printf( ) 相似。 参数地址表参数地址表 :由若干个地址组成的表列。可以是变 量的地址,也可以是字符串的首地址。如: in
8、t a,b,c; scanf(“%d%d”,&a,&b); c=a+b;取地址运算符: 将键盘输入的数据存放到指定的变量中。(3 3)如果在“格式控制” 中有除格式说明以外的其它 字符,则在输入数据时在对应位置应输入与这 些字符相同的字符。(2 2)键盘输入时 相邻两个数据之间可用SpaceSpace、 TabTab或 EnterEnter键作为每项数据的结束,最终以 Enter键结束。v 使用 sanf( ) 函数时应注意的问题(1)参数地址表中应该是变量的地址,而不应是变 量名。(4 4)在用 %c %c 格式输入字符时,空格和转义字符都 作为有效字符输入。 scanf(“%d,%d”,
9、a, b) ; scanf(“%d,%d”, &a, &b) ; scanf(“%d%d%d ”, &a, &b,&c) ; 输入 : 15 25 35 scanf(“%d,%d”, &a, &b) ; 输入 : 5,8 scanf(“%c%c%c ”, &c1, &c2,&c3) ; 输入 : a b c abcauto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static struc
10、tswitch typedef unsigned union voidvolatile while32个关键字:(算术运算符:+ - + - * * / % + - / % + -关系运算符: = != = !=逻辑运算符:!:! & |& |位运算符 : | & | &赋值运算符:= = 及其扩展条件运算符:?:?:逗号运算符:, ,指针运算符:* * & &求字节数 :sizeofsizeof强制类型转换:(类型)分量运算符:. -. -下标运算符:其它 :( ) -34 34 种运算符:种运算符:3.1 C 语言的数据类型第三章 数据类型、运算符与表达式前三种数据类型通常都有各自的常量和
11、变量。整型字符型浮点(实)型*枚举类型单精度型双精度型数组类型结构体类型共用体类型1.基本类型2. 构造类型3. 指针类型4. 空类型(void)数据类型 符号常量:用于表示直接常量的合法标识符。常量是在程序运行中其值不可改变的量。常量分直接(字面)常量和符号常量两种:如: #define PRICE 30如: 4.6 ,15,g , “abcd”说明: 1. 使用直接常量无需事先定义。 2. 符号常量通常使用大写字符。3.2 3.2 常量与变量3.2.1 3.2.1 常量和符号常量直接常量:从字面上即可确定其类型的数据。1)由英文字母、数字(09)或下划线_组成的字符序列,且必须由英文字母或
12、_开头,区分大小写。2)不与关键字标识符相同,故又称合法标识符。3)最大长度最好不超过8个字符。 课课 堂堂 练练 习习例:判断下列标识符的合法性sum Sum M.D.John Date 3days student_name #33 lotus_1_2_3 char ab _above $1231. 变量的概念在程序执行过程中,其值可以改变的量。在内存中占有一个存储单元,并对应一个地址。10101a 253.2.2 3.2.2 变量2. 变量的命名规则C 语言中,变量、符号常量和函数名等统称为标识符,遵循标识符的如下使用规则:标识符的习惯用法: 常量用大写 变量用小写 常用取简 专用取繁 顾
13、名思义例: int x; char a, b, c; float pi=3.1415;/*定义pi并初始化*/ float score; 3. 变量的定义: C 使用变量的原则:“先定义,再使用”。关键字不可作为变量名。决定变量的取值范围、存储空间大小(字节数)使用合法标识符,定义同时可以赋初值4. 变量定义格式: 类型类型 变量名表;变量名表;3.3 3.3 整型数据3.3.1 3.3.1 整型变量说明: 实际应用中,为了充分利用变量的内存空间,可以定义与上述三类整型变量相应的“无符号”类型,详见教材4143页。 数据在内存中是以二进制形式存放的,根据变量的取值范围,整型变量分为下述三大类(
14、Visual C+ 6.0(Visual C+ 6.0系统)系统):v基本整型 int 4B -231 ( 231 -1)v短短整型 short int 2B -215 ( 215 -1) v长长整型 long int 4B -231 ( 231 -1) 八 进 制 整 数:由07组成,最高位用0引导。十六进制整数:由09及af 或 AF组成,最高位用0 x或0X引导。十 进 制 整数:由09组成,第一位数字为非零(除零外)如如: 123, -468, 340, 0如如: 0123, -011, 0270如如: 0 x123, -0 x13,0 x2F说明:说明: 1. 整型常量默认为 int
15、 型,占4 个字节的内存空间。若要指定某个常量为 long int,可在数字后加字符 L 或l 。 如:423L 67l 2. 整型常量超过取值范围,会发生溢出,得到错误结果。3.3.2 3.3.2 整型常量 整型常量即整常数,有三种表示形式:3.4 3.4 浮点型数据3.4.1 浮点型变量 浮点型变量与整型变量的存储方式不同,浮点型变量在内存中是按照指数形式存储的,用于存放包含小数位的值。 浮点型变量分单精度(float)和双精度(double)两种。vfloat 占用4个字节的存储空间,接收七位有效数字; vdouble 占用8个字节的存储空间,接收十六位有效数字。正确的结果是: a的值为
16、:123456.7 b的值为:123456.789例例: float a; double b; a=123456.789; b=123456.789;说明:说明: 1.浮点型常量默认为 double 型,占8 个字节的内存空间。若要指定某个常量为 float 型,可在数字后加字符 F 或f 。 如:2.39F 33.45f 2. 与整型常量一样,浮点型常量也存在溢出问题。注意:e 或E前必须有数字, e 或E后的指数必须是整数。b. 指数形式指数形式:整数部分整数部分 . 尾数部分尾数部分 E | e + | - 指数部分指数部分a. 十进制形式:由十进制形式:由0909数字及小数点组成。数字
17、及小数点组成。如如:.123,123. ,-123.0, 0.0 如如: 123e0,1.23E2 ,45e-13.4.2 3.4.2 浮点型常量 浮点型常量即实数,有两种表示形式:3.5 3.5 字符型数据3.5.1 字符变量 浮点型变量 char 用来存放字符常量,它只能存放一个字符。占用1个字节的存储空间,存放单个字符的ASCII码 。 ( 见 364 页 附录 A ) 3.5.2 字符常量字符:用单引号括起来的单个字符。如如:a , x , & , D , ? 注意:a与A 是不同的字符常量。转义字符:在单引号中用反斜线引导的字符或数字。意思是将反斜线()后面的字符转换成另外的意义。
18、(见(见48页页 表表 3-3)用双引号括起来的零个或多个字符(含转义字符) 组 成的字符序列。系统自动在字符串的结尾加上一个结束标志0。如:“Sky” , “$12345.3” , “*” , “s” 注意:1 . a与“a” 完全不同。 2. 不能将一个字符串赋给一个字符变量。 课课 堂堂 练练 习习请判定下述表达的合法性: 1. char ch1; ch1=“abc”; 4. char ch4; ch4=0; 2. char ch2; ch2=“m”; 5. char ch5; ch5=0; 3. char ch3; ch3=qwe; 6. char ch6; ch6= h3.5.3 字
19、符串常量3.7 各类数值型数据间的混合运算整型、浮点型、字符型数据间可以混合运算。在进 行运算之前,不同类型的数据要先转换成同一种数 据的类型。类型转换的两种方式 1.自动类型转换(隐式转换) 系统自动转换。 2.强制类型转换(显式转换)人为进行的转换。v自动类型转换 发生在下列三种情况: 1. 混合运算. 2. 赋值运算. 3. 数据输入输出. 如:如: int i=2 ; float f =3.6; double d=3.2; long int e=45; 10+a+i*f-d/e ; 如:如: int a ; float b=2.4 ; a=b+5 ; 如:如: char st=a ;
20、printf(“%d”,st);自动类型转换转换原则:低低 高高int unsigned long double* * char、short float说明: 1. 带(*)无条件的转换;其它按类型的高低“向高看齐”。 2. 无精度损失,但赋值运算中视情况而定。 3. C C 语言允许字符数据与整数直接进行算术 运算。v 强制类型转换类型转换运算符一般形式: (类型名)表达式说明: 1. 强制转换得到所需类型的中间变量,原变量类型不变 。 2. 较高类型向较低类型转换时可能发生精度损失。 例:例: (int)(x+y) (int)x+y (float)(3/2) (int)7.6 %3 例:
21、int a; double b=3.25 ; a=(int)b+8; printf(“%d, %f ”,a,b); 输出: 11, 3.250000 基本概念v 表达式:用运算符与圆括号将操作数(常量、变量、函数等)连接起来所构成的式子。如:(a+2)*(b-3)/(x+y)-sqrt(9.0)v 单目、双目、三目运算符:根据运算符所需要的操作数的个数将其分为单目、双目和三目运算符。如: x+y-z,-25 , a*b /c ,x=5, &av 结合性:即两个同优先级的运算符相邻时的运算顺序。如: x+y-z , a*b /c , x=y=5说明: 1. 通常单目运算符从右向左结合。双目运算符
22、从左向右结合(赋值运算符除外)。 2. 单目运算符的优先级高于双目运算符。 ( 见 365 页附录 C )3.8 3.8 算术运算符和算术表达式 算术运算符: * * 乘法 / / 除法 % % 求余 + + 加法 - - 减法v 说明:4两个整数相除的结果是整数。如:5/3 的值是 1 。4% 两侧均应是整型数据 如:7%4 的值是 3 。4如果参加 、*、/ 运算的两个数中有一个 为实数,则运算结果为 double型。4 用做负号运算符负号运算符时,为单目运算符。4 括号 ( ) 之内表达式优先级最高。课课 堂堂 练练 习习求圆锥体积,判定下列程序是否正确: #include void m
23、ain( ) int r=5, h=15; double v; v=1/3*3.14*r*r*h; printf(“v=%f ”,v); v 自增、自减运算符是最具C语言特点的运算符。用于对变量自身的加 1 或 减 1 运算。 自增、自减运算符v 表达式形式: 1. 后缀 表达式: E+ , E - - - 2. 前缀 表达式: + E , - - - - Ev 自增运算符:+ (单目)。v 自减运算符:- - - (单目)。 变量变量! ! 若有 int a, b, j, m ; 则: a + + , + b , - - - - j , m - - - - 5 + + , - - - - 6
24、 对于操作数E : E+ + 、 + + E 等价于 E= E+1 ; E - - - - 、 - - - - E 等价于 E= E-1 ;v 运算规则: 1. 无论前缀运算或后缀运算,对于 + + 运算符,操作数的值加1 ;对于- - 运算符,操作数的值减1 。 2. 对于+ + 运算符,前缀运算表达式的值为操作数加1 ;后缀运算表达式的值为原操作数的值。 3. 对于- - - - 运算符,前缀运算表达式的值为操作数减1 ;后缀运算表达式的值为原操作数的值。 如: int a=5 ,b=5, m ,n; m=a+ + ; n= + +b ; printf(“%d,%d,%d,%d”,m,n,
25、a,b) ;输出: 5, 6 ,6,6 如: int a=5 , b=5, m ,n; m=a - - - - ; n= - - - - b ; printf(“%d,%d ,%d,%d”,m,n ,a,b) ;输出: 5, 4 ,4,4 例:.i=3;printf(%d,+i );j=4;printf(%d,i+j+);i=j;. 48ij 53.9 赋值运算符和赋值表达式赋值运算符分为简单赋值和复合赋值两种。赋值运算的一般形式:v简单赋值= : E1 = E2 v 复合赋值 op= :E1 op= E2说明: E1 为变量,E2 为常量、变量或表达式。 E1=(E1 op E2)说明: 复
26、合运算符共有十种(算术和位运算),要求掌握下列五种: * *= 、 /= 、 %= 、 + = 、 - =如: x+=y x=x+yE1 E2 的值的值 注意: 1. E1、E2 类型不同时,自动转换类型,结果为E1 的类型。 2. 可以连续赋值给多个变量,但不能用于初始化。例: int a,b,c; a=b=c=2; int a=b=c=2;课课 堂堂 练练 习习计算下面各程序段的输出结果: int a=3,b=2,c;1. b*=a+4*3%5; printf(%d ,b ); 2. a=8; a*=b=c=3; printf(%d,%d ,a,b); 3. a=5+(c+=3); pri
27、ntf(%d,%d ,a,c);b=b*(a+4*3%5)b=10c3, bc, aa*ba=24 b=3cc+3 a=11 c=63.10 逗号运算符和逗号表达式 表达式的一般形式: 表达式1 ,表达式2 , . ,表达式n 在C语言中,逗号“, ”既是分隔符,也是运算符。逗号运算符的功能是用来将多个表达式连成一个表达式。 运算规则: 从左至右计算每个表达式的值,最后一个表达 式的值作为该逗号表达式的终值;最后一个表达式 的类型是该逗号表达式的类型。 例: int a , b ,c ; c=( a=1 , b = 3 , a+b ); 4 说明: 1. 逗号表达式通常出现在功能上需要多个表达
28、式而 语法上仅允许出现一个表达式的地方。 2. 逗号运算符优先级最低,使用较少。 例:求x的值:的值: x = ( a=3, 6*a ) 18 x = a = 3, 6*a 3 编写简单程序输出如下图形: 编写程序计算任意圆锥体的体积,并输 出其半径、高及体积。 设整型变量 a=12,计算表达式: a+=a-=a*=a ,并编写程序进行验证。作作 业业基本数据类型(整型基本数据类型(整型 字符型字符型 实型实型) 类类型型 符符号号 关关 键键 字(小写)字(小写) 取取 值值 范范 围围 字节数字节数 int -32768 32767 2B* short int -3276832767 2B
29、 带带 long int -2110921109 4B unsigned int 065535 2B* unsigned short int 065535 2B 整整 型型 不不 带带 unsigned long int 042109 4B 带带 char -128127 1B 字字符符型型 不不 unsigned char 0255 1B float (单精度单精度) -10-381038 4B* 实实型型 带带 double (双精度双精度) -10-30810308 8B* 【注】带【注】带* *号表示的数据类型与机器硬件有关号表示的数据类型与机器硬件有关()()八八 种种 分分 隔隔
30、符符控控 制制 字字 符符【注】【注】 控制字符控制字符(除了除了x,e,g)均为小写均为小写附加说明符附加说明符( (格式字符格式字符) )转义字符转义字符含义含义nvraddd0tb“xhh转义字符转义字符含义含义换行垂直制表回车响铃单引号3位8进制数代表的字符空值(数值为0)水平制表退格反斜线双引号2位16进制数代表的字符常用转义字符及其含义第五章 选择结构程序设计C C 语言程序的三种基本结构:1. 顺序结构自上而下顺序书写、执行程序语句。2. 选择结构在多种分支中,根据条件的成立与否选择执行某个分支。3. 循环结构根据需要重复执行某部分程序语句。语句 语句是源程序的基本组成部分,根据
31、其组成机制有五种分类:1. 表达式语句 一般格式: 表达式; 例: a=5; z=x+y; i+ ;2. 函数调用语句 一般格式: 函数调用 ; 例: scanf(“%d”,&a); printf(“%d”,a);4. 复合语句与分程序 一般格式: 数据说明 (只用于分程序) 语句序列 说明:说明: 1. 复合语句在语法上相当于一条简单语句。 2. 后不接“ ;” 。3. 空语句 一般格式:; 例: int i=0; while (i+ 5) ; printf(“%d”,i ); 例: if( i (大于),= (大于等于) (小于),b, a+bb+c, (a=3)(b=5) a(b=c),
32、 (ab)(b a+b 2. ab= c 3. a=b c 5. m=abc 6. c+1= a 7. c *2 != b 8. m=c=a%b三种逻辑运算运算符 功 能 目数 优先级 结合性 表达式 & 逻辑与 2 11 左 E1&E2 | 逻辑或 2 12 左 E1|E2 ! 逻辑非 1 2 右 !E1 5.2 逻辑运算符和逻辑表达式逻辑值的表达v在给出逻辑运算结果时,以数值 1 代表“真”,以数值 0 代表“假”;v在判断一个量是否为“真”时,将所有非0 的数据都认作 “真”。 如: 53&84-!0 0 c & d 1运算规则 注意: v a&b&c 只有 a 为真(非0)时,才需判别
33、b的 值,只有a和b都为真(非0)时,才需要判别c 的值。v a|b|c 只有 a 为假时,才需要判别 b 的值,只有 a 和 b 都为假时,才需要判别 c 的值。E1 E2 !E1 E1 & E2 E1|E2 0 0 1 0 0 0 非非 0 1 0 1 非非 0 0 0 0 1 非非 0 非非 0 0 1 1 课课 堂堂 练练 习习 #include void main( ) int a=1,b=2,c=3,d=4; int m, n=1; m=ab&(n=cd); printf(m=%d,n=%dn,m,n); 输出: m=0,n=1 用来判定所给定的条件是否满足,根据判定的结果(真或假
34、)决定执行给出的两种操作之。if 语句有三种形式。if ( 条件 ) 例: if (ab ) max = a ;if (条件) else 例: if (ab) max = a; else max = b;5.3 if 语句if (条件1) else if (条件2) else if (条件3) else if (条件n-1) else 例: if ( score = 90 ) grade = A ; else if ( score = 80 ) grade = B ; else if ( score = 70 ) grade = C ; else if ( score = 60 ) grade
35、 = D ; else grade = E ; 4 . 采用缩进格式书写,以增加程序的可读性。说明:说明: 1. if 后的(条件)可以是任意的数据类型.一般 为关系表达式或逻辑表达式。 2. 每种形式的if 语句都是作为整体存在的一条语 句,else 子句不能单独使用,它必须是if语句的一部 分,与 if 配对使用。例: if ( 3 ) printf( “ok”) ; if ( a&b ) printf( “ok”) ; if ( a=b ) printf( “ok”) ; 3. if 和 else 后面的语句也可以是复合语句。例: if ( a+bc & b+ca & c+ab ) s
36、= 0.5*( a+b+c ) ; area = sqrt (s*(s-a)*(s-b)*(s-c) ; printf( “area=%f ” , area) ; else printf( “it is not a trilateral”) ; if 语句的嵌套 在if 语句中又包含一个或多个if 语句,称为 if 语句的嵌套。一般形式如下: if ( ) if ( ) 语句语句 1 else 语句语句 2 else if ( ) 语句语句 3 else 语句语句 4 其实上述 if 语句的三种形式可以综合应用,相互嵌套,如:if(表达式1) if(表达式2) 语句 1 else 语句 2if
37、(表达式1) 语句 1else if(表达式2) 语句 2 else 语句 3if( 表达式 1 ) if(表达式2) 语句 1 else 语句 2注意:注意: else 总是与它上面最近的未配对的 if 配对。例1: 键入三个数,排序后,按由小到大的顺序输出。 if 语句应用示例#include void main( ) float f1, f2, f3, temp; printf(“Please input 3 number :”) ; scanf(“%f %f %f”,&f1,&f2,&f3); if( f1f2 ) temp=f1; f1=f2; f2=temp; /*交换交换 f1,
38、f2*/ if( f1f3 ) temp=f1; f1=f3; f3=temp; /*交换交换 f1,f3*/ if( f2f3 ) temp=f2; f2=f3; f3=temp; /*交换交换 f2,f3*/ printf(“%5.2f,%5.2f,%5.2fn”, f1, f2, f3 );例 2 : : 输入一个 x 值,输出 y 的值。#include void main( ) int x,y; scanf(“%d”,&x); if( x0 ) y=-1; else if(x=0) y=0; else y=1; printf(“x=%d, y=%dn”, x, y );-1 x0y=
39、y=x0?1:0); 条件运算符和条件表达式v 条件运算符 ? :是 C 语言唯一的三目运算符。 v 条件表达式的一般形式: E 1? E 2 : E 3 v 运算规则: 先求解E1,若为非0(真),则求解E2,此时E2的值 就作为整个条件表达式的值; 若E1的值为 0(假),则求解E3,此时E3的值就作 为整个条件表达式的终值。E1、E2、E3 可以是变量、常量或表达式。 例: int a=2,b=5,c=1,max ; max =ab ? b : (a+c) ; 注意: 1. 条件运算符的结合方向为“自右至左”。 2. 当E 2与E 3的类型不同时,条件表达式的值 的类型为二者中较高的类型
40、。 例: int a=1,b=2,c=3,d=4,m ; m = ab ? a : cd ? c :d ; 例: int x=5, y=2, z ; z = sizeof( x y? 1 : 1.5 ); v编写程序,键盘输入三个整数,输出其中最大的数。v编写程序,键盘输入三个数,排序后,按由 大到小的顺序输出。作作 业业用于多分支选择。一般格式:switch(表达式) case 常量表达式1: 语句序列1 ; break; case 常量表达式2: 语句序列2 ; break; . case 常量表达式n: 语句序列n ; break; default : 语句序列n+1 之间要有空格!说明
41、: 1. switch、case、 break、default 是关键字; 2. 通常用整型数值或字符常量 ; 3. 可空; break 、 default 可省。 5.4 switch 语句(开关语句) 语法规则:(1 1)计算 switch 后括号中的表达式的值。(2 2)从上至下与 case 后的值相比较,寻找 switch语 句的入口。(3 3)以与其匹配(相等)的 case 为入口,顺序执行 其后的每一条语句,直到遇到break 语句时,退 出该开关语句。 (4 4)如没有匹配的 case ,则执行 default后面的语 句序列。如没有 default ,则退出该开关语句。 swi
42、tch(表达式) case 常量表达式1: 语句序列 1 ; break; case 常量表达式2: 语句序列 2 ; break; . case 常量表达式n: 语句序列 n ; break; default : 语句序列 n+1 #include void main( ) char grade; scanf(“%c”, &grade); switch( grade ) case A: printf(“90100n”) ; break; case B: printf(“8089n”) ; break; case C: printf(“7079n”) ; break; case D: prin
43、tf(“6069n”) ; break; default : printf(“errorn”); 注意: v default 可以省略,也可以放在 switch 语句中的 任何地方。switch( grade ) case A: printf(“90100n”) ; break; case B: printf(“8089n”) ; break; default : printf(“errorn”); break; case C: printf(“7079n”) ; break; case D: printf(“6069n”) ; break; v 不能有重复的 case 常量表达式: : 。v
44、 case 常量表达式: : 只起语句标号的作用,不进 行条件判断。v 多个 case 可以共用一组执行语句。v 中的多条语句无需加花括号。v 第一个匹配的case之前的语句永远不被执行。 v 允许嵌套使用switch语句。switch( grade ) case A: printf(“Goodn”) ; case A: printf(“Goodn”) ; case B: printf(“Hin”) ; switch( grade ) case A: case B: case C: case D: printf(“60n”) ; switch 语句应用示例#include void main(
45、 ) float a,b; char chr; printf(Input expression:a+(-,*,/)b n); scanf(%f%c%f,&a,&chr,&b); switch(chr) case +: printf(%fn,a+b); break; case -: printf(%fn,a-b); break; case *: printf(%fn,a*b); break; case /: printf(%fn,a/b); break; defaut: printf(input error!n); 1 Output: Input expression:a+(-,*,/)b 3+
46、5 8 Input expression:a+(-,*,/)b 3%5 input error!#include void main() int a=1, b=6, c=8, d=5 ; switch(+a) case 1: c+; d+; break ; case 2: switch( +b ) case 7 : c+ ; case 8 : d+ ; case 3: c+; d+; break ; case 4: c+ ; d+; printf(“%d,%dn”,c,d) ;2Output: 10, 7分析下列程序的输出结果#include void main() char c ; prin
47、tf(“Enter a character:”); scanf(%c, &c); switch( c ) if (c 0) printf(“digtier .n”); break ; default : printf(“non- digtier .n”) ; 3Output: Enter a character: 5 non- digtier .三种控制结构流程图 ABAB 流线式 NS 式顺序结构流程图T FPAB选择结构流程图PABTFAPFTAPAPFTAP循环结构流程图当型循环结构直到循环结构第六章 循环控制 6.3 while 语句 循环结构有两种类型当型和直到型。 共有三种循环语句
48、:while,do-while,for一般格式: while (表达式)循环体语句APFT说明:v 其中 while 是关键字;v (表达式)通常是关系表达式或逻辑表达式;v 可以是一条简单语句,也可是复合语句。 例: /* 输入20个整数,求它们的和与平均值。*/ #include void main( ) int i=0, sum=0, a; while( i20) scanf(“%d”,&a); sum=sum+a; i+; printf(“sum=%d, aver=%fn”,sum,sum/20.0) ; for(;i20;i+) scanf(“%d”,&a); sum=sum+a;
49、注意: 1. 只有 的值是非0时,才执行 给 出的循环体。 2. 循环体包含一条以上语句时,要用花括号。 3.循环体中应有使循环趋于结束的语句。否则,循 环将无限继续,俗称“死循环”。分析下面程序的错误: #include void main( ) int i=1; while( i=20 ) printf(“%d ”,i); i+; printf(“n endn”); 例:分析下面程序实现的功能: # include /*#define EOF -1*/ void main( ) int c ; while(c=getchar( )!=EOF) /*Ctrl+z 键值为键值为-1*/ put
50、char(c); 一般格式: do 循环体语句 while (表达式);APFT6.4 do while 语句说明:v 其中 do、while 是关键字;v (表达式) 通常是关系表达式或逻辑表达式;v 可以是一条简单语句,也可是复合语句。 应用要点:1. 书写 dowhile 循环语句时,注意 ( 表达式 ) 后 面要有分号(; )。2. do 后面即使只有一条语句,最好也加上 。3. dowhile 循环语句至少执行一次循环体。4. 通常在用 while 语句和 dowhile 语句处理同 一问题时,当二者具有相同的循环体时, 如 while 后的( 表达式 ) 的第一次值为假(0), 两