1、指针变量按数据的数值是否可变分为:按数据的数值是否可变分为:2.3 常量常量 2、数值常量:整型常量:12、-3 实型常量:13.45、-2.34 字符常量 字符串常量如:#define PRICE 30 定义:程序运行时其值不能改变的量(即常数)分类:1、符号常量:用一个符号代表常量 定义格式:#define 符号名 常量值例例2-1:符号常量举例:符号常量举例#define PRICE 30main()int n,t;n=10;t=n*PRICE;printf(t=%d,t);运行结果:total=3002.4 变量变量变量:在程序运行过程中,其值可以改变的量;变量:在程序运行过程中,其值
2、可以改变的量;l有关变量的规定:有关变量的规定:u 变量通过变量名来标识,变量名和内存中存储单元变量通过变量名来标识,变量名和内存中存储单元相对应。编写程序时通过变量名来存、取存储单元。相对应。编写程序时通过变量名来存、取存储单元。变量名变量名memorya88 81000H1000H1001H1001H1002H1002H2552551212int a=12;u 变量必须先定义,后使用。变量必须先定义,后使用。2.4 变量变量变量名的命名规则变量名的命名规则变量名必须是一个C语言合法的标识符!标识符标识符名称名称定义:定义:用来标识变量名、符号常量名等的用来标识变量名、符号常量名等的字符序列
3、字符序列;组成:组成:u由由字母、数字、下划线字母、数字、下划线组成,且组成,且第一个字符第一个字符必须是必须是字母或下划线字母或下划线;u区分大小写;区分大小写;u不能使用不能使用关键字关键字;u最长最长3232个字符;个字符;命名原则:命名原则:1)1)见名知意;见名知意;2)2)不宜混淆,如:不宜混淆,如:l l与与I,oI,o与与0 0;3)3)符号常量习惯全用大写字母;符号常量习惯全用大写字母;2.4 变量变量变量名的命名规则变量名的命名规则例例2-2:2-2:判断下列标识符号合法性:判断下列标识符号合法性:sum Sum M.D.John day Date 3days studen
4、t_name#33 lotus_1_2_3 char ab _above$1233days#33char$123abM.D.John下面列出的是合法的标识符,也是合法的变量名:下面列出的是合法的标识符,也是合法的变量名:sum1,average,_total,month下面是不合法的标识符和变量名:下面是不合法的标识符和变量名:y 123,33,3d64,2.4 变量变量变量名的命名规则变量名的命名规则 下一页下一页call_n test39 _string1 abccall.n 39test -string1 c2.0 例例2-3:判断下列标识符号合法性:判断下列标识符号合法性:C C语言的
5、基本字符集语言的基本字符集l 数数 字字:0 1 2 3 4 5 6 7 8 9l 字字 母母:a b c z A B C Zl 运运 算算 符符:+-*/%=!=&|&|()-.!?:,;“l 特殊符号:特殊符号:_(下划线下划线)回车回车(r)换行换行(n)制表符制表符(t)ASCIIASCII字符集字符集 基本字符集基本字符集返回返回C C语言的关键字语言的关键字返回返回32个关键字:个关键字:auto break case char const continue default do double else enum extern float for goto if i
6、nt long register return short signed sizeof static struct switch typedef unsigned union void volatile while关键字关键字由系统定义的具有特殊含义的符号,不能作其它定义由系统定义的具有特殊含义的符号,不能作其它定义2.4 变量变量变量定义的格式变量定义的格式定义变量的一般格式:定义变量的一般格式:数据类型数据类型 变量名变量名1,变量名,变量名2,变量名,变量名n;决定分配字节数和数的表示范围合法标识符如:int a,b,c;float data;2.4 变量变量变量的赋初值变量的赋初值定义
7、变量之后可以给变量赋初值,可将一个同类型的常量赋值给变量定义变量之后可以给变量赋初值,可将一个同类型的常量赋值给变量;int a=2,b,c=4;float data=3.67;int a,b,c;float data;a=2;c=4;data=3.67;如:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;2.4 变量变量变量的使用规则变量的使用规则如:int student;stadent=19;/Undefined symbol statent in function main 变量定义位置:一般放在函数开头main()int
8、 a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);变量的使用:先定义,后使用main()int a,b=2;float data;a=1;data=(a+b)*1.2;printf(“data=%fn”,data);变量定义可执行语句3.1 整型数据整型数据3.1.2 整型常量与整型变量整型常量与整型变量1.整型常量整型常量整型常量即整常数整型常量即整常数 如:如:123123、45453.1 整型数据整型数据3.1.2 整型常量与整型变量整型常量与整型变量2.整型变量的种类整型变量的种类有三种整型变量:有三种整型变量:(
9、1)基本整型,以基本整型,以int表示;表示;(2)短整型,以短整型,以short int 表示,或以表示,或以 short 表示;表示;(3)长整型,以长整型,以long int 表示,或以表示,或以 long 表示;表示;3.1 整型数据整型数据3.1.2 整型常量与整型变量整型常量与整型变量2.整型变量的种类整型变量的种类u在实际应用中,变量的值常常是正的在实际应用中,变量的值常常是正的(如学号、库存量、年龄、存款额等如学号、库存量、年龄、存款额等);u为了充分利用变量的表数范围,此时可以将变量定义为为了充分利用变量的表数范围,此时可以将变量定义为“无符号无符号”类型;类型;u对以上三种
10、都可以加上修饰符对以上三种都可以加上修饰符unsigned,以指定是,以指定是“无符号数无符号数”;u如果加上修饰符如果加上修饰符signed,则指定是,则指定是“有符号数有符号数”;u如果既不指定为如果既不指定为signed,也不指定为,也不指定为unsigned,则隐含为有符号,则隐含为有符号(signed);实际上;实际上signed是完全可以不写的;是完全可以不写的;3.1 整型数据整型数据3.1.2 整型常量与整型变量整型常量与整型变量2.整型变量的种类整型变量的种类归纳起来,可以用以下归纳起来,可以用以下6种整型变量;种整型变量;即:即:有符号基本整型有符号基本整型 signed
11、int 无符号基本整型无符号基本整型 unsigned int 有符号短整型有符号短整型 signed short int 无符号短整型无符号短整型 unsigned short int 有符号长整型有符号长整型 signed long int 无符号长整型无符号长整型 unsigned long int3.1 整型数据整型数据3.1.2 整型常量与整型变量整型常量与整型变量2.整型变量的种类整型变量的种类 数据类型数据类型 所占位数所占位数 取值范围取值范围int 32-231.(231-1)unsigned int 32 0.(232-1)short 16-215.(215-1)unsig
12、ned short 16 0.(216-1)long 32-231.(231-1)unsigned long 32 0.(232-1)十进制小数 如12.,.12,2.34 指数形式 如1.2e3 123e3(123103),1e3(1103),10E2(10102)规范化形式:小数部分数字小于1,小数点后第一个数字必须是非0数字(必有小数必有小数点点)(e(e或或E E前必须有数前必须有数,且后必为整数且后必为整数)3.2.1 实型常量的表示形式实型常量的表示形式3.2 实型数据实型数据数符(数符(+-)小数部分小数部分 指数部分指数部分3.2 实型数据实型数据3.2.2 实型变量实型变量1
13、.实型变量的分类实型变量的分类float float、doubledoubleANSI CANSI C并没有具体规定每种类型数据的长度、精度、数值范围,由编译并没有具体规定每种类型数据的长度、精度、数值范围,由编译系统自行决定;系统自行决定;一般编译系统规定如下表:一般编译系统规定如下表:数据类型数据类型 数据的长度数据的长度 精度有效位精度有效位单精度(float)4字节 6 7位有效数字双精度(double)8字节 1516位有效数字3.2.2 实型变量实型变量3.把实数按双精度数处理把实数按双精度数处理u系统默认将实型常量当作双精度处理,加上系统默认将实型常量当作双精度处理,加上f f或
14、或F F 后就作单精度处理;后就作单精度处理;u一个实型常量可对其它实型变量赋值,但要根据变量的类型截取常量中一个实型常量可对其它实型变量赋值,但要根据变量的类型截取常量中相应的有效位数相应的有效位数如:如:如:如:Float aFloat a;double adouble a;a a123456.7 a=123456.789123456.7 a=123456.789接受接受7位有效数字位有效数字9位有效数字全部接受位有效数字全部接受3.2 实型数据实型数据3.3.1 字符常量和字符变量字符常量和字符变量1.字符常量字符常量定义:用单引号括起来单个普通字符或转义字符.如 a A?n 字符常量的
15、值:该字符的ASCII码值如 A65,a97048,n123.3 字符型数据字符型数据3.3.1 字符常量和字符变量字符常量和字符变量2.转义字符转义字符转义字符转义字符含含 义义转义字符转义字符含含 义义n换行,下行开头t水平制表,跳到下一输出区f换页,下页开头b退格,消除前一个字符r回车,本行开头反斜线单引号“双引号ddd3位8进制数代表的字符xhh2位16进制数代表的字符方式:方式:反斜线后面跟一个字符或一个代码值;反斜线后面跟一个字符或一个代码值;意义:意义:表示将反斜杠后面的字符或代码转换成另外的意义,这这表示将反斜杠后面的字符或代码转换成另外的意义,这这些字符一般不能显示具体的字符
16、形状出来,只表示特殊的含义;些字符一般不能显示具体的字符形状出来,只表示特殊的含义;3.3 字符型数据字符型数据3.3.1 字符常量和字符变量字符常量和字符变量2.转义字符转义字符注意:注意:u 转义字必须以反斜杠作为开头标志转义字必须以反斜杠作为开头标志,而且在其后只能有一个字符(或代,而且在其后只能有一个字符(或代表字符的八进制或十六进制数)表字符的八进制或十六进制数)如:如:nn 是不合法的是不合法的 101x41A 012nu 字符常量只包含一个字符,字符常量只包含一个字符,例如例如a,n(合法合法);ax,food(不合法不合法);u 字符常量区分大小写;字符常量区分大小写;u (单
17、引号单引号)是定界符,表示内部是一个字符常量,引号本身不属于字符是定界符,表示内部是一个字符常量,引号本身不属于字符常量;常量;3.3 字符型数据字符型数据3.3.1 字符常量和字符变量字符常量和字符变量3.字符变量字符变量u 字符型变量是通过关键字字符型变量是通过关键字charchar来说明的,格式如下:来说明的,格式如下:如:如:char c1,c2;u 每个字符型变量可用来存放每个字符型变量可用来存放一个字符常量一个字符常量;如:如:c1=A ;c2=B ;可合并为:可合并为:char c1=A,c2=B;3.3 字符型数据字符型数据3.3.1 字符常量和字符变量字符常量和字符变量4.字
18、符数据与整型数据在一定条件下可以通用字符数据与整型数据在一定条件下可以通用u1 1个字符型数据在内存用个字符型数据在内存用1 1个字节来存储,存储的是字符对应的个字节来存储,存储的是字符对应的ASCIIASCII码值,将码值,将ASCIIASCII码值用二进制形式存储;码值用二进制形式存储;如:如:A 65 A 65 B 66 B 66 01 00 00 01 01 00 00 10 u字符变量和整型变量是通用的字符变量和整型变量是通用的,可以互相赋值;可以互相赋值;如:如:char c=a ;char c=97 ;3.3 字符型数据字符型数据3.3.1 字符常量和字符变量字符常量和字符变量4
19、.字符数据与整型数据在一定条件下可以通用字符数据与整型数据在一定条件下可以通用字符变量可以使用两种形式输出,既可以字符(字符变量可以使用两种形式输出,既可以字符(c c)的形式输出,也可)的形式输出,也可以整型(以整型(d d)的形式输出;)的形式输出;例例2.3 字符数据的赋值和输出字符数据的赋值和输出#include void main()char c1=97,c2=98;/*char c1=a,c2=b*/printf(“%c,%c n”,c1,c2);printf(“%d,%d n”,c1,c2);运行结果运行结果 a,b 97,983.3 字符型数据字符型数据C语言中的运算符语言中的
20、运算符(15类类)算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符 :|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它 :()学习运算符应注意:学习运算符应注意:与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型1 1 算术运算符和算术表达式算术运算符和算术表达式基本算术运算符:+-*/%结合方向:从左向右优先级:+-*/%-+-(2)(3)(4)说明:“-”作为单目运算符时,右结合性两整数相除,结果为整数%要求两侧
21、均为整型数据+-*/中任意数类型为实型,结果均为实型例 5/2 =-5/2.0 =例 5%2 =-5%2 =1%10 =5%1 =5.5%2例 5/2 =2 -5/2.0=-2.5例 5%2 =1 -5%2 =-1 1%10 =1 5%1 =0 5.5%2 ()int a,b,c;float d;a*b/c-1.5(a*b)/c*1.5 a-b*c a-(b*c)a-b+c(a-b)+c自增、自减运算符自增、自减运算符 +-+-作用:使变量值加1或减1 优先级与相同,(2)级,从右向左结合种类:前置 +i,-i (先执行i+1或i-1,再使用i值相当于i=i+1)后置 i+,i-(先使用i值,
22、再执行i+1或i-1)例 j=3;k=+j;j=3;k=j+;j=3;printf(“%d”,+j);j=3;printf(“%d”,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;/k=4,j=4/k=3,j=4/4/3/c=20,a=4/c=15,a=4说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:由右向左优先级:-+-*/%-+-(2)(3)(4)2 2 赋值运算符和赋值表达式赋值运算符和赋值表达式l简单赋值运算符 符号:=格式:变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量a+=3a=a+3x*=y+8x=x*(y+8)x
23、%=3x=x%3l复合赋值运算符 种类:+=-=*=/=%=&=|=含义:var1 op=exp2 var1=var1 op exp2l说明:结合方向:由右向左 优先级:(14)左侧必须是变量,不能是常量或表达式例 int i;i=2.56;/结果i=2;例:a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)/表达式值11,c=6,a=11/表达式值10,a=10,b=4,c=6/表达式值5,a=5,b=10,c=2 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型 赋值表达式的值与变量值相等,且可嵌套例:3=x-2*y;()a+b=3;()l关系运算
24、符 种类:=!=结合方向:自左向右 优先级别:(6)-(7)运算结果为:1 或 0例 int a=3,b=2,c=1,d,f;ab c=ab b+cb f=abc表达式值1表达式值1表达式值0d=1f=0=!=优先级(高)(6)优先级(低)(7)3 3 关系运算符和关系表达式关系运算符和关系表达式关系运算注意事项:关系运算注意事项:例 若a=0;b=0.5;x=0.3;则 a=x0 结果为 A100 结果为10例 注意区分“=”与“=”int a=0,b=1;if (a=b)printf(“a equal to b”);else printf(“a not equal to b”);a equ
25、al to b(a=b)a not equal to b 注意数学上的关系运算符和C语言中的关系运算符的区别!ab!a!ba&ba|b真假真假假假真真逻辑运算符种类:!&|逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”,运算结果:0表示“假”,1表示“真”,真假假假假假真真假假真真真假真真4 4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式!&|高低例 a=x&xb&xy a=b|x=y !a|abl优先级:(2)(11)(12)l结合方向:!:从右向左&:从左向右|:从左向右/*(a=x)&(xb)&(xy)*/*
26、(a=b)|(x=y)*/*(!a)|(ab)*/例 a=4;b=5;!a a&b a|b !a|b 4&0|2 53&2|83)&2|(8b)&(n=cd)/*结果m=0,n=1*/l一般形式:expr1?expr2 :expr3l执行过程l功能:相当于条件语句,但不能取代一般if语句例 if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);l结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)lexpr1、expr2、expr3类型可不同,表达式值取较高的类型例
27、 x?a:b /x=0,表达式值为b;x0,表达式值为a xy?1:1.5 /xy ,值为1.0;x=0);else y=x;while(x=1);返返 回回5.3 C语句的分类语句的分类用用 把一些语句括起来成为复合语句把一些语句括起来成为复合语句复合语句复合语句如:如:if(x 0)i+;sum=sum+x;else j+;sub=sub+x;注意:注意:复合语句中最后一个语复合语句中最后一个语句末尾的分号不能漏掉;句末尾的分号不能漏掉;C语言可以一行写几个语言可以一行写几个语句,也允许一个语句拆开语句,也允许一个语句拆开写在几行上;写在几行上;返返 回回5.4 输入和输出语句输入和输出语
28、句一、字符的输入和输出一、字符的输入和输出格式格式:getchar():getchar()功能:从键盘读一字符功能:从键盘读一字符字符输入函数字符输入函数格式格式:putchar(c):putchar(c)参数参数:c:c为字符变量为字符变量功能:把字符功能:把字符c c输出到显示器上输出到显示器上字符输出函数字符输出函数5.4 输入和输出语句输入和输出语句一、字符的输入和输出一、字符的输入和输出 可以赋给一个字符变量或整型变量可以赋给一个字符变量或整型变量 例:例:#include main()char c;c=getchar();putchar(c);a a5.4 输入和输出语句输入和输出
29、语句二、格式化输入和输出二、格式化输入和输出格式:格式:printf(printf(“格式控制串格式控制串”,输出表,输出表)功能:功能:按指定格式向显示器输出数据按指定格式向显示器输出数据格式输出函数格式输出函数输出表:输出表:要输出的数据(可以没有,多个时以要输出的数据(可以没有,多个时以“,”分隔)分隔)格式控制串:格式控制串:包含两种信息包含两种信息 格式说明:格式说明:%修饰符修饰符 格式字符格式字符 ,用于指定输出格式,用于指定输出格式 普通字符或转义序列:普通字符或转义序列:原样输出原样输出5.4 输入和输出语句输入和输出语句二、格式化输入和输出二、格式化输入和输出例如:例如:p
30、rintf(“%d%d”,a,b););格式控制格式控制 输出列表输出列表printf(“a=%d b=%d”,a,b)格式说明格式说明 普通字符普通字符 输出列表输出列表 可以是可以是表达式表达式5.4 输入和输出语句输入和输出语句十六进制无符号整数十六进制无符号整数不带符号十进制整数不带符号十进制整数十进制整数十进制整数指数形式浮点小数指数形式浮点小数单一字符单一字符字符串字符串八进制无符号整数八进制无符号整数小数形式浮点小数小数形式浮点小数e和和f中较短一种中较短一种百分号本身百分号本身d,ix,Xoucse,Efg%int a=567;printf(“%d”,a);int a=255;
31、printf(“%x”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%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%(1)格式字符表:)格式字符表:5.4 输入和输出语句输入和输出语句(2)修饰符表:
32、)修饰符表:.n对实数,指定小数点后位数(四舍五入)修饰符功 能m输出数据域宽,数据长度m,左补空格;否则按实际输出输出数据在域内左对齐(缺省右对齐)-指定在有符号数的正数前显示正号(+)+输出数值时指定左面不使用的空位置自动填00在八进制和十六进制数前显示前导0,0 x#在d,o,x,u前,指定输出精度为long型在e,f,g前,指定输出精度为double型l对字符串,指定实际输出位数5.4 输入和输出语句输入和输出语句例例 int a=1234;float f=123.456;printf(“%08dn”,a);printf(“%010.2fn”,f);printf(“%0+8dn”,a)
33、;0、+例例 int a=123;printf(“%o,%#o,%X,%#Xn”,a,a,a,a);例例#例例 long a=65536;printf(“%d,%8ldn”,a,a);例例 l/00001234/0000123.45/000+1234/173,0173,7B,0X7B/0,65536例例5.4 输入和输出语句输入和输出语句%m.nf 指定输出的数据占指定输出的数据占m列,其中列,其中n位小数;位小数;右对齐右对齐;%-m.nf 同上同上;左对齐左对齐;例例:main()float f=123.456;printf(“%10f%10.2f%-10.2f%.2f n”,f,f,f,
34、f);结果结果:123.455994 123.46 123.46 123.465.4 输入和输出语句输入和输出语句二、格式化输入和输出二、格式化输入和输出格式输入函数格式输入函数格式格式:scanf(:scanf(“格式控制串格式控制串”,地址表),地址表)功能:按指定格式从键盘读入数据,存入地址表功能:按指定格式从键盘读入数据,存入地址表 指定的存储单元中指定的存储单元中,并按回车键结束并按回车键结束地址表:变量的地址,常用取地址运算符地址表:变量的地址,常用取地址运算符&格式字符格式字符:d,i,o,x,u,c,s,f,e:d,i,o,x,u,c,s,f,e例例 scanf(“%d
35、”,&a);输入:输入:10 则则 a=10例例 scanf(“%x”,&a);输入:输入:11 则则 a=17程序的三种基本结构程序的三种基本结构结构化程序设计结构化程序设计基本思想:任何程序都可以用三种基本结构表示基本思想:任何程序都可以用三种基本结构表示结构化程序:由结构化程序:由三种基本结构反复嵌套三种基本结构反复嵌套构成的程序构成的程序叫结构化程序;叫结构化程序;优点:结构清晰,易读,提高程序设计质量和效率优点:结构清晰,易读,提高程序设计质量和效率三种基本结构三种基本结构一、顺序结构一、顺序结构AB程序的三种基本结构程序的三种基本结构二、选择结构二、选择结构l二分支
36、选择结构二分支选择结构PAB真真假假kA1A2AiAnk=k2k=k1k=knk=ki.l多分支选择结构多分支选择结构注:A,B,A1.An可以是一个简单语句,也可以是一个基本结构程序的三种基本结构程序的三种基本结构l当型循环结构l直到型循环结构PA假假真真AP假假真真三、循环结构三、循环结构第第6讲讲 顺序程序结构顺序程序结构顺序结构是最基本的一种程序结构!顺序结构是最基本的一种程序结构!特点:特点:程序中的语句完全按照语句出现的先后顺序程序中的语句完全按照语句出现的先后顺序依次执行依次执行前面的例子都是顺序结构,顺序结构的程序主要由前面的例子都是顺序结构,顺序结构的程序主要由4部分构成:部
37、分构成:1、变量说明部分;、变量说明部分;2、数据输入部分;、数据输入部分;3、运算部分;、运算部分;4、运算结果输出部分、运算结果输出部分7.1 if语句语句 一、单分支选择一、单分支选择if语句语句if语语句句有有三三种种形形式式:单单分分支支选选择择if语语句句、双双分分支支面具选择面具选择if语句、多分支选择语句、多分支选择if语句。语句。语句形式:语句形式:if (表达式)表达式)语句;语句;语句执行流程:语句执行流程:表达式表达式语句语句真真(非非0)假假(0)例例7-1:从键盘输入两个整数:从键盘输入两个整数a和和b,如果,如果a大于大于b则交则交换两数,最后输出两个数。换两数,
38、最后输出两个数。7.1 if语句语句#include 输入输入a,ba,babab交换交换a a、b b输出输出真真假假 void main()int a,b,t;scanf(%d,%d,&a,&b);if(ab)t=a;a=b;b=t;printf(a=%d,b=%dn,a,b);7.1 if语句语句注意:注意:(1 1)ifif语句自动结合一个语句,当满足条件需要语句自动结合一个语句,当满足条件需要执行多个语句时,应用一对大括号执行多个语句时,应用一对大括号将需要执行将需要执行的多个语句括起,形成一个复合语句。的多个语句括起,形成一个复合语句。(2 2)ifif语句中表达式
39、形式很灵活,可以是常量、语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数等。只要表达式的变量、任何类型表达式、函数等。只要表达式的值为非零值,条件就为真,反之条件为假。值为非零值,条件就为真,反之条件为假。7.1 if语句语句2、双分支选择、双分支选择if语句语句语句形式:语句形式:if (表达式)表达式)语句语句1;else 语句语句2;语句执行流程:语句执行流程:表达式表达式语句语句1真真(非非0)假假(0)语句语句27.1 if语句语句例例7-2:输输入入两两个个整整数数,输输出出其其中中较大的数。较大的数。#include#include void main()int x
40、,y,max;scanf(%d,%d,&x,&y);if(xy)max=x;else max=y;printf(max=%dn,max);输入输入x,yx,yxyxymax=xmax=x输出最大值输出最大值结束结束真真假假max=ymax=y7.1 if语句语句注意注意:if和和else语语句句之之间间只只能能有有一一个个语语句句,当当ifelse之之间间的的语句不只一句时,应用一对语句不只一句时,应用一对 将语句括起。将语句括起。if(ab)a+;b+;else a=0;b=10;7.1 if语句语句3、多分支选择、多分支选择if语句语句语句形式:语句形式:if (表达式表达
41、式1)语句语句1;else if (表达式表达式2)语句)语句2;else if (表达式表达式n)语句)语句n;else 语句语句n+1;7.1 if语句语句语句执行流程:语句执行流程:表达式表达式1 1语句语句1真真(非非0)假假(0)语句语句2表达式表达式2 2真真(非非0)表达式表达式n n语句语句n语句语句n+1假假(0)假假(0)真真(非非0)7.1 if语句语句提示提示:(1 1)当当if if语语句句中中出出现现多多个个“if”if”与与“else”else”的的时时候候,要要特特别别注注意意它它们们之之间间的的匹匹配配关关系系,否否则则就就可可能能导导致致程程序序逻辑错误。逻
42、辑错误。“else”else”与与“if”if”的匹配原则是的匹配原则是“就近一致原则就近一致原则”,即即“else”else”总是与它总是与它前面最近前面最近的的“if”if”相匹配。相匹配。if()if()if()else.else.else.7.1 if语句语句if ()if ()语句语句1else if ()语句语句2 else 语句语句3内嵌内嵌ifif ()if ()语句语句1 else if ()语句语句2 else 语句语句3 内嵌内嵌if内嵌内嵌if7.1 if语句语句例:例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);
43、修改:修改:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);n实现实现if else 正确正确配对方法:配对方法:加加 n如果如果ifif与与elseelse的的数目不一样,可以数目不一样,可以加花括号加花括号来确定来确定配对关系。配对关系。7.2 switch语句语句1、语句形式:、语句形式:switch (表达式)(表达式)case 常量常量1:语句语句1;case 常量常量2:语句语句2;case 常量常量3:语句语句3;.case 常量常量n:语句语句n;default:语句语句n+1;根据表达式的不同值,根据表达式的不同值,选择不同
44、的程序分支,选择不同的程序分支,又称开关语句又称开关语句。数值型数值型或或字符型字符型常量表达式的值必须互不相常量表达式的值必须互不相同,否则执行时将出现矛盾,同,否则执行时将出现矛盾,即同一个开关值,将对应多即同一个开关值,将对应多种执行方案。种执行方案。千万不能接;千万不能接;7.2 switch语句语句2、语句执行流程:、语句执行流程:指语句的最后指语句的最后一条是否为一条是否为break简单语句或简单语句或复合语句复合语句breakbreakbreakbreak有有无breakbreak有无有计算表达式计算表达式常量常量1 1常量常量2 2常量常量n n=语句语句1 1=语句语句2 2
45、语句语句n n其它其它=语句语句n+1n+1无值值casecase语句出现的次序语句出现的次序并不影响执行结果。并不影响执行结果。8.1 while循环控制循环控制 l语句一般格式 while(表达式)语句 l l一般为一般为一般为一般为关系关系关系关系表达式表达式表达式表达式或或或或逻辑逻辑逻辑逻辑表达式,也表达式,也表达式,也表达式,也可以是可以是可以是可以是C C语言其他类语言其他类语言其他类语言其他类型的合法表达式型的合法表达式型的合法表达式型的合法表达式 l l用来控制循环体是用来控制循环体是用来控制循环体是用来控制循环体是否执行否执行否执行否执行l l称为称为称为称为内嵌语句内嵌语
46、句内嵌语句内嵌语句,可以是基本语句、可以是基本语句、可以是基本语句、可以是基本语句、控制语句,也可控制语句,也可控制语句,也可控制语句,也可以是复合语句以是复合语句以是复合语句以是复合语句l l是循环重复执行是循环重复执行是循环重复执行是循环重复执行的部分的部分的部分的部分 功能:功能:l计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句。N NY Y流程图流程图流程图流程图表表达达式式非非0?语句语句循环控制条件循环控制条件循环控制条件循环控制条件循环体循环体循环体循环体例如:例如:【例5.1】
47、编写程序,求100个自然数的和即:s=1+2+3+100 思路:寻找思路:寻找加数加数与与求和求和的规律的规律 加数加数i i从从1变到变到100,每循环一次,使,每循环一次,使i增增1,直到直到i的值超过的值超过100。i i的的初值初值初值初值设为设为1。求求 和和设变量设变量 sum sum 存放和存放和,循环求,循环求 sum=sum+isum=sum+i,直至,直至i超过超过100。算法和程序:算法和程序:main()int i,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);程序输出结果:程序输出结果:sum=5
48、050i i:循环控制变量循环控制变量sumsum:累加器累加器8.2 do-while语句语句l语句一般格式 do 语句 while(表达式);l功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。do-while循环的算法循环的算法NY循环体循环体表达式非表达式非0?流程图流程图main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(%dn,sum);用用用用do-whiledo-while语句语句语句语句求求求求100100个自
49、然数的和个自然数的和个自然数的和个自然数的和 说明:说明:lwhile和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构l l区别:区别:do-while 语句语句先执行循环体再判断条先执行循环体再判断条件,循环体件,循环体至少执行一次至少执行一次;while 语句语句先判断条件再执行循环体,先判断条件再执行循环体,循环体有可能一次也不执行循环体有可能一次也不执行l ldowhile循环体中一定要有能使表达式值循环体中一定要有能使表达式值趋于趋于0的操作的操作(如如i+),否则会出现,否则会出现死循环死循环。8.3 for语句语句 l语句一般格式 for(表达式1;表达式2;表达式3)语句 l l功能:功能:计算表达式计算表达式计算表达式计算表达式1 1的值,再的值,再的值,再的值,再判断表达式判断表达式判断表达式判断表达式2 2,如果其值,如果其值,如果其值,如果其值为非为非为非为非0 0(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(循环体循环体循环体循环体),并并并并计算表达式计算表达式计算表达式计算表达式3 3;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式;之后再去判断表达式2 2,一直,一直,一直,一直到其值为到其值为到其值为到其值为0 0时结束
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100