1、主要针对主要针对C语言的语句部分语言的语句部分关系运算符和关系表达式1.关系运算符及其优先次序:(小于)(大于)=(大于或等于)=(等于)!=(不等于)优先级相同(高)优先级相同(低)算术运算符关系运算符赋值运算符关系运算符的结果只有0和1两种,即为逻辑值。选择结构程序设计选择结构程序设计逻辑运算符和逻辑表达式1.用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式。2.逻辑运算符及其优先次序:(1)&逻辑与(2)|逻辑或(3)!逻辑非“&”和“|”是“双元(目)运算符”,它要求有两个运算量(操作数)。如(ab)&(xy)“!”是一元运算符,只要求有一个运算量。如 !(ab
2、)3.逻辑运算符的优先次序:(1)!&|(2)!算术运算符 关系运算符&和|赋值运算符4.逻辑表达式的值将一个非0的数值认作为“真”5.例如:53&83”(因为关系运算符优于&)的结果“1”;再处理“1&84-!0”(由于“”优于“&”)所以先处理“84-!0”现在4的左边为“”,右边为“-”,由于(算术运算符优于关系运算符)所以先处理“4-!0”由于“!”的等级最高,故先算“!”也即是“4-1”=3;再进行“8b)max=a;else max=b;当ab时将a的值赋给max,当ab是否满足,都相同一个变量赋值。可以用下面的条件运算符来处理。max=(ab)?a:b;其中“(ab)?a:b”是
3、一个“条件表达式”它的执行过程:若(ab)条件为真,则条件表达式取a,否则取值b.条件运算符要求有3个操作对象,称三目运算符。条件表达式的一般形式:表达式1?表达式2:表达式3表达式1条件表达式去表达式2的值条件表达式去表达式3的值假(0)真(非0)(1)条件运算符的优先级优于赋值运算符,但是比关系运算符和算术运算符都低。(2)条件运算符的结合方向是“自右至左”例如:ab?a:cd?c:d若 a=1,b=2,c=3,d=4则先算(cd)?c:d 结果:d=4 再算(ab)?a:4 结果:d=4(3)条件表达式还可以写成以下形式:ab?(a=100):b=100)或 ab?printf(“%d”
4、,a):printf(“%d”,b)即表达式2和表达式3不仅可以是数值表达式,还可以赋值表达式或函数表达式。例:输入一个字符,判别它是否大写字母,若是,将它转换成小写字母;若不是,不转换。然后输出最后得到的字符。Main()char c1;scanf(“%c”,&c1);c1=(c1=A&c1y)printf(“%d”,x);表达式假(0)语句真(非0)(2)if(表达式)语句1 else 语句2 例如:if(xy)printf(“%d”,x);esle printf(“%d”,y);表达式语句2语句1假真(3)if(表达式)语句1 else if(表达式2)语句 2 else if(表达式3
5、)语句 3 .else if(表达式m)语句melse 语句n说明:(1)3种形式的if后面都有表达式,一般为逻辑表达式或关系表达式。在执行if语句时先对表达式求解。若表达式为真,则执行后面的语句。若为假则执行else后的语句。(2)第二、三种形式的if语句中,在每个else前面有一分号,整个语句结束处有一个分号。Switch 语句语句1.Switch语句是多分支选择语句。而if 语句只有两个分支选择。2.Switch的一般形式:switch(表达式)case 常量表达式 1:语句1 case 常量表达式 2:语句2 case 常量表达式 n:语句n default:语句n+1.3.Switc
6、h 后面括号内的表达式,ANSI标准允许它为任何类型。4.当表达式的值与某一个case后面的常量表达式相等,就执行此case后面的语句,若所有的case后面的表达式都没有与表达式相等,就执行defaulth后面的语句。5.每一个case的常量表达式的值必须互不相同。6.各个case和default得出现次序不影响执行结果。7.在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就继续执行下去,不再进行判断。例如:Switch(grade)case A:printf(”85100n”);case B:printf(“7084n”);case C:printf(“6069n
7、”);case D:printf(”60n”);default:printf(“errorn”);输出结果:85100 7084 6069 90 error为了解决这一问题,即在执行一个case分支后,使流程跳出 switch 结构。可以用一个 break 语句来达到此目的。例如:Switch(grade)case A:printf(”85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(”60n”);break;default:printf(“errorn”);最后一个分支
8、可以不加 break 语句。如果 grade 的值为B,则只输出“7084”,goto 语句以及用语句以及用goto 语句构成的循环语句构成的循环 循环控制循环控制1.goto 语句为无条件转向语句,它的一般形式:goto 语句标号语句标号;语句标号用标识符表示,它的定名规则与变量语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,第一名相同,即由字母、数字和下划线组成,第一个字符必须为字母或下划线。不能用整数来作个字符必须为字母或下划线。不能用整数来作标号。标号。例如:goto label_1;2.结构化程序设计方法主张限制使用 goto 语句,因为滥用 goto 语
9、句将使程序流程无规律、可读性差。3.goto语句的两个用途:(1)与if 语句一起使用,构成循环结构。(2)从循环体中调到循环体外。但可以用 break 和 continue 跳出本层循环和结束本次循环。故使用机会少。例题:用 If 语句和 goto语句构成循环,求 1+2+3+100;main()int i,sum;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;while 语句语句1.while 语句是用来实现“当型”循环结构的。其表达式:while(表达式)循环语句 功能:当表达式的值为“真”时,执行循环体语句。2.例题:计算1+2+3+100;main
10、()int a,sum;sum=0;a=1;while(a=100)sum=sum+a;a+;printf(“%d”,sum);3.使用 while 语句需注意的几点:(1)表达式是控制循环的条件,可以是任何类型的表达式。(2)while 语句循环是先判断、后执行。若表达式一开始就是假的,则一次循环都不执行。(3)循环体中必须有使循环趋于结束的语句,否则会出现死循环。do while 语句语句1.do while 语句用于实现直到型循环结构。其一般形式:do 循环体语句 while(表达式);其执行特点:先执行循环体中的语句,然后判断表达式,当表达式的值为“真”时,就返回重新执行循环体语句,如
11、此反复,直到表达式的值为“0”为止,此时循环结束。无论如何,do while 循环至少执行一次循环语句。2.用 do while 计算1+2+3+100;main()int a,sum;sum=0;a=1;do sum=sum+a;a+;while(a=100);printf(“%d”,sum);用用 for 语句实现循环语句实现循环1.for 语句的一般表达式:for(表达式1;表达式2;表达式3)循环语句执行过程:(1)先求解表达式1;(2)求解表达式2,若值为真,则执行for语句中的循环语句,然后在执行表达式3;若表达式2的值为假,则结束循环。(3)求解表达式3后再执行第(2)步。2.f
12、or 语句的表达式也可以理解成为:for(循环变量赋初值;循环条件;循环变量增量)语句 3.例如:for(i=1;i=10;i+)i=1;sum=sum+1;while(i=10)【for 与 while 语句的等效】sum=sum+i;i+;4.(1)如果表达式2省略了,即不判断循环条件,循环无止境的进行下去。(2)表达式2 一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表式,只要其值非零,就执行循环体。(3)表达式一般是关系表达式(i10)或逻辑表达(ab&xy),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。例1:for(i=0;(c=getchar()!=n
13、;i+=c);在表达式2中先从终端接受一个字符赋给c,然后判断此赋值表达式是否不等于n,如果不等于n,就执行循环体。它的作用:不断的输入字符,将他们的ASCII码相加,直到输入一个换行符为止。它的执行过程如下:表达式2i=0取一个字符取一个字符cC!=换行符换行符i=i+c假真例如:用for语句复制一行字符。Main()char a;后 a=getchar();注释用红色注释用红色二二字表字表示示 for(;a!=n;)printf(“%c”,a);a=getchar();注释用紫色二字表示注释用紫色二字表示注释:for循环语句中的printf是输出红色的a,然后接受蓝色的a,没有输入n,所以
14、继续循环,即输出刚才接受的蓝色的a,然后蓝色的a再输入这样在for循环中依次循环下去,直到输入n也就是在键盘上敲的“Enter”时截止。循环的嵌套循环的嵌套1.一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。2.三种循环结构是可以互相嵌套的。(while循环、dowhile循环、for循环)3.介绍六种合法的嵌套形式:(1)while()(2)do (3)for(;)(4)while().while()do for(;)do .while()while()(5)for(;)(6)do while()for(;).while().几种循环的比较
15、几种循环的比较1.在while循环和dowhile循环中,只在while后面的括号内指定循环条件,因为为了使循环能正常结束,应该在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)for循环可以在表达式3中包含使循环趋于结束的操作。2.用while和dowhile循环时,循环变量初始化的操作应在while和dowhile语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。3.While循环、do.while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行
16、控制。break语句和语句和continue语句语句1.break语句通常与switch语句一起使用。break语句对 if/else的条件语句不起作用;在多重循环中,一个break语句只能向外跳出一层。2.continue语句 其作用:跳过循环体中剩余的语句而强行执行下一次循环。continue只用于for、while、do.while等循环体中,常与if条件语句一起使用,用来加速循环。例题:把100200之间不能被3整除的数输出。main()int a;for(a=100;a200;a+)if(a%3=0)continue;printf(“%d”,a);思考:把例题中的循环体用if语句处理,怎么写?